2013-06-24

Graham Pentheny | 余は如何にしてC++グランドマスター認証を辞したるか

Graham Pentheny | Why I’m quitting the C++ Grandmaster Certification course

今年の二月頃、C++グランドマスター認証を紹介した。これは、C++11の完全なコンパイラーとライブラリを作るというもので、定期的な課題をクリアすることで、最終的にセルフホスト可能な完全なC++11の実装を作るというオンライン上の講義という触れ込みだった。参加費は無料で誰でも参加できるが、課題をパスできない者達は脱落していく。

その途中結果は外部に公表されないので、詳細は不明だが、どうやら、単なる詐欺サイトではなく、真面目に課題が進んでいたそうだ。

その参加者のひとりが、途中でやめることにしたそうで、その理由を書いている。

余は如何にしてC++グランドマスター認証を辞したるか

数カ月前、余はC++グランドマスター認証コースを受けたり。その意は教育的のみならず、且は生産的、且は履歴書に書くにも都合よからんことにあり。グランドマスター認証コースは、完全な、ブートストラップな、C++11コンパイラー(オプティマイザーは除く)を、Linux AMD64向けに、外部ライブラリを使わず、一から書き上げるものなり。これはいと興あることなり、如何となれば、完全な標準準拠のブートストラップコンパイラーを書く以上に、言語を完全に理解したと示す方法なしとみなされたればなり。これは素晴らしく野心的なアイディアたるも、余は同意せず、辞したりし。

大苦行

今更言うにも及ばぬが言う。C++コンパイラーを書くがごときは大苦行なり。C++標準規格の最新の公開されたる作業中のドラフトは、1314ページもの長きに渡る。試みにこれをR5RS Scheme標準と比してみんか。目次、題名、参考文献、索引まで含めて50ページなり。余思う、C++標準規格は、およそ書かれたるプログラミング言語コンパイラー規格書の中でも、最大のものならんと。

ツールチェイン

コースはターゲットプラットフォームとOSを未改変でインストールされたUbuntu AMD64と定めたり。すなわち、認定のために提出すべきコンパイラーは、GCC 4.7.3と、(さらに重要なることに)、stdlibc++ 4.7でコンパイルされねばならず、これには、C++11のregexサポートなかりし。余思う、コンパイラーを何らかの正規表現やパターンマッチライブラリなしで書くのは、James Hagueのブログのすばらしい引用、「文字eを使わずに小説をかくようなものだ」と等しからんか。これ、外部ライブラリの利用が許されたるか、あるいはclangとlibc++が使えたれば、問題とはならざりき。前者は禁止され、後者は認証サーバーに存在せざりき。

「グランドマスター」

そもC++の「グランドマスター」たることは何らの意味をもてるにや? 標準規格を表裏、枝葉まで知りつくしたることの謂か。GCCのコードジェネレーターの中身であるレジスター割り当てやエイリアス検出アルゴリズムを深く理解することの謂か。余はこれらを重要な知識とは思いたるも、偉大なるC++プログラマーたるにさほどまで関わるとは思わざりし。F1ドライバーは車がどのように動くか、且、入力がどのように運転に変換されるかを知れり。されど、F1ワールドチャンピオンたらんとするに、圧縮率やピストンの設置角度や許容範囲について理解する必要なし。単に速く運転する方法と、車を可能な限り速く動かす方法を知れば足るのみ。あるいは、これらの深い知識が一助になることもあらんか。されど、これらの技術は頻繁に変更され、極端に文脈依存なりき。最良の方法は、入力を変更して、結果をベンチマークすることを繰り返すことなり。

結果

かかる苦行を受けるからには、何か一般に見せられる努力の成果があらんと欲す。コースはコンパイラーを作成することなるも、受講者は、受講中、あるいはその後も、ソースコードを公開しないことに同意することを求められたりし。如何となれば、結果は、最適化無し、単一プラットフォーム、極端に非汎用で、制限的なC++コンパイラーなれば、価値がなければなり。もしこのコースを受ける労力の半分でも、clangのドキュメントや、熱望されている近代的なC++開発ツールにあてれば、多少のユニットテストをパスして究極的に何らの意味もない認証のためのクソコンパイラーをいくつも書くよりは、この業界に変化をもたらすこともあらんか。

一つだけ思うのは、C++11コンパイラーを実装するという問題に比べれば、正規表現ライブラリの有無なんて些細なことに思えるのだが。どうせstd::regexなんて文脈依存しまくりのC++のパースにはまともに使えないだろうし。

No comments: