2012-04-06

GCC 4.8のビルドはデフォルトでC++になるかも

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: