Diego Novillo - Switching to C++ by default in 4.8
GCC開発者の一人でGooglerのDiego Novilloは、今月の3日にMLで、GCC 4.8のビルドをデフォルトでC++にしようと提案している。これは、GCC自体をビルドする際のデフォルトの言語をC++にするという意味である。GCCがコードをデフォルトでC++としてコンパイルするのではない。現在のGCCビルドシステムの言語モードをC++に切り替えるのは非常に簡単で、必要なのはテストだけだという。
2011年、GCCの実装で、C++を使用可能にする採択が受け入られている。GCC自体のコンパイルをデフォルトでC++にすることは、GCC実装におけるC++の利用を更に加速するだろう。
GCCにおけるC++利用のコーディング規約は、目下作成中である。コーディング規約が完成する前に、GCCのビルドをC++に移行することは意義がある。
GCCの実装でC++を使うというのは、だいぶ感慨深いものがある。とうとうC++もそこまで枯れてきたということだ。
GCCの実装がC++になると、マイナーな環境におけるGCCのコンパイルが、少し難しくなる。というのも、C言語はいまだに、ネイティブコードを吐く言語としては最大の移植性を誇っている。ほぼすべてのコンピューターシステムに、GCCをコンパイルできるCコンパイラーが存在する。そのコンパイラーでGCCをコンパイルして、さらに出来上がったGCCでもう一度GCCをコンパイルすれば、そのシステム上での、GCCによるネイティブGCCをビルドできる。正しく動作する自分自身をコンパイルすることを、セルフホストと言い、コンパイラーの完成度をはかる上でひとつの目安となっている。clangは2010年にセルフホストを達成した。
GCCのビルドシステムにおけるブートストラップは、3ステージある。その概要は、以下のページで解説されている。
Installing GCC: Building - GNU Project - Free Software Foundation (FSF)
- システム上のCコンパイラーを使い、GCCのビルドに必要なツールをビルドする。
- ステージ1 GCCをビルドする。
- ステージ1 GCCを使い、ステージ2 GCCをビルドする。
- ステージ2 GCCを使い、ステージ3 GCCをビルドする。
- ステージ2とステージ3を比較して、一致することを確かめる。
- ステージ3 GCCでランタイムライブラリをビルドする。
これが、C++コンパイラーに変わる。問題は、おそらく相当な制限がかかるであろうGCCにおけるC++利用のコーディング規約であっても、将来のGCCをコンパイルできる、十分に規格準拠なC++コンパイラーというのは、数えるほどしかないということだ。いま思いつくのは、GCC、EDG、Clang、あまり列挙したくないがひょっとしたらMSVC。とすると、今後のC++を使ったGCCを既存のあらゆるシステム上でビルドする際には、まずC++で書かれたGCCを正しくコンパイルできるCで書かれたバージョンのGCCが重要になってくる。
ブートストラップ問題はややこしい。おそらく、ブートストラップ問題から一番離れている言語は、LISP系の言語であろう。Wikipediaによると、史上初のセルフホスト可能なコンパイラーは、LISPコンパイラーだという。
Bootstrapping (compilers) - Wikipedia, the free encyclopedia
いつかSchemeを完全に理解したいものだ。少なくとも、セルフホスト可能なサブセットのLISPを完全に理解することは可能である。セルフホスト可能なサブセットのC++やJavaScript(ただし、evalはチート)を完全に理解するのは不可能だ。
No comments:
Post a Comment