COINS

[COINS] http://www.coins-project.org/

これは凄いかも。まだ、詳しい仕様なんかは見てないけど、要は高級言語アーキテクチャに依存しない中間言語の開発だ。解説とかを読んでてドキドキしてくる。詳しくはリンク先の『Coinsコンパイラの流れ』をじっと見てもらえば分かると思うけど、簡単に解説してみる。

コンパイラのおおまかな処理の流れは次のような感じになる。

入力言語
↓ <字句解析・構文解析中間言語
↓ <最適化>
目的言語

例えば、C系のコンパイラだと構文解析を経て解析木を作り、最適化した後でマシン語アセンブラを出力するわけだ。この流れの中でCoinsが担当するのは中間言語の部分で、次のようになる。

入力言語
↓ <字句解析・構文解析
                                          • +
高水準共通中間表現
↓ <最適化> Coins部分
低水準共通中間表現
                                          • +
↓ 目的言語

あらかじめ言っておくが、この図はもの凄い簡略図だ。リンク先のドキュメントを読めば分かるけど、高水準・低水準共通中間表現からCコードを生成したり、最適化が高度だったり、低水準共通表現から有名なアーキテクチャへのコードは作成済みだったりと、かなりの完成度(に見える)。

だから、新言語をX86用に作りたいのであれば、やるべき事は『新言語 → 高水準共通言語』へのパーサを作るだけ。もちろん言語特有の最適化は必要だけど、本当に大部分はCoinsがやってくれるみたい。しかもこのパーサが出来れば、コンパイルするだけじゃなくてCへ変換したりもできるし、X86用のつもりが有名アーキテクチャすべてに自動的に対応する。

やばい、なんか興奮して書きすぎた。書きすぎついでに驚愕の事実を紹介。このCoinsの大部分(17万行)はJavaで出来てる。