2012-05-23

LLVM 3.1がリリースされた

LLVM 3.1 Release Notes
Clang 3.1 Release Notes

なんでリリースが遅れたのかはわからない。IRCでは、gcc4.7では、ほとんどのSTLが動かない。リリース前までに直す必要があるということが議論されていたように思う。

とにかく、LLVM 3.1のリリースは、C++的になかなか興味深い。

まず、このリリースによって、C++11のコア言語のほとんどの機能はサポートされた。特に、lambda、initializer list、constexpr、user defined literalのサポートは大きい。というより、サポートしていない機能を挙げたほうが早い。サポートしていないコア言語の機能とは、AttributeとInheriting Constructorsとthreadlocalぐらいなものである。thredlocalは必要だが、AttributeとInheriting Constructorsの優先度は非常に低く、とくにInheriting Constructorsは問題があり、開発者のやる気がでないらしい。

そのへんの話については、26日の勉強会で話すつもりだ。

ちなみに、今回はatomicもサポートされたそうだ。

libc++は、GNU/Linux環境で試すことぐらいはできると思うのだが、とりあえずユーザーがコンパイルするための簡単なドキュメントからして存在しない。存在しないからには、まだ時期尚早なのかもしれない。調べたところによると、libc++の他に、C++のランタイムライブラリ(ABIとかRTTIとかの低級実装)が必要だそうだ。これは様々な実装があるが、gccと互換性を保ちたければ、gccのライブラリを使う必要がある。ちなみに、FreeBSDは、libc++を標準で含めている。FreeBSDは、「自由」の定義の相違から、GNUとは距離を置きたいらしく、当然の動きと言えるだろう。

ちなみに、今年のGSoCで、Debianでlibc++をパッケージ化するプロジェクトが受け付けられている。その過程で、ドキュメントなんかも整備されたりはしないかと期待している。

廃止された機能もある。LLVM 3.1では、Cバックエンドが廃止された。廃止理由は、「そもそもまともに動かねーよ」ということらしい。また、LLVM 2.9のバイトコードとの互換性が打ち切られた。今後のリリースは、LLVM 3.0以降の吐き出すバイトコードとの互換性を保つそうだ。

それから、Clangをコンパイルするのに、今までPerlが必要だったのだが、これがPythonに変わった。また、公式のPython bindingなども3.1から入ったようだ。詳細はよくしらないが、世の中はますますPythonになっていくのだろう。思うに、Pythonは非常に素晴らしいスクリプト言語なので、C++プログラマーは学ぶべきだろう。

No comments: