トップ 最新

kumaryu日記

2011-07-15

_ [Ruby] irpack 0.2.1

irpack 0.2.0…じゃなかった0.2.1ができたよー!

インスコはRubyGem.orgから、ソース等はgithubからどうぞ。使い方もgithubのREADMEにあるんで*1まあまずはそれを見ろ。

あ、irpackはIronRubyのスクリプトをexeにぶちこむアプリです。IronRuby版exerbと言えばよろしいか。exeにしちゃえばIronRubyを入れてない環境でも.NET Frameworkかmonoがあれば動きます。1バイナリでマルチプラットフォーム対応だやったね!もちろん元のスクリプトがmonoでも動けばだけどな。

0.1.0からの変更点はIronRubyの1.1.3以降で動きます。まあたぶん1.1.2でも動くけども。あとファイル埋め込み方法が変わってます。さらにろくにテストしていません…ってこれは前からだった。

まあ基本的に大事なのは、現状のIronRubyで動きますってところですかね。0.1.0は最近のIronRubyで動かなくなっちゃってたんで。しかし現状のIronRubyバイナリが.NET4用なんで.NET3.5で動くか試してないのですよ。あとmonoではIronRubyがバグりまくってて動かないんですよ。たぶん生成したexe自体は動くんだろうけどOptionParserが動かねーのでrakeでテストも実行できないという。そしてOptionParserが動かねーということはたぶんirpackコマンドも動かねーんじゃないかと。困りましたね。

monoはともかく99%以上の人が使うであろうWindows(+.NET4)ではたぶん動くのでご安心ください。動かないかもしれないので俺がちゃんと使ってみてバグ取るまで様子見てもいいかもね。0.2.0を上げた瞬間動かないのみつけて0.2.1にしたくらいだもんね。

*1  日本語も下の方にあるんで

_ [Ruby] monoでIronRubyがおかしい

monoでIronRubyを動かすとOptionParserがちゃんと動いてくれない問題ですけど。OptionParse自体はもちろんWindowsでもmonoでも同じなんだけどなんか正規表現の動きがおかしい。

md = /^--([^\[\]\s]*)(.*)?/.match('--describe')
p md[1]
p md[2]

これが何になるのかって話ですよ。.NET4で動かすとmd[1]が"describe"になってmd[2]はnil。手前の*が最長マッチなのでこれが普通ですね。

mono 2.10.0で動かすとmd[1]が"d"、md[2]が"escribe"。ぎゃー!正規表現の動作に違いがあるなんて聞いてないよ!

しかしまあ普通の正規表現でそんなに違いがあるわけもなくCLRのRegexクラスを使うとどっちも最初のグループに"describe"が入ってくれるんですね。どうもRubyの正規表現をCLRの正規表現に変換してるRegexTransformerクラスがおかしいっぽい。

というところまで気付いて諦めた。また今度調べるわ。しかしこのクラス変更入ったの半年前なんだけど…。やっぱり誰もIronRuby使ってないのかな。それとも変な環境依存なバグなんだろうか…。