[F#] MinCamlを移植してみる

コンパイラを実際に作ってみて実装に大分詳しくなってきました。暗黙的な型変換が含んでいることもあって、MinCamlよりもずっと行数が多くなっています。今なら難しいと思っていたMinCamlが簡単に思えるかもしれません。出来れば、より良い型推論を含んだ型チェックをしたいですし、簡潔で正確に型チェックが出来るならそのほうがよいです。

そこで、F#にMinCamlを移植してみています。

OCamlからF#への移植

F#はほとんどOCamlなので、移植は非常に楽です。OCamlHaskellシンタックスなのがF#なので、ライブラリの仕様が違う所を修正して、;やinを消してネストを合わせるだけで動きます。

Scala等の言語に移植するより遥かに早いスピードで移植できます。

ああ、これは良い物だなぁと思いました。

OCamlのlet in let inって書いたりmatch構文のネスト時にかっこを付けたりする所も汚いなぁと思っていた所なのですが、その辺が奇麗に書けるのもまた嬉しい点です。

MinCamlの移植

MinCamlの移植は、最適化処理を無い状態でも動くのかなぁ?ってのが気になっていたので最適化処理は無い状態で移植してみて、パーサはfslexとかのインストールが面倒いので、typingからx86対応バージョンのemitまでの最適化処理以外を移植しました。

1、2日でとりあえず動いてしまいました。

元々、移植するつもりはなくて、どっちかというと、型推論周りを見直したくて部分的な移植のつもりが、ついでに動く所までやれそうだから、やったら出来てしまったという感じでした。

今後

パーサはfslexとfsyaccをインストールして移植作業をすれば出来ると思うので、パーサを作ると良いでしょう。

また、ゼロからMinCamlを作れるようになりたいと思います。大体のうる覚え状態で、MinCamlをみないで、作ってみる事で、自分なりに関数名はこうしたほうが分かりやすいとか思う所も見つかるかもしれませんし、なんで、この処理が必要なのかということも分かるのではないかと思うのです。

また、LLVMへの出力も移植してみたいです。