ここ数ヶ月のC++11のコンパイラー事情はどうなっているのか。これが、あまり大規模な変化はない。もちろん、細かいバグ修正などはあるにしても、大胆な機能実装はない。これは、gccもclangも、C++11のある程度の機能を実装し終えたからである。まだ細かい部分でいくつか規格との齟齬があるものの、大方はいますぐ使えるようになっている。
現在のところ最も規格準拠度に厳格な姿勢を見せているClangでは、コア言語で実装していない機能はわずかに二つ。AttributesとInheriting Constructorsである。
Clang - C++98 and C++11 Status
Inheriting Constructorsは、見た目以上に実装が難しく、また規格の文面も曖昧で、非常に難儀しているそうだ。また、実装したいと思う開発者もいない。
Attributesは、規格や実装にさしたる問題はなけれども、特に需要もないので、なかなか実装されない。すでにすべてのC++コンパイラーでは、同等機能が提供されているし、わざわざユーザーは既存のコードを書きなおしたりしない。
C++では、インラインアセンブリのためのキーワードと文法もあったが、あまりにも人間にとって文法が汚かったので、誰も使ってない。どのコンパイラーも、インラインアセンブリには独自の、人間にとって書きやすく読みやすい文法を用意している。
GCCではどうかというと、少し事情が異なる。
C++0x/C++11 Support in GCC - GNU Project - Free Software Foundation (FSF)
なんと、Attributesの実装作業が始まっている。まあ、実装したからといって、従来の__attribute__のかわりに使われるとも限らないのだが。
Inheriting Constructorsは、gccでも打ち捨てられている。
gccで興味深いのは、*thisへのrvalueリファレンスが、いまだに実装されていないことだ。もっとも、この名前は誤解を招く。C++11では、*thisへのlvalueリファレンスの明示的な指定もできるのだ。実装されない理由はよく分からない。難しいのか、はた実装したい人間がいないのか、はた需要がないのか。gccはすでに、これ以外のrvalueリファレンスを実装しているのだが。
名前だけしか聞こえないEDGなどは、表には出てこないのでさっぱりわからない。まあ、表に出てこない情報は存在しないも同じだから、どうでもいい。
一方、表にやたらとでしゃばってきて、やたらとC++を喧伝している某コンパイラーは、実はC++コンパイラーですらないので、わざわざ記すに及ばない。
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.