くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | ]

2011-11-10

日記

今週からあまり頑張りすぎないようにしてるんだが働いてる時間を平均するとそんなにかわってないかも……。まあ疲れすぎなければなんでもいいんだが。

[Ruby] irpack 0.2.5

最近更新の激しい1irpackですが0.2.5を出しました

変更点は

  • 埋め込み忘れてたMicrosoft.Scripting.Metadata.dllをちゃんと埋め込むようにした
  • 実行時オプションを渡せるようにした

の二点。

Microsoft.Scripting.Metadata.dllはこれが嫌らしいことに埋め込まなくても動いたりするんで気付かずにいた。結局何のアセンブリなんだかよくわかってないんだが、CLRのクラスといろいろ連携するのに必要なのかな?という気がする。

実行時オプションは主に-Iとか-rを指定できるやつ。exe作る時に-Iとか-rを指定しておくとexe起動時にそいつらを指定してくれます。-Iに相対パスを渡すとカレントディレクトリでなくてexeが置いてあるディレクトリを起点にするので注意な。注意ってかカレントディレクトリでも困るだろうけど。

他の実行時オプションもir.exeに渡せるのとなるべく同じにしたんでそんなにわからんものはないと思う。 -trace-profile--trace--profileになってたりするがこれはOptionParserでハイフン一つのオプションを指定すると必ず一文字の短いオプションだとされてしまうので仕方なくハイフン二つの長いオプション化。同様に-X:~のオプションも長いオプション化した。

ir.exeと同じといってもir.exeのオプションからしてよくわからないのが多いので解説するか。

--trace (ir.exeでは-trace)
Kernel.#set_trace_funcはパフォーマンスの問題か何かで標準で使えなくなってるが、こいつを指定すると使えるようになる。
--profile (ir.exeでは-profile)
IronRuby::Clr.profileメソッドが使えるようになる。pi = IronRuby::Clr.profile { block_to_profile }のように使うらしい。戻り値はメソッドとその実行時間のHash?詳しくはよくわからない。
--exception-detail (ir.exeでは-X:ExceptionDetail)
例外メッセージをコンソールに出力する際にRubyレベルでなくCLRレベルのバックトレースまで出す。ただしCLRレベルのバックトレースは--show-clr-exceptions(後述)の方が詳しく出る。
--no-adaptive-compilation (ir.exeでは-X:NoAdaptiveCompilation)
IronRubyでは(DLRでは?)普通はインタプリタ動作をして、ある部分が一定以上実行されたらJITコンパイルするが、このオプションを指定すると常にコンパイルするようになる。
--compilation-threshold THRESHOLD (ir.exeでは-X:CompilationThreshold)
一定以上実行されたらコンパイル、の一定以上の部分をTHRESHOLDとして指定する。既定値は32。0を指定すると--no-adaptive-compilationと同じ。コンパイルしない指定は無いけどとてもでかい値を指定しておけばOK。
--pass-exceptions (ir.exeでは-X:PassExceptions)
標準ではスクリプト内で例外処理されなかったらメッセージ表示をして終了するけど、それすらしない。つまりVMレベルで落ちる。何に使うのかよくわからん……と思ったが-Dもつけとくと落ちたところでデバッガのアタッチができるようだ。
--private-binding (ir.exeでは-X:PrivateBinding)
CLRクラスのprivateメンバやprotectedメンバを外から呼び放題にする。
--show-clr-exceptions (ir.exeでは-X:ShowClrExceptions)
例外が全く処理されなかった場合、CLR形式でバックトレースメッセージを出す。--exception-detailとの違いがわかりづらいが、--exception-detailはRuby形式でRubyレベルのバックトレースが詳しく出る。両方指定すると両方出るので安心だが少々うっとうしい。

オプション解説終了。

そういや-Kとかは作ってないんだった。IronRuby 1.1.3とは文字コード関係の動作が変わってるので注意な。1.1.3では-Kもなんとなく生き残ってたり、localeエンコーディングがコンソールのエンコーディング(日本語設定ではコードページ932)になったりしてるんでirpackもそうしてやろうかと思ったが、どうも最新のソースではそんなことをやっていなくてlocaleがUTF-8に初期化されてるだけなのでそれに合わせるようにした。どっちがいいのかよくわからんけど、なんでIronRubyではデフォルトエンコーディング指定をやらなくなったんだろう。今度確認しておこう。

今後の予定。なんだかirpackづいてるのでしばらく機能強化続けそう。

  • Rakeタスク。今作ってる。凝ったこと考えなければ大変ではないだろうと思う。
  • ウィンドウアプリ作った時に例外がアプリで捕捉されなかった場合はメッセージをコンソールに出せないので、エントリポイント側で例外ダイアログ出してあげるようにしたい。Exerbのguiランタイムみたいな機能。とても便利なんで。ウィンドウ表示はやはりWindows.Formsしかないだろうな。
  • gem埋め込み対応。そんなに難しくはなさそうな気がしてるんだがどうだかな。
  1. 当社比 


ページのトップへ | トップ «前の日記(2011-11-07) 最新 次の日記(2011-11-15)» | 編集 | kumaryu.net by kumaryu