[Scala][LLVM] 言語の実装いろいろを公開しました
mac osx 用のx86_64のコンパイラのScala実装
https://bitbucket.org/h_sakurai/x86_64_typed_compiler/wiki/Home
mac osx 用のx86_64のコンパイラのD言語実装 バグあり未完成
https://bitbucket.org/h_sakurai/dtype/
https://bitbucket.org/h_sakurai/test-compiler
https://bitbucket.org/h_sakurai/lllong
lllongが最新でopenglで遊べるゲームを作れるレベルには出来ていて、過去を振り返っても一番気合いを入れて作った処理系です。1ソースのコンパイラとしてC言語レベルのプログラムを作るのに十分な機能が実装は実装出来ていると思います。
全体的に、Pコードマシンのコンパイラになってます。
OCamlやSMLで作るような関数型のプログラミングの手法で作成しているので、構成はわかりやすいと思います。
関数名から意味が読み取れないって問題はあるでしょうけど。
LLVMへの対応も、スタックマシンのスタックをコンパイラ上で無限レジスタマシンのレジスタに変換する事で対応しています。要するにlllongはスタックマシンへのコンパイラの知識があれば、ちょっと頑張ればLLVMのコンパイラが作れるのだなと言う事が分かるかと思います。
どこかのタイミングで発表したらそのとき公開しようとか思っていたのですが、発表する機会を失ってしまっていました。
64bitのCPUならしばらく安心だろうと思っていたのですが、armとかもあるわけで、LLVM等用のコンパイラとして作った方が安心だなと思います。
スタックマシンとしてコンパイラ作るよりも、レジスタマシン用のコンパイラとして開発した方が良いとも思うので、あんまり気合いをいれても仕方ないなと思い始め今に至ります。
というもの達なので、スタックマシンコンパイラは作った事があるけど、ネイティブコンパイラはちょっと、、、って言う人とか、関数型言語は分からないけど、Scalaならなんとか分かるって言う人は見ると面白いんじゃないかと思います。