ruby version 1.9.0 は開発版です。 以下にあげる機能は将来削除されたり互換性のない仕様変更がなされるかもしれません。 1.9.1 以降は安定版です。 バグ修正がメインになります。
記号について(特に重要なものは大文字(主観))
Atomのサポート
Atomサポートに伴って参照系のAPIが少し変わりました。
具体的には、0.1.6までは以下のメソッドはStringかnilを返していたのですが、オブジェクトを返すようになりました。
ただし、今までの使い方ではRSS Makerの参照系のAPIを使うことは少ないと思うため、この変更による影響は小さいと思います。
複数のdc_rightsを取得するAPIをdc_rightsesからdc_rights_listに変更しました。従来のdc_rightsesも使えます。
0.1.6 -> 0.1.7
追加
追加
削除
オプショナル引数の assignable がなくなり、attr_reader 相当になりました [RCR#331]
無名モジュールに対しては nil を返すようになりました [ruby-talk:198440]
追加 ruby-talk:197512[外部]
削除
<URL:http://www.dm4lab.to/~usa/ruby/d/200606a.html#id20060610_P1_7>[外部]
<URL:http://www.atdot.net/~ko1/w3ml/w3ml.cgi/ruby-cvs/msg/16833>[外部]
<URL:http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9+update+4>[外部]
ruby-core:7917
名前による参照 ruby-dev:28446[外部]
remove_destination オプションの追加 ruby-dev:28417[外部]
ruby-core:7365
ブロックがなければ enumerator を返す
追加
do_not_reverse_lookup のデフォルトが true になりました。
GC.stress = true とすると、GC を行えるすべての機会で GC を行います。
削除
fcall から改名
追加
Dir.glob に配列を渡して複数のパターンを指定できるようになりました。 また、Dir[] は、複数の引数を渡すことで複数のパターンを指定できるよう になりました。ruby-dev:27110[外部]
p Dir.glob(["f*","b*"]) # => ["foo", "bar"] p Dir["b*","b*"] # => ["foo", "bar"]
以前のバージョンでも、パターンを "\0" で区切ったり、{} パターンを使 用することで同様のことはできます。
p Dir.glob("f*\0b*") # => ["foo", "bar"] p Dir.glob("{f*,b*}") # => ["foo", "bar"]
追加
レシーバを指定した呼び出しではprivateメソッドを呼び出せなくなりました。
ENV[key] = nil で要素を削除する機能は失われ、TypeError になるようになりました。
ruby-list:40865[外部]
Array#nitems にブロックを渡せるようになり、ブロックが真になる要素の個数を返すように なりました。
[1,2,3].nitems{|i| i % 2 != 0} #=> 2
ruby-talk:134083[外部]
以前のローカル変数に括弧を付けると call が呼び出される変更は取り消されて、
(expr)(args...)
で expr.call(args...)
が呼ばれるようになりました。
この機能は実験的なものです。
x = proc {|a| p a} (x)(7) # => 7
削除
ruby-dev:26132[外部]
ruby-dev:25974[外部]
time ライブラリ, parsedate ライブラリに追加 ruby-talk:132815[外部]
1.9.0 からメソッドと括弧の間にスペースを入れると常に警告がでるようになっていましたが、 その警告はデバッグモード・冗長モードでしかでなくなりました。
% ruby -e 'p ("")' "" % ruby -de 'p ("")' -e:1: warning: (...) interpreted as grouped expression ""
{|a| ...} や (do ... end) が proc として解釈されるようになりました。この機能は 実験的なものです。ruby-dev:25780[外部]
x = {|a| p a} x.call(4) # => 4 x = (do |a| p a end) x.call(9) # => 9
Imageモジュール[外部]のサポート
valueのエンコーディングを変換するメソッドを公開。
valueのエンコーディングは要素の内部エンコーディングからoutput_encoding=で設定したエンコーディングへ変換されます。
0.1.2 -> 0.1.3
継承するとエラーになるバグを修正。 ruby-talk:126104[外部]
追加 ruby-dev:25381[外部]
src として ARGF も受け付けるようになりました。 ruby-dev:25369[外部]
read(0) は常に "" を返すようになりました。 また、nonblocking mode でも動作が変わらなくなりました。 ruby-dev:25101[外部]
追加 ruby-talk:122482[外部]
Method#to_proc で作った Proc オブジェクトからメソッド y へと ブロックが引き渡されるようになりました。ruby-dev:25031[外部]
追加 ruby-dev:24834[外部]
ruby 1.8.5 feature: 1.8.5 に backport ruby-dev:28729[外部]
a[n,m]=nil は要素の削除ではなくなり、要素の並びを nil に入れ換えるようになりました。 zw-kdoo(2004-10-24)<URL:http://web.archive.org/web/20050225230615/http://yowaken.dip.jp/tdiary/20041024.html#c02>[外部]
追加 ruby-talk:116915[外部]
feature が $" に追加されるタイミングが load された後に変わりました。 ruby-list:40085[外部]
追加 ruby-talk:113069[外部]
追加 ruby-dev:24250[外部]
ruby-talk:113279[外部] <URL:http://www.rubyist.net/~matz/20040922.html#p01>[外部]
追加 ruby-dev:24070[外部]
追加 ruby-dev:24255[外部]
追加。ruby-dev:24061[外部]
追加。RCR#251
追加。ruby-dev:24104[外部]
追加。ruby-dev:24030[外部]
追加。ruby-dev:22945[外部], ruby-dev:23247[外部], ruby-dev:24055[外部]
省略可能な第二引数 pos が追加されました。マッチの開始位置を指定しま す。ruby-core:03203, ruby-core:03205
p(/(.)/.match("foobar", 4).captures) # => ruby 1.9.0 (2004-07-17) [i586-linux] ["a"]
マッチ位置は文字列の先頭から数えられます。
p(/(.)/.match("foobar", 4).offset(0)) # => ruby 1.9.0 (2004-07-17) [i586-linux] [4, 5]
追加。ruby-core:03195
ブロックの結果を大小比較し、その最大値、最小値を示す要素を返します。
p [1,2,3,4,5].max_by {|v| -v} # => ruby 1.9.0 (2004-07-17) [i586-linux] 1 p [1,2,3,4,5].min_by {|v| -v} # => ruby 1.9.0 (2004-07-17) [i586-linux] 5
ruby-dev:23533[外部] *1
Marshal.dump により、タイムゾーンの情報を保持するようになりました。
三重以上入れ子になった { } が動くようになりました。 ruby-dev:23376[外部]
p Dir.glob('{{{ruby}}}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] ["ruby"]
{ } の中で '{' や '}' や ',' をエスケープできるようになりました。 ruby-dev:23376[外部]
p Dir.glob('{\,}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] [","] p Dir.glob('{\{}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] ["{"]
ruby-dev:23063[外部]
可能なら最初の引数に対して to_open を呼ぶようになりました。
pack("U") 時に、ユニコードとして不適切な値が来ているときは RangeError を投げるようになりました。 ruby-dev:23281[外部]
{:sym => val} を {sym: val} のように書くことができるようになりました。
File::FNM_PATHNAME がセットされている場合、**/ が */ の繰り返しとして働くようになりました。 ruby-dev:22901[外部]
Windows, DJGPP, EMX でも '\' をパスセパレータとして解釈せず、常にエスケープ文字として解釈するようになりました。 ruby-dev:22974[外部] ruby-list:39337[外部]
オプション :DoNotReverseLookup 追加。
追加
support WebDAV methods, PROPPATCH, LOCK, UNLOCK, OPTIONS, PROPFIND, DELETE, MOVE, COPY, MKCOL.
system 等と同様、第一引数に配列でコマンドを指定し た場合にシェルを経由せずに子プロセスを実行できるようになりました。 ruby-dev:22877[外部]
追加。ruby-dev:22877[外部]
コマンドを実行できないときに例外が発生するようになりました。
p system("hogehoge") # => ruby 1.8.2 (2004-07-17) [i586-linux] false # => ruby 1.9.0 (2004-07-17) [i586-linux] -:1:in `system': No such file or directory - hogehoge (Errno::ENOENT) from -:1 p system("/tmp") # => ruby 1.8.2 (2004-07-17) [i586-linux] false # => ruby 1.9.0 (2004-07-17) [i586-linux] -:1:in `system': Permission denied - /tmp (Errno::EACCES) from -:1
シェルを経由する場合は、これまでどおりです。
p system("hogehoge ''") # => ruby 1.9.0 (2004-07-17) [i586-linux] sh: line 1: hogehoge: command not found false
個々のソケットごとに逆引きの設定ができるようになりました。 ruby-core:2346
Windows(のNT系列?)で File::FNM_CASEFOLD が指定された場合、全角英文字の大文字・小文字も区別しなくなりました。
Windows, DJGPP, EMX では、常に大文字・小文字を区別しなくなりました。また、File::FNM_CASEFOLD は指定できなくなりました。 ruby-dev:22761[外部]
U 以外のサイズのある整数指定子に大きな数を与えた場合 RangeError を 投げなくなりました。ruby-dev:22654[外部]
$ ruby -e 'p [2**32].pack("i")' "\000\000\000\000" $ ruby -e 'p [2**32].pack("U")' -e:1:in `pack': bignum too big to convert into `long' (RangeError) from -e:1
削除されました。ruby-dev:22643[外部]
ruby-dev:22604[外部]
SystemStackError が StandardError ではなく Exception の直下になりました。 ruby-talk:89782[外部]
パスを含む "#<Dir:path>" というような文字列を返します。
ruby-dev:22562[外部]
to_str を使わなくなりました。
Windowsで **/ がリパースポイントを辿らなくなりました。(シンボリックリンクと同じ扱い) ruby-dev:22486[外部]
Windows, DJGPP, EMX でマルチバイト文字に対応しました。 ruby-dev:22476[外部]
p File.fnmatch('?', 'あ') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] false #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] true p File.fnmatch('?T', 'サ') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] true #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] false
*1よくわからない