このプロジェクトは、mincamlのLLVMバインディングを段階を追って作成するチュートリアルです。
良くあるプログラミング言語の作り方のように、ゼロからコンパイラを構築します。 MinCamlは約2000行でコンパイル可能な小さなコンパイラです。 このチュートリアルで少しずつ作成すれば、よりMinCamlの理解が進むでしょう。
strollmincamlは大ざっぱなMinCamlの構造を把握する事を目的としているため 今の所、最適化パスを含んでいません。また、ファイル読み込みにもまだ対応していません。 その他バグいくつかのバグが存在しています。これらの問題は今後解決する予定です。
strollmincamlは、文字列でLLVMのIR(LLVMのアセンブラ)ファイルを出力します。 そのため、ライブラリをインストールする必要はありません。 LLVM IRさえ分かれば、確認も*.llファイルを直接見て行えます。 ファイルを使うためコンパイルの性能はパースする処理やプロセスの起動が入る分遅くなりますが、インストール作業が楽なためこのような方法を取っています。 この手法であれば、ScalaでもF#でもPerlでもファイルを吐き出す事が出来ればコンパイルする事が出来るでしょう。 出力したllファイルは、llcコマンドでアセンブラに変換し、gccでコンパイルして、実行します。 コンパイル後直ぐ実行するので、トライアンドエラーを素早く行えます。
LLVMをバックエンドとして使い、OCamlでプログラミングします。 ビルドシステムはOMakeを使用します。
LLVM,OCaml,OMakeが必要ですのでgoogleで検索するなどしてインストールしてください。 開発はx86_64のOSX上で行っており、それ以外の環境では確認していません。
- LLVM IRとllc
- 1. 足し算と引き算
- 2. k正規化
- 3. パーサ
- 4. 型推論
- 5. 関数
- 6. ファイルの分割
- 7. クロージャ
- 8. BoolとIf
- 9. 配列
- 10. 多値
- 11. Float
- 12. 末尾再帰最適化
- 13. C言語風の構文
- 14. C言語風の構文でポインタ
- 15. C言語風の構文で書き換え可能な変数
- 16. 多相型型推論
- 17. ガーベジコレクションのシンプルな例
- 18. ガーベジコレクションを組み込もうとしている所①
- 19. ガーベジコレクションを組み込もうとしている所②
ライセンスはオリジナルのライセンスに沿ったライセンスになります。 詳しくはLICENCEファイルを参照してください。
http://esumii.github.io/min-caml/ (オリジナルのmin-camlのWebページ)
https://github.com/nojb/llvm-min-caml (LLVMライブラリを使った実装 GC装備+小さなemitter)
https://github.com/mzp/min-caml (LLVMライブラリの実装)
https://github.com/kmacy/llmincaml
http://llvm.org/docs/LangRef.html (LLVMのリファレンス)