今年ももう一週間で終わりとかどういうことなの。
突発でイベントやってみたけどちょっと手抜きすぎて反省。 手抜きといってもいつも通りだったんだけど、せっかく突発なんでいつも通りじゃなくて何か特別なことやればよかったね。 また今度機会があれば考えたい。
PeerCastStationを1.0にして配布したんだけど、実は些細な不具合があるのとドキュメント整備したいのでまだサイトの方には上げない。29日までに出せればいいや。
かねてから触ってみたいと思いつつ機会を見つけられずにいたF#をいじってみた。
特に何を作る決めていたわけでもなかったが、チュートリアルプロジェクトテンプレートがあったのでそれを眺めてなんとなく文法を把握。ライフゲーム作ろうと言われたので作ってみることに。
最初こそ勝手がわからなくて苦労してみたが、完成するころには楽しくなっていた。F#いいなこれ。
関数型言語はHaskellをちょっと本読んでよくわからなくて詰んだ覚えがある1ので身構えてたところがあるんだが、F#は構えることもなかった。 普通にRubyとかと似たように書こうとすれば書けるし。っていうかRubyとあんまり変わらなくね。 いやもちろんなるべくF#っぽい書き方してますけど。
VisualStudioで標準サポートの.NET言語ということでもっとC#的なのを想像してたんだけどちょっと違った。スクリプト言語っぽい。スクリプト言語の定義とか知らんので何がスクリプト言語っぽいのかと言われるととても困るが、クラス定義とか関数定義とかしなくてもトップレベルにベタ書きできる感じとか?
クラス定義もJavaScriptっぽい。JavaScriptの関数の中にメンバ定義の実行コードを書いて……な感じに似てる。雰囲気が似てるだけで実際実行してるわけではないんだが、コンストラクタ関数の中にローカルなletいっぱい書いといてmemberで公開するのが、JavaScriptでコンストラクタの中でローカル変数にいろいろつっこんでプロパティに必要な関数をつっこんで公開するようなのと似てる。まあJavaScriptも関数が一級なので関数型と言えなくもなく似ててもおかしくないのかもしれない。 クラスのメンバがデフォルトでpublicなところもスクリプトっぽい。いいね。
インデントで構造を表すのはPythonっぽい? でもどこで改行していいのか、どこに合わせればいいのかよくわからん。 インデントくらい好きにさせてほしい2。
F#はJScript.NETを彷彿とさせるな。JScript.NETが真面目にVisualStudioでサポートされてたらこんな感じだったんじゃないだろうか。
他の言語と同じっぽい感じとひたすら言ってるけど、一方なるべく標準でimmutableになるようになってるのが面白い。 普通に書けるんだけど普通に書いていくと自然にimmutableになってる的な。 これはC#ともJavaScriptともRubyとも違う。これは書いてて気持ちいい。
ちょっと不安なのはF#内じゃない.NETのクラスを使おうとした時に型変換とかがめんどいって話を聞いた。 でもライフゲームをOpenTKで描画してみた限りではそんなに困ったところはなかったかなぁ。 .NETのメソッド呼び出しは多少F#の関数と違いがあるけど、理解すればそんなに気にならなかったし、そう問題になることもないと思う。
不満点もいくらかあるかな。
別にランタイムが必要なところはちょっとひっかかる。.NET4入れただけじゃ足りない。でもこれは必要なFSharp.Coreとかその辺のアセンブリをコピって隣に置いておけば大丈夫そうな気もする。
コンパイルした後、実際どういうコードになって実行されるのかよくわからんのが気になる。 逆アセンブルしてみりゃいいのかもしんないけど。 あんまり気にしなくてもいいんだけど、結構どうとでも書けるというかいろんな書き方ができる言語なんで、どれが効率いい書き方なのかよくわからんのがちょっとね。 不満点っつーわけでもなくて、これから勉強していけばいいだけか。
まあでもだいぶ感触はよかったのでこれから積極的にいじっていきたい。 とりあえずゲーム作るのにIronRuby+F#を使っていってみたいところ。