ふと、C++14のコア言語の、主要なC++コンパイラーによるサポート具合はどうだろうかということに思い立った。主要なC++コンパイラーは、現在のところ、二つしかない。GCCとClangだ。最近、私は以前ほど頻繁にコンパイラーを自前ビルドしていない。C++11の実装は、だいぶこなれてきたからだ。では、C++14はどうか。
まずGCCからみてみよう。以下のページで、対応状況をまとめている。
C++1y/C++14 Support in GCC - GNU Project - Free Software Foundation (FSF)
もちろん、まだ規格がドラフト段階というのもあるし、実装が完全ではないというのもあるが、GCCのC++14機能は、-std=c++1yというオプションを指定することで、有効にできる。
わかりやすい新機能で言うと、二進数リテラル、戻り値の型推定、実行時サイズ配列、汎用ラムダキャプチャーが、4.9で、現在提案されている論文の文面通りに実装しているそうだ。もちろん、まだ正式な規格ではないので、規格の方が変わる可能性がある。
また、ジェネリックラムダ式と、変数テンプレートについては、もっか実装中だそうだ。その他については、まだ実装も始まっていないようだ。
Clangはどうか。以下のページで、対応状況をまとめている。
Clang - C++98, C++11, and C++14 Status
なんと、ほとんどの機能は、レポジトリ入りしているという。まだ完全に実装し終えていないコア言語は、ジェネリックラムダ式とsized deallocation(解放関数にストレージのサイズを渡す引数のついたオーバーロードを追加するもの)だけだそうだ。
Clangの方も、この、ドラフトに基づいた実験的な実装の新機能を使うには、-std=c++1yを指定する必要がある。
それにしても、最近、GCCはClangの後追いをしている印象がある。C++14の機能のサポートもClangに後れを取っているし、その他の有用な機能、例えば、未定義動作を実行時に検出する、Undefined Behavior Sanitizerも、Clangの実装を受けて、ClangでUBSを実装した人間がGCCでも再実装した。
Clangも自由なソフトウェアではあるのだが、やはり独裁は好ましくないし、思想の違いからも、GCCには頑張って欲しい。
以上、コンパイラー実装の知識が一切ない者の感想だ。
No comments:
Post a Comment
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.