FSharpに移植してみました

池袋バイナリ勉強会に行ってるので、FSharpで書いてみました。
作業時間が1週間くらいで、移植できました。
バイナリはosxのxamarin studioで作成しました。
すぐ動くかどうかは謎ですけど、LLVMが動いて、.netframeworkが動けば動くんじゃないかと思います。

https://github.com/hsk/fstype7

LLVM使ってるとバックエンドの負担がずっと減るので、x86_64のコンパイラに比べて半分くらいの作業量で済みました。

あいかわらず、コンパイラのバグは無くなってませんが、用意してあるテストを通すだけでもけっこう大変なのでした。

fsharpはHaskellOCamlの中間くらいの言語で、オブジェクト指向がそこそこ使えたり、|>があったりするのがいいのかなぁと。コンピュテーション式はモナド圏論がどうのとか言う事は無くてDSLを作る為の構文としてクラスを拡張する事で、色々出来るらしいですが、抽象度が上がるので難しくなりそうで使ってませんが、使うと面白そうです。

後方参照が出来ないので、ソースの位置を色々ずらすのが大変でしたが、型チェックが厳しいし、null使えないしで、原因不明のエラーで悩む事はほぼ無く、移植出来ました。

テストは元々Scala上に書いていた物を、テキストファイルのソースコードに落として、コメントに名前と結果を書いて読み込むようにしたので、テストの移植コストが凄く下がりました。

テスティングフレームワークも使えば良いのでしょうけど、インストールで悩む時間がもったいないので、テストは自作でやってます。テストコードと予想結果と名前があって、比較してOKかどうかチェックするのが基本で、それさえ出来れば移植のときは十分なんですよね。

テストケースは260くらいなので、まだまだ、全然足りないと思いますけど、全然ない状態に比べれば、ずっといい物が出来るので、もっとテストケースを増やして行ければいいのだろうなぁと思います。