Write GCC in C++
Write gcc in C++ (GCC Summit 2008 in otawa) PDF
# GCC Summit に行ってきて興奮冷めやらぬ QLeap さんに twitter でこの PDF を教えてもらったのが,そもそもの関心を持ったきっかけ.
あとの流れは,
Converting GCC to C++
> tabesugi.net 2008年 6月 (2)。Jun 19 [Thu] (20:38)
>>はじめてのにき (2008-06-20)
みたいな感じ.
Lisp ってのがあいまいですけど,通常単に Lisp と言ったら,Common Lisp のはず.そして Common Lisp はネイティブコンパイラの方が普通だと思います.
ブートストラップを達成云々は CLISP (バイトコードコンパイラ) じゃなくて,SBCL (CMUCL) のことですかね.SBCL (CMUCL) をビルドするのに SBCL (か CMUCL) が必要です.
# ちなみに CMU はカーネギーメロン大学で,SB は鉄鋼銀行 (カーネギーは鉄鋼王だから ?) らしいです.CMUCL のブランチが SBCL.CMUCL よりも豊富なプラットフォーム,ネイティブスレッド,国際化などの特徴があるそうです.
C++ で GCC を書き直せば,今の C で無理やり OOP や template 相当の処理をしているようなところが全部標準 C++ 化できますし,GGC の黒魔術も smart pointer で不要になることなどが期待できます.
まぁ,個人的には,面白いとは思いますけど,労多くして実利が少ないプロジェクトだろうな,という気がします.あと,GCC の内部がわかりやすくなってしまうと,ちょっと寂しいかなという気も w あの,全体的に無理やり C で Lisp プログラミングやってるような感じが,マニアにはたまらないのです ww
なによりも,せっかく MIT AI ラボで夢破れた筋金入りの Lisper RMS が,あえて C を使って, 20 年もかけて怨念のように進めてきた苦労を全否定するのか!という(笑)
そもそも C++ コンパイラと,LISP コンパイラのどっちが多くの環境で実行可能で,よりポピュラーかと言えば,それは火を見るよりも明らかですしねぇ (仮にもし GCC の記述言語に LISP が採用されたならば,ポピュラリティが逆転し,もしかしたら RMS の積年の夢が叶うのかもしれませんが w). GCC のフロントエンドがサポートする言語に,LISP はありませんしね (GCC の構造的に,たぶん LISP のような言語の最適化にはあんまり向かない気がします.GCC で,比較的低水準な命令型言語以外のフロントエンドを作ろうとすると,仮にできたとしても,gcj みたいに,巨大なフロントエンドとランタイムが後からくっつく,不恰好でバランスが悪いものになると思います)
フックを入れること自体はそんなに難しくないですし,むしろ 4.x からはフロント-ミドル-バックエンドの分離が進んで簡単になってきてますけど,中間表現の完全な dump と read が不可能な構造になってるということを言いたいのでしょうね.
RMS が,バックエンドのフリーライドを防ぐため,あえてソースの直接改造が必要不可欠な構造にしてあるようです (GCC と独立して,中間表現のダンプと読み込みが可能になってしまうと,フロントエンド〜ミドルエンド部分だけを GPL フリーに作ってつなげることが可能になってしまう)
個人的には,誰が作ってようが,ライセンスが GPL でちゃんと全てソースが公開されてれば自由なソフトウェアだと思います.
PCC (Portable C Compiler) に LLVM (Low Level Virtual Machine) に,修正 BSD ライセンスの C/C++ コンパイラが求められている背景があって,貴重なマンパワーが分散してしまってもったいない気もしますが.まぁ,これもまた FOSS って感じで良いんじゃないですかね.
マイコミジャーナル 【レポート】 GCCに匹敵するコンパイラ?! LLVM - BSDCan2008
# LLVM は,言わばコード生成と実行全体のフレームワークなので,コンパイラフレームワークの GCC と単純に比較できるようなものではないと思うので,この記事のタイトルは語弊があるなぁと思うわけですが… まぁ,それはまた別のお話.
# GCC Summit に行ってきて興奮冷めやらぬ QLeap さんに twitter でこの PDF を教えてもらったのが,そもそもの関心を持ったきっかけ.
あとの流れは,
Converting GCC to C++
> tabesugi.net 2008年 6月 (2)。Jun 19 [Thu] (20:38)
>>はじめてのにき (2008-06-20)
みたいな感じ.
Lisp ってのがあいまいですけど,通常単に Lisp と言ったら,Common Lisp のはず.そして Common Lisp はネイティブコンパイラの方が普通だと思います.
ブートストラップを達成云々は CLISP (バイトコードコンパイラ) じゃなくて,SBCL (CMUCL) のことですかね.SBCL (CMUCL) をビルドするのに SBCL (か CMUCL) が必要です.
# ちなみに CMU はカーネギーメロン大学で,SB は鉄鋼銀行 (カーネギーは鉄鋼王だから ?) らしいです.CMUCL のブランチが SBCL.CMUCL よりも豊富なプラットフォーム,ネイティブスレッド,国際化などの特徴があるそうです.
C++ で GCC を書き直せば,今の C で無理やり OOP や template 相当の処理をしているようなところが全部標準 C++ 化できますし,GGC の黒魔術も smart pointer で不要になることなどが期待できます.
まぁ,個人的には,面白いとは思いますけど,労多くして実利が少ないプロジェクトだろうな,という気がします.あと,GCC の内部がわかりやすくなってしまうと,ちょっと寂しいかなという気も w あの,全体的に無理やり C で Lisp プログラミングやってるような感じが,マニアにはたまらないのです ww
なによりも,せっかく MIT AI ラボで夢破れた筋金入りの Lisper RMS が,あえて C を使って, 20 年もかけて怨念のように進めてきた苦労を全否定するのか!という(笑)
そもそも C++ コンパイラと,LISP コンパイラのどっちが多くの環境で実行可能で,よりポピュラーかと言えば,それは火を見るよりも明らかですしねぇ (仮にもし GCC の記述言語に LISP が採用されたならば,ポピュラリティが逆転し,もしかしたら RMS の積年の夢が叶うのかもしれませんが w). GCC のフロントエンドがサポートする言語に,LISP はありませんしね (GCC の構造的に,たぶん LISP のような言語の最適化にはあんまり向かない気がします.GCC で,比較的低水準な命令型言語以外のフロントエンドを作ろうとすると,仮にできたとしても,gcj みたいに,巨大なフロントエンドとランタイムが後からくっつく,不恰好でバランスが悪いものになると思います)
ちなみに、gcc は Cコンパイラの実装としてもかなり「終わって」いる。これはもとから内部の各モジュールが分離できないように わざとからみあって設計されている。つまり GPL な部分を分離して商用コードをくっつけられないようにしてあるらしい。だから構文解析や中間コード生成にフックを入れるのはものすごく大変だ。たしか RMS 自身がそのことをどっかで説明してたんだけど見つからない。
フックを入れること自体はそんなに難しくないですし,むしろ 4.x からはフロント-ミドル-バックエンドの分離が進んで簡単になってきてますけど,中間表現の完全な dump と read が不可能な構造になってるということを言いたいのでしょうね.
RMS が,バックエンドのフリーライドを防ぐため,あえてソースの直接改造が必要不可欠な構造にしてあるようです (GCC と独立して,中間表現のダンプと読み込みが可能になってしまうと,フロントエンド〜ミドルエンド部分だけを GPL フリーに作ってつなげることが可能になってしまう)
マイコミジャーナル 【レポート】 gcc 4.0来春登場 - 互換性・速度に課題も
4 gccのあの問題点は解決可能なのか?
また「完全な内部形式のTree Dumpを取りたい」という意見については、小島氏は「実はこれはRMSの方針で「完全なダンプは出さないようにすること」ということになっている」との事実を明らかにした。これは「完全なダンプを出力可能にすると、ProprietaryなBackend Pathを作られてしまう可能性がある」という理由からだと言うのだが、一方で開発者にとって完全なダンプが取れることが非常に魅力的であるという事情もあることから、事前に何らかの文書等を交わしたユーザに限り完全なダンプの出力機能を利用可能にするといったことができないか現在検討が行われている、と同氏は語った。
個人的には,誰が作ってようが,ライセンスが GPL でちゃんと全てソースが公開されてれば自由なソフトウェアだと思います.
現在 gcc を開発しているのはもはやボランティアグループなどではない。かれらは RedHat や Apple だ。こういう企業の仕事を「フリー (自由な)」ソフトウェアと呼ぶにはもう無理があるよ。
PCC (Portable C Compiler) に LLVM (Low Level Virtual Machine) に,修正 BSD ライセンスの C/C++ コンパイラが求められている背景があって,貴重なマンパワーが分散してしまってもったいない気もしますが.まぁ,これもまた FOSS って感じで良いんじゃないですかね.
マイコミジャーナル 【レポート】 GCCに匹敵するコンパイラ?! LLVM - BSDCan2008
# LLVM は,言わばコード生成と実行全体のフレームワークなので,コンパイラフレームワークの GCC と単純に比較できるようなものではないと思うので,この記事のタイトルは語弊があるなぁと思うわけですが… まぁ,それはまた別のお話.
