HaXe触ってみた

適当に書いた奴をGithubにあげておいた。
mizchi/haxe-try https://github.com/mizchi/haxe-try

enchant.jsもHaXeから触ってみた。nodeとenchant.js、enchantの型アノテーション
haXeでenchant.jsする利点 - mitamex4uの日記 http://d.hatena.ne.jp/mitamex4u/20111230/1325248577
を使わせていただきました。

とりあえずクイックソート

配列操作系のユーティリティはあんまりなさそう。
undescore.jsクローンのUndescore.hxってのはあった。が、名前空間がほんとにUnderscore.mapとかで冗長な気が…

HaXeを使う指針

何よりも気に入ったのが型がオプショナルであるという点。Dynamic型にすればそれ以下のプロパティに対して型チェックを行わない。
JSから触る場合、元が型がない言語なので、絶対な型安全はありえない以上ある程度ラップして妥協することになる。

と同時に、それ以外のロジックはHaXeのピュアなロジックで吸収する。型安全な世界は絶対に崩れないように書くことで堅牢なコードにすることが可能。
外部に依存しないようなコードは、他の言語にもコンパイルが可能なのでコードの再利用性は高い。(つってもやっぱ独特なコードなんだが…

HaskellがIOモナドで純粋でないものを切り離すように、安全な部分と危険でない部分を分離する方向で、JSをラップして、できるだけ純粋なHaXeのロジックで、という指針がよさそう。

実際にコーディングする際、ライブラリのコードを触る部分より、自分で書いたほうが多くなるとは思うので、必要な物だけtypedefなりして型アノテーションをつけるといい。補完がきくようになるし。

HaXeの駄目な点

Coffee書き慣れた身からすると記述はやっぱり冗長。高階関数のためにLambdaはなにかしらの略記がほしい。
Function型がない?。コールバックの記述に不安が残る。サンプルコード見てもDynamic型を渡していた。Int -> Void みたいな書き方はできるみたいだが。
コンパイルされたコードはやっぱり読みづらい。

HaXeとSublimeText2

補完はそこそこ効く。そもそもIDEあんまりすきじゃないのでこれぐらいで十分。
InteliJとMonoDevelop版もあるらしいので、本格的なのはそっちに期待しておく。

ベンチマークとってみた

cppとjavaとjsで吐いてみた。UnityのためにC#も吐いてみたかったが、MacなのでMono環境の整え方あんま知らず断念。
mizchi/haxe-benchmark https://github.com/mizchi/haxe-benchmark

Nodeが一番早くなったが、たぶん書き方悪い。どっちかっていうbuild.hxmlの書き方のサンプルになる程度だと思う。


さて、原稿書かねば…