2009年
5月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

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に間違いを見つけた。 「真」を「進」と書いているだけなのだが。