kumaryu日記
2009-01-27 肩凝った
_ Rubyで遊ぶ
COLLADA書き出しの方が一段落ついたのでMacRubyとIronRubyで遊んでみた。
MacRubyは1.9ベースだが、それはともかく常用するrubyも1.9系に乗り換えないとまずいな。
_ [Ruby] MacRubyで遊ぶ
MacRubyの方は何も悩むところなく使えてしまった。
基本的にはRubyCocoaと同じ。ib_outletsとかやらずともattrでおっけーなのが素敵。
ただちょっと困ったのが新しく作ったクラスがなぜかInterfaceBuilderから認識されなかったこと。まあこれはそのうち直んだろ。
あとはsuper_なんたらとかやらなくても、普通にsuperで派生元クラスのメンバが呼べる。
全体的にRubyCocoaの特殊だけどドキュメントが無くて困る所が普通にRubyだから困らない的な事になっていた。
frameworkもOpenGL.frameworkとかふっつーに読み込んでなにごともなく描画できたしな。
あまりにも普通過ぎて幸せだ。
あ、あとコードで簡単にCocoaのウィンドウとか出せるHotCocoaと言うライブラリがあるんだが、サンプル見て全くいじる気にすらならなかった。
こんなきたねーコード書く時間があればInterfaceBuilderでリソース作った方が早くね?完全にデモ用かな。
とにかくGUIはリソースにしろっての。退化すんな。
_ [Ruby] IronRubyで遊ぶ
IronRubyのほうはMacでmono経由で起動してみたが上手く動かなかった。irb風味の対話環境は起動するんだが、なんか入力してもよくわからない例外が出て実行できず。Silverlight上ではうごくんだけどね。
そこはおとなしくWindowsで実行することにした。
Windows上で動かしたらさすがにちゃんと動いた。とりあえずWindows.Formsのサンプルをコピペして動かしてみたが、なんの問題もなく動いた。
しかし起動がめっちゃ重いんだが、普通に起動というかアセンブリのロードなど重いだけなのかコンパイルが非常に重かったりするのか。ロードが重いだけなら使ってるうち速くなりそうだけど。
requireで.NETのアセンブリを読み込めるんだが、アセンブリ名にpublickeytokenとやらまで書くながーい名前を指定しなきゃいけないのは面倒だな。
まあ.NET Refrector辺りで探してコピペすればいいので言う程面倒では無いが。
サンプルだとSystem::Windows::Forms::Formとかクラス名をフルで書いてたけど、System::Windows::Formsをincludeすることはできたのでこれは別に面倒もない。
で、調子に乗ってManagedDirectXでもいじってみるかとやってはまった。
enumのメンバを指定するのはenum名.メンバ名でいいらしい。
特定の型の配列を作る方法が分からなかったんだがArray.of(型).new(10)とか言う形っぽい?
最後にネストしたクラス、つまりクラスの中で定義されてるが取得できずに詰んだ。これはまだ対応してないのかな?
それにしてもIronRubyは全くという程ドキュメントもサンプルも見つからん。
公式のドキュメントは触りだけ。あとSpecificationという名のTODOリストっぽい物があるだけ。
検索してみてもみんなちょこっと試して動いたよ!程度の記事はたくさん見つかるんだが、ちゃんと使ってるっぽいのは探せなかった。
以前JScriptでManagedDirectXいじったときにも思ったが、.NETと動的言語は超相性悪いので、そこを埋めるのにノウハウが重要になりそう。
暇な時ならソースと.NETのリファレンス眺めて回りくどい無茶をやらかす事も考えるんだが、残念ながら今はそれほどの余裕がない。
IronRubyで遊ぶのはまだ難しそうだな。