2009年05月12日 プログラミング言語Ruby
_ 1.8と1.9の違い
先日、図書室にいったら、rubyの本があったので、手に取ってみた。とりあえず、発行日を調べたら、今年の一月だった。けっこう新しいなと思って中を見てみたら、面白そうだったので、買ってみた。「プログラミング言語Ruby」という本で、著者には一応まつもとゆきひろが入っている。
少し読んでみたが、1.8と1.9に関しては、普通の拡張なのかと思っていたが、結構大きな変更があるようだ。特に文字列の操作に関しては、マルチバイト文字への対応の関係だと思うが、かなり変わっている。
"abc"[0]
とした場合に、ruby1.8だと、一文字目の文字コード97が返ってくるが、ruby1.9.0では、文字"a"が返ってくるらしい。しかし、debian etchのruby1.9だと97が返ってくるな。debian lennyとubuntu9.04のruby1.9.0だとちゃんと"a"になる。
rubyでbinaryを扱う場合には、この違いは非常に重要である。文字として取り出すときには、1.8では
"abc"[0,1] "abc"[0].chr
のようにしていたが、これらは1.9でも動くようだ。一方で、数字で取り出したいときには、1.9では
"abc".getbyte(0)
とするが、これは1.8では動かない。両方に互換性にある書き方をできないのかな。また、binaryを扱うときのopenの仕方も、
open("file.dat","rb") open("file.dat","r:binary")
と変わったようだ。"rb"でも動くようにしてくれないかな。
今後、binaryを扱うプログラムをどのようなコードで書くかを検討しないといけない。
_ 2009/5/30追記
第一版のP110に間違いを見つけた。 「真」を「進」と書いているだけなのだが。