COINS
[COINS] http://www.coins-project.org/
これは凄いかも。まだ、詳しい仕様なんかは見てないけど、要は高級言語とアーキテクチャに依存しない中間言語の開発だ。解説とかを読んでてドキドキしてくる。詳しくはリンク先の『Coinsコンパイラの流れ』をじっと見てもらえば分かると思うけど、簡単に解説してみる。
コンパイラのおおまかな処理の流れは次のような感じになる。
入力言語 ↓ <字句解析・構文解析> 中間言語 ↓ <最適化> 目的言語
例えば、C系のコンパイラだと構文解析を経て解析木を作り、最適化した後でマシン語やアセンブラを出力するわけだ。この流れの中でCoinsが担当するのは中間言語の部分で、次のようになる。
入力言語 ↓ <字句解析・構文解析>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
高水準共通中間表現 | |
↓ <最適化> | Coins部分 |
低水準共通中間表現 |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
あらかじめ言っておくが、この図はもの凄い簡略図だ。リンク先のドキュメントを読めば分かるけど、高水準・低水準共通中間表現からCコードを生成したり、最適化が高度だったり、低水準共通表現から有名なアーキテクチャへのコードは作成済みだったりと、かなりの完成度(に見える)。
だから、新言語をX86用に作りたいのであれば、やるべき事は『新言語 → 高水準共通言語』へのパーサを作るだけ。もちろん言語特有の最適化は必要だけど、本当に大部分はCoinsがやってくれるみたい。しかもこのパーサが出来れば、コンパイルするだけじゃなくてCへ変換したりもできるし、X86用のつもりが有名アーキテクチャすべてに自動的に対応する。
やばい、なんか興奮して書きすぎた。書きすぎついでに驚愕の事実を紹介。このCoinsの大部分(17万行)はJavaで出来てる。