yhara.jp

Recent Posts
Edit

LLVM LLにコンパイルされるC風言語を作っています

2016-10-16
Tech

LLVMを利用した言語実装の練習として、C風文法の言語を作っています。kaleidoscopeのマンデルブローのサンプルが動くところまでを目標にしています。

実装はRuby + Raccです。.llの出力はruby-llvm gemを使おうかと思いましたが、更新が止まっているようなので、とりあえず文字列処理で頑張っています。

https://github.com/yhara/kareido

kaleidoscopeはLLVMオフィシャルの言語実装チュートリアルで(日本語訳)、Kareidoとは以下のような違いがあります。

要するにサンプルなのだからできるだけ凝ったことをせず、普通にしようということです。

.llを文字列で出力することの是非

いまのところkareidoは.ll (LLVMの中間コードファイル) を文字列として出力し、実行はそれをlliコマンドなりに食わせるという形になっています。このためLLVMのバインディングがない言語にも、Kareidoを移植することは比較的容易だと思います。

一方でLLVMのIRBuilder APIを使わないことによるデメリットがどのようなものかはまだ分かっていません。最悪実装が頓挫するパターンまであると思っていますが、まあそのときはそのときで…。


More posts