OPA は「綺麗な OCaml」 なのか?
"OPA : my personal Holy Grail of OCaml ?"
ホットな内に書いて公開しようと思ったので全然推敲していない文章です。まあ興奮度が伝わればいいかなと思って。
OCaml も好いんですけど、やっぱり「ジャイアン」なんです。「綺麗なジャイアン」が欲しいと思うこともある。
- 関数型
- 強い型付け
- polymorphic record と variant を入れて non poly record と variant は何とか吸収する
- object は要りません
- OCaml っぽいけど、歴史の垢と決別した文法
- eager
- 大方 pure。でも printf デバッグだけはやらせて
- 実行時型とか。 overload はあってもなくてもいいけど
- 正規表現とか
- やっぱ時代は並列
- 遅くてもいい。とりあえずスクリプトっぽく使えたら、それでいい。
- モジュールももうちょっと文法を簡単にして、型推論はいいから、できたら polymorphic record と上手く結婚してほしい、なー。
一息で言うと、
コンカレントディストリビュータブルモーストリーピュアーストラクチュラリィポリモルフィクファンクショナルラングエイジアラオーキャムルウィズアウトイッツスメリーパーツ!!相手は死ぬ。
(concurrent distributable mostly pure structuraly polymorphic functional language a la OCaml without its smelly parts!! Aiteha shinu.)
でも「綺麗なジャイアン」はアーサー王伝説の聖杯の様な物で、イデア界にのみ存在している感じ。そんじょそこらには落ちていません。おじさんはパーシヴァルみたいに魔法使いじゃないし。だからホントに偽聖杯を作ろうかなあと思っていたの。
ら、何かありました。
MLState の OPA です。ウェブアプリ作成向け関数型言語、のようです。
ごくごくカンタンに http://mlstate.com/wiki/admin/opa_documentation の The OPA Manual (p18 あたりから読めば大体わかる)を読んで、配布しているコンパイラで遊んでみました。これは、、、なかなかツボを抑えている言語です:
ちょっと読んで判った特徴
- 関数型
- 強い型付け
- polymorphic record と variant。当然 row variable と subtyping
- OCaml っぽいけど、より簡便な文法
- インデントルール (書いていてつい TAB を押してしまいそうで不安になる)
- match が end かデフォルトケース | _ -> で明示的に終わるので、begin が要らない。
- let はないけど rec はある。なんかちょっと不思議
- ラムダは x -> e。 unit -> t の場合は -> e 。
- 複数引数関数とその部分適用の文法。f(a,b,c) = ... でカリー化された関数定義。部分適用は f(_,b,_) と書く
- ほとんど pure っぽい。たとえば配列も pure。
- ちなみに OCaml コードを中間コードとして生成しています。久々に機械生成の OCaml コードを見た、、、
よくわかんないところ
- toplevel がないから気軽に試せなかった
- .mli みたいな物をダンプできるらしいがダンプできなかった
- ウェブサーバとしてビルドする以外の方法がちょっとわからなかった。言語仕様的にはスタンドアロンでもうれしい
- eager なのか?副作用がないからわかんない
- モジュールとかファンクターとかあるのか?
- 並列できるらしいんだけど、そこまで読んでない。Well typed Erlang ?
これから期待なところ
- コンパイルが超絶に遅い。それともリンクが遅いのかな?
- みんなの知りたい polymorphism の所に限ってまだドキュメントがない。
何か私が欲しいと思うことは大体入っちゃってる。これはすごい。今から何か私が作ってもこれそっくりになっちゃうかもって言語。これからどうなるのか楽しみです。ちなみに MLState はインターン募集中だそうです。パリ。多分大体フランス語。
新しい言語を作ってお金儲けできる(できてるのかどうか知らんが)っていいなあ。