ruby 1.9 feature
ruby version 1.9.0 は開発版です。
以下にあげる機能は将来削除されたり互換性のない仕様変更がなされるかもしれません。
1.9.1 以降は安定版です。
バグ修正がメインになります。
記号について(特に重要なものは大文字(主観))
- カテゴリ
- [ruby]: ruby インタプリタの変更
- [api]: 拡張ライブラリ API
- [lib]: ライブラリ
- [parser]: 文法の変更
- [regexp]: 正規表現の機能拡張
- [marshal]: Marshal ファイルのフォーマット変更
- レベル
- [bug]: バグ修正
- [new]: 追加されたクラス/メソッドなど
- [compat]: 変更されたクラス/メソッドなど(互換性のある変更) (only backward-compatibility) (影響の範囲が小さいと思われる変更もこちら)
- [change]: 変更されたクラス/メソッドなど(互換性のない変更)
- [experimental]: 変更の中でも特に実験的なもの(将来再考して欲しいもの?)
- [obsolete]: 廃止された(される予定の)機能
- [platform]: 対応プラットフォームの追加
1.9.0
- Object#send, Object#__send__ [ruby][change]
-
レシーバを指定した呼び出しではprivateメソッドを呼び出せなくなりました。
- ENV.[]= [change]
-
ENV[key] = nil で要素を削除する機能は失われ、TypeError になるようになりました。
[ruby-list:40865]
- Array#nitems [compat]
-
Array#nitems にブロックを渡せるようになり、ブロックが真になる要素の個数を返すように
なりました。
[1,2,3].nitems{|i| i % 2 != 0} #=> 2
[ruby-talk:134083]
- proc [ruby][parser][experimental]
-
以前のローカル変数に括弧を付けると call が呼び出される変更は取り消されて、
(expr)(args...)
で expr.call(args...)
が呼ばれるようになりました。
この機能は実験的なものです。
x = proc {|a| p a}
(x)(7) # => 7
- Hash#hash [obsolete]
- Hash#eql? [obsolete]
-
削除
[ruby-dev:26132]
- ENV.key [new]
- ENV.index [obsolete]
-
[ruby-dev:25974]
- Ruby 2.0 ブロックローカル変数
-
<URL:http://www.rubyist.net/~matz/20050309.html#p03>
- Time::strptime [lib][new]
- ParseDate::strptime [lib][new]
-
time.rb, parsedate.rb に追加 [ruby-talk:132815]
1.9.0 からメソッドと括弧の間にスペースを入れると常に警告がでるようになっていましたが、
その警告はデバッグモード・冗長モードでしかでなくなりました。
% ruby -e 'p ("")'
""
% ruby -de 'p ("")'
-e:1: warning: (...) interpreted as grouped expression
""
- proc [ruby][experimental]
-
{|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
- Parser/Maker [lib] [new]
-
Imageモジュールのサポート
- ::Element#convert(value) [lib] [new]
-
valueのエンコーディングを変換するメソッドを公開。
valueのエンコーディングは要素の内部エンコーディングからoutput_encoding=で設定したエンコーディングへ変換されます。
- Ripper.slice [ruby] [experimental]
-
追加。<URL:http://i.loveruby.net/d/20050201.html#p02>
- ::VERSION [lib]
-
0.1.2 -> 0.1.3
- ::Parser [lib] [bug]
-
継承するとエラーになるバグを修正。 [ruby-talk:126104]
- ARGF.readpartial [new]
-
追加 [ruby-dev:25381]
- FileUtils.copy_stream(src, dst) [lib] [compat]
-
src として ARGF も受け付けるようになりました。
[ruby-dev:25369]
- Net::IMAP::PlainAuthenticator [lib] [new]
- FileUtils.chown [lib] [new]
- FileUtils.chown_R [lib] [new]
- IO#read [change]
-
read(0) は常に "" を返すようになりました。
また、nonblocking mode でも動作が変わらなくなりました。
[ruby-dev:25101]
- Hash#hash [new]
-
追加 [ruby-talk:122482]
- method(:y).to_proc.call{ p :ok }
-
Method#to_proc で作った Proc オブジェクトからメソッド y へと
ブロックが引き渡されるようになりました。[ruby-dev:25031]
- Process.getrlimit(resource) [new]
- Process.setrlimit(resource, cur_limit, max_limit) [new]
- Process::RLIM_INFINITY
- Process::RLIM_SAVED_MAX
- Process::RLIM_SAVED_CUR
- Process::RLIMIT_CORE
- Process::RLIMIT_CPU
- Process::RLIMIT_DATA
- Process::RLIMIT_FSIZE
- Process::RLIMIT_NOFILE
- Process::RLIMIT_STACK
- Process::RLIMIT_AS
- Process::RLIMIT_MEMLOCK
- Process::RLIMIT_NPROC
- ::RLIMIT_RSS
- Process::RLIMIT_SBSIZE
-
追加 [ruby-dev:24834]
- Array#[]= [change]
-
a[n,m]=nil は要素の削除ではなくなり、要素の並びを nil に入れ換えるようになりました。
zw-kdoo(2004-10-24)
- Proc#dup [new]
-
追加 [ruby-talk:116915]
- require [change]
-
feature が $" に追加されるタイミングが load された後に変わりました。
[ruby-list:40085]
- Array#index {|x| ... } [new]
- Array#rindex {|x| ... } [new]
-
追加 [ruby-talk:113069]
- Time#to_time [lib][new]
- Time#to_date [lib][new]
- Time#to_datetime [lib][new]
- Date#to_time [lib][new]
- Date#to_date [lib][new]
- Date#to_datetime [lib][new]
- DateTime#to_time [lib][new]
- DateTime#to_date [lib][new]
- DateTime#to_datetime [lib][new]
-
追加 [ruby-dev:24250]
- KeyError [new]
- Hash#key [new]
- Hash#index [obsolete]
-
[ruby-talk:113279]
<URL:http://www.rubyist.net/~matz/20040922.html#p01>
- Zlib::GzipReader#readpartial(maxlen[, outbuf]) [lib][new]
-
追加 [ruby-dev:24070]
- ripper [new]
-
追加 [ruby-dev:24255]
- StringIO#readpartial(maxlen[, outbuf]) [lib][new]
-
追加。[ruby-dev:24061]
- Binding#eval(expr[, fname[, lineno=1]]) [new]
-
追加。[RCR#251]
- String#clear [new]
-
追加。[ruby-dev:24104]
- Process.daemon(nochdir=nil,noclose=nil) [new]
-
追加。[ruby-dev:24030]
- IO#readpartial(maxlen[, outbuf]) [new]
-
追加。[ruby-dev:22945], [ruby-dev:23247], [ruby-dev:24055]
- Regexp#match(str, [pos]) [compat]
- String#match(re, [pos]) [compat]
-
省略可能な第二引数 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]
- File::Stat#dev_major [new]
- File::Stat#dev_minor [new]
-
追加。[ruby-core:03195]
- Enumerable#max_by [new]
- Enumerable#min_by [new]
-
ブロックの結果を大小比較し、その最大値、最小値を示す要素を返します。
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
- allow passing a block to a Proc [ruby] [change]
-
[ruby-dev:23533]
- Time [marshal]
-
Marshal.dump により、タイムゾーンの情報を保持するようになりました。
- Dir.glob [bug]
-
三重以上入れ子になった { } が動くようになりました。
[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"]
- Dir.glob [bug]
-
{ } の中で '{' や '}' や ',' をエスケープできるようになりました。
[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]
["{"]
- Iconv.list [lib] [compat]
-
[ruby-dev:23063]
- Kernel#open [ruby] [change]
-
可能なら最初の引数に対して to_open を呼ぶようになりました。
- Exception#to_str [ruby] [obsolete]
- Array#pack [ruby] [change]
-
pack("U") 時に、ユニコードとして不適切な値が来ているときは
RangeError を投げるようになりました。
[ruby-dev:23281]
- Module#class_variable_get [ruby] [new]
- {sym: val} [ruby] [new]
-
{:sym => val} を {sym: val} のように書くことができるようになりました。
- File.fnmatch [change]
-
File::FNM_PATHNAME がセットされている場合、**/ が */ の繰り返しとして働くようになりました。
[ruby-dev:22901]
- File.fnmatch, Dir.glob [change]
-
Windows, DJGPP, EMX でも '\' をパスセパレータとして解釈せず、常にエスケープ文字として解釈するようになりました。
[ruby-dev:22974] [ruby-list:39337]
- WEBrick::Config::General [lib] [new]
-
オプション :DoNotReverseLookup 追加。
- $-W [ruby] [new]
-
追加
- ::HTTPHeader#add_header [lib] [new]
- ::HTTPHeader#get_fields [lib] [new]
- ::HTTPHeader#content_length= [lib] [new]
- ::HTTPHeader#content_type [lib] [new]
- Net::HTTPHeader#main_type [lib] [new]
- ::HTTPHeader#sub_type [lib] [new]
- ::HTTPHeader#type_params [lib] [new]
- ::HTTPHeader#content_type= [lib] [new]
- ::HTTPHeader#set_content_type [lib] [new]
- Net::HTTPRequest#body(=) [lib] [new]
- Net::HTTPRequest#body_stream(=) [lib] [new]
- lib/net/http.rb [lib] [new]
-
support WebDAV methods, PROPPATCH, LOCK, UNLOCK, OPTIONS, PROPFIND,
DELETE, MOVE, COPY, MKCOL.
- Net::HTTPResponse#response [lib] [obsolete]
- ::HTTPResponse#header [lib] [obsolete]
- ::HTTPResponse#read_header [lib] [obsolete]
- Iconv.list [lib] [new]
- IO.popen [compat]
-
system 等と同様、第一引数に配列でコマンドを指定し
た場合にシェルを経由せずに子プロセスを実行できるようになりました。
[ruby-dev:22877]
- spawn [new]
- Process.spawn [new]
-
追加。[ruby-dev:22877]
- system [change]
-
コマンドを実行できないときに例外が発生するようになりました。
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
- File.fnmatch [ruby] [change]
-
Windows(のNT系列?)で File::FNM_CASEFOLD が指定された場合、全角英文字の大文字・小文字も区別しなくなりました。
- Dir.glob [ruby] [change]
-
Windows, DJGPP, EMX では、常に大文字・小文字を区別しなくなりました。また、File::FNM_CASEFOLD は指定できなくなりました。
[ruby-dev:22761]
- Array#pack [ruby] [compat]
-
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
- VERSION [obsolete]
- RELEASE_DATE [obsolete]
- PLATFORM [obsolete]
-
削除されました。[ruby-dev:22643]
- NameError [ruby]
-
[ruby-dev:22604]
- SystemStackError [ruby] [change]
-
SystemStackError が StandardError ではなく Exception の直下になりました。
[ruby-talk:89782]
- Pathname#world_readable? [lib] [new]
- Pathname#world_writable? [lib] [new]
- File::Stat#world_readable? [ruby] [new]
- File::Stat#world_writable? [ruby] [new]
- File::world_readable? [ruby] [new]
- File::world_writable? [ruby] [new]
- Dir#inspect [ruby] [new]
-
パスを返します。
- Logger#msg2str [lib] [change]
-
to_str を使わなくなりました。
- Dir.glob [ruby] [change]
-
Windowsで **/ がリパースポイントを辿らなくなりました。(シンボリックリンクと同じ扱い)
[ruby-dev:22486]
- File.fnmatch, Dir.glob [ruby] [change]
-
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