Ruby 逆引きレシピ レシピ217-232

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)

Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)

今日はレシピ 217 から 232 までを読みました。

第14章、さらに先へ、という題名で 1.9 のトピックとメーリングリストなどの情報源についてのところです。

レシピ 217 より、ruby 1.9 のインストールについて。わたしは既に 1.8.7, 1.9.1, 1.9.2-preview1, trunk の ruby をそれぞれホームディレクトリの下に --prefix を切り替えてインストールしています。最近ですと RVM (Ruby Version Manager) を使って複数のバージョンの ruby を切り替えて利用するのが流行っているみたいです。わたしは自前で似たようなものを作ってしまっていたのでまだ試していないのですが…。RVM は CRuby だけでなく JRuby や Rubinius, MacRuby などもインストールできるそうなのでいろんな Ruby を試してみたい! という時には使ってみると良いのではないでしょうか。

レシピ 218 より、YARV の命令列(InstructionSequence)を表示する方法としてソースツリー内の tool/parse.rb を使う方法と VM::InstructionSequence を使ってスクリプト内でコンパイルする方法が紹介されていますが、もっと手軽に以下のように ruby インタプリタコマンドラインオプションを渡せば disassemble した命令列を表示してくれます。

$ ruby --dump=insn test.rb
== disasm: <RubyVM::InstructionSequence:<main>@test.tb>=================
:

レシピ 219 から 226 は 1.9 の大きな変更である文字列のエンコーディングの話題が取り上げられています。特にレシピ 222 の入出力のデフォルトエンコーディングについては複雑なのでとてもありがたい解説です。

レシピ 226 の文字列をバイト列として扱う項目では、[[ String#[] ]]で文字列の特定の位置のバイト単位の値を数値として取り出せると記述されていますが*1、これは誤りで、1文字だけの文字列(String)を返すように 1.9 では変更されています。1.9 で文字列からバイト単位の値を取り出すには String#unpack か、String#ord を用いることになります。

"\x00\x01"[1]           #=> "\x01"
"\x00\x01".unpack("C2") #=> [0, 1]
"\x00\x01"[1].ord       #=> 1

さて、これでレシピ本の本文は読了です。しかし、わたしはレシピ本ほ RubyKaigi2009 の会場で購入し*2、特典の本編未収録の GUI ツールキットの章のプリントを貰っています。明日からそれを読んで完了としたいと思います。

*1:手元のレシピ本は初版第1刷です

*2:実は著者のサイン入り