LLVMで動くオブジェクト指向言語を作ってレイトレした
2017-03-07
Tech先月のエントリでEsquisというプログラミング言語を作っていると書いたが、あれからいろいろ機能を足して、レイトレーシングのプログラムが動くようになった。
できたもの
https://github.com/yhara/esquis/releases/tag/v0.0.1
実行結果
(前エントリと全く同じ絵なのもアレなので、T=10にしてみた)
ソース
https://github.com/yhara/esquis/blob/v0.0.1/examples/ray.es
見てもらえばわかるけどほぼRubyで、ただし引数に型指定があって、コンパイル前に型がチェックされる。(それって最高じゃん?と思ったあなた、気が合いますね) 今日はついに、「引数の型の変更漏れを処理系が教えてくれる」という幸福な体験をした。
言語仕様はこれからいろいろ変わると思うので詳細は書かない。
経過
- 2016/10/16 LLVM LLにコンパイルされるC風言語を作っています
- 2016/11/23 LLVM + Boehm GC
- 2017/02/07 オブジェクト指向言語をLLVM IRにコンパイルするには
- 2017/02/21 printfだけで画像を生成する(.ppm)
- 2017/02/21 Rubyでレイトレーシングした
足したもの
- new, initialize
- インスタンス変数の初期化、インスタンスメソッドからの読み書き、getter、setter
- ローカル変数の定義、再代入 (いまのところvarで宣言した変数だけ再代入できる)
- 定数 (いまのところトップレベルのみ)
- %演算子 (LLVMのfremだと勘違いしていたが、Rubyの%を実現するには調整が必要だった)
- true, false, self
- ifを文から式に変更。returnを書かなくてもメソッドの最後の式が返り値になるよう変更。
など。やることが多かったけど、ゴール(動くべきプログラム)が明確だったので、少し動かしては足らないものを足して、という感じでやっていたらあっという間に機能が増えていった。毎日のように出来ることが増えていくのでとても楽しかった。
今後の予定
まだまだやることはたくさんある。文字列、配列、継承、ジェネリクスなど。
一方で今年は別のこともやる予定なので今月の残りはそっちの作業をする。その間に次の良い課題となるプログラムを考えよう。