AnteでAObenchを書いた
Ante という新しいプログラミング言語(とその処理系)があります。
面白そうなので勉強がてらAObenchを移植してみました:
GitHub - eldesh/aobench_ante: A microbench for floating point calculation in Ante programming language
言語仕様
簡単に特徴を述べると以下のような感じです:
肝心の機能が全部未実装なんですが…。
(そもそもこれらの機能は全部共存出来るんでしょうか?(疑))
速度比較
aobench-ante の実行結果です。
compiler | time |
---|---|
ante | 0m7.487s |
ante(-O3) | 0m2.431s |
gcc | 0m0.658s |
polyml | 0m4.589s |
mlton | 0m1.536s |
Poly/MLの2倍時間が掛かっていますのでまだかなり遅いですね。
// 追記ここから
-O3
フラグを付けてビルドしたところPoly/MLの1/2倍、GCCの3.5倍の実行時間になりました。
anteの筆者によるともう少しGCCに近い速度が出るはずとのこと。
これが本当ならネイティブコンパイルされる言語としては他の関数型言語に近くなりそうですね。
// 追記終わり
言語自体は低レイヤ指向を標榜しているのでもう少し頑張って欲しいところです。
所感
今回のコードを書くにあたって何度もコンパイラのバグに行き当たりました。(3つほど報告、うち2つは修正済み)
まだかなり基本的な箇所にバグがあり、まともな使用には耐えません。
例えば aobench-ante では画サイズ(256x256)を変数にしていますが、それを使わず決め打ちにしている箇所が複数あります(e.g. aobench_ante/aobench.an at 419d63cfa428595ff35bf53cdeb89fbe388ec923 · eldesh/aobench_ante · GitHub)が、これは型エラーを避けるためです。恐らくトップレベルの変数の型を解決する箇所にバグがあります。
今はまだこんな感じですが篩型やalgebraic effectはロマンがあるので頑張って欲しいところですね。