今週からあまり頑張りすぎないようにしてるんだが働いてる時間を平均するとそんなにかわってないかも……。まあ疲れすぎなければなんでもいいんだが。
最近更新の激しい1irpackですが0.2.5を出しました。
変更点は
の二点。
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)--show-clr-exceptions(後述)の方が詳しく出る。--no-adaptive-compilation (ir.exeでは-X:NoAdaptiveCompilation)--compilation-threshold THRESHOLD (ir.exeでは-X:CompilationThreshold)--no-adaptive-compilationと同じ。コンパイルしない指定は無いけどとてもでかい値を指定しておけばOK。--pass-exceptions (ir.exeでは-X:PassExceptions)-Dもつけとくと落ちたところでデバッガのアタッチができるようだ。--private-binding (ir.exeでは-X:PrivateBinding)--show-clr-exceptions (ir.exeでは-X:ShowClrExceptions)--exception-detailとの違いがわかりづらいが、--exception-detailはRuby形式でRubyレベルのバックトレースが詳しく出る。両方指定すると両方出るので安心だが少々うっとうしい。オプション解説終了。
そういや-Kとかは作ってないんだった。IronRuby 1.1.3とは文字コード関係の動作が変わってるので注意な。1.1.3では-Kもなんとなく生き残ってたり、localeエンコーディングがコンソールのエンコーディング(日本語設定ではコードページ932)になったりしてるんでirpackもそうしてやろうかと思ったが、どうも最新のソースではそんなことをやっていなくてlocaleがUTF-8に初期化されてるだけなのでそれに合わせるようにした。どっちがいいのかよくわからんけど、なんでIronRubyではデフォルトエンコーディング指定をやらなくなったんだろう。今度確認しておこう。
今後の予定。なんだかirpackづいてるのでしばらく機能強化続けそう。
当社比 ↩