Ruby 2.2.0 リファレンスマニュアル > ruby 1.8.3 feature

ruby 1.8.3 feature

*((<ruby 1.8 feature>)) *((<ruby 1.8.2 feature>))

ruby 1.8.2 から ruby 1.8.3 までの変更点です。

掲載方針

*バグ修正の影響も含めて動作が変わるものを収録する。 *単にバグを直しただけのものは収録しない。 *ライブラリへの単なる定数の追加は収録しない。

以下は各変更点に付けるべきタグです。

記号について(特に重要なものは大文字(主観))

* カテゴリ

* レベル

bundled libraryである(rubyの一部ではない)soap4rの変更点については、以下を参考にしてください。 soap4r-1.5.3がruby-1.8.2、soap4r-1.5.5がruby-1.8.3にbundleされています。

1.8.2 (2004-12-25) -> 1.8.3 (2005-09-21)

2005-09-19

FileUtils.remove_entry_secure [lib] [new]
FileUtils.remove_entry [lib] [new]
FileUtils.chmod_R [lib] [new]
FileUtils.chown [lib] [new]
FileUtils.chown_R [lib] [new]
FileUtils.commands [lib] [new]
FileUtils.options [lib] [new]
FileUtils.have_option? [lib] [new]
FileUtils.options_of [lib] [new]
FileUtils.collect_method [lib] [new]

追加。

FileUtils.rm_r [lib] [compat]
FileUtils.rm_rf [lib] [compat]
FileUtils.cd [lib] [compat]
FileUtils.cp_r [lib] [compat]

rm_f と rm_rf が :secure オプションを受け付けるようになりました。 cd が :noop オプションを受け付けなくなりました。 cp_r が :dereference_root オプションを受け付けるようになりました。

2005-09-16

File.join [ruby] [compat]

型チェックを厳密にするようになりました。

$ ruby-1.8.2 -e 'p File.join(1, 2)' "1/2" $ ruby-1.8.3 -e 'p File.join(1, 2)' -e:1:in `join': can't convert Fixnum into String (TypeError) from -e:1

2005-09-16

File.extname [ruby] [compat]

与えられた pathname がピリオドで終る場合、ピリオドではなく空の文字列を返すようになりました。

$ ruby-1.8.2 -e 'p File.extname("a.")' "." $ ruby-1.8.3 -e 'p File.extname("a.")' ""

2005-09-13

Logger#formatter [lib] [new]
Logger#formatter= [lib] [new]
Logger::Formatter [lib] [new]

追加。

2005-09-13

Net::HTTP

https での Proxy 認証をサポートするようになりました。

Net::HTTP.post_form(url, params) [lib] [new]
Net::HTTPHeader#content_length= [lib] [new]
Net::HTTPHeader#content_type [lib] [new]
Net::HTTPHeader#main_type [lib] [new]
Net::HTTPHeader#sub_type [lib] [new]
Net::HTTPHeader#type_params [lib] [new]
Net::HTTPHeader#content_type= [lib] [new]
Net::HTTPHeader#set_content_type [lib] [new]
Net::HTTPRequest#body(=) [lib] [new]
Net::HTTPRequest#body_stream(=) [lib] [new]

追加。

Net::HTTPHeader#each_capitalized [lib] [compat]
Net::HTTPHeader#each_capitalized_name [lib] [new]

Net::HTTPHeader#canonical_each は Net::HTTPHeader#each_capitalized に名前が変わりました。canonical_each も each_capitalized の別名として提供されます。

net/http [lib] [new]

WebDAV のメソッドをサポートするようになりました。 PROPPATCH, LOCK, UNLOCK, OPTIONS, PROPFIND, DELETE, MOVE, COPY, MKCOL。

Net::HTTPRequest#body_exist? [lib] [obsolete]
Net::HTTPResponse#response [lib] [obsolete]
Net::HTTPResponse#header [lib] [obsolete]
Net::HTTPResponse#read_header [lib] [obsolete]

obsolete になりました。VERBOSE モードの時、警告が出ます。

2005-09-10

OpenSSL::PKCS7::RecipientInfo [lib] [new]
OpenSSL::PKCS7::SignerInfo [lib] [compat]

新クラス、追加。OpenSSL::PKCS7::Signer が OpenSSL::PKCS7::SignerInfo に名前が変わりました。Signer も別名として引続き提供されます。

2005-09-10

OpenSSL::Digest::SHA224
OpenSSL::Digest::SHA256
OpenSSL::Digest::SHA384
OpenSSL::Digest::SHA512

新クラス、追加。OpenSSL 0.9.8 以降とともにコンパイルされた時のみ。

2005-09-09

$SAFE [ruby] [compat]

メソッドが定義された時の $SAFE レベルを記憶するようになりました。メソッドは定義された時の $SAFE レベルで実行されます。 $SAFE レベル 3 以上の環境下において定義されたメソッドを呼び出すことは、$SAFE レベル が 0 のとき禁止されるようになりました。

$ cat mthd_taint.rb th = Thread.new{ $SAFE = 3 class Hoge def foo puts "safe level: #{$SAFE}" end end } th.join p $SAFE Hoge.new.foo

$ ruby-1.8.2 mthd_taint.rb 0 "safe level: 0" $ ruby-1.8.3 mthd_taint.rb 0 mthd_taint.rb:11:in `foo': calling insecure method: foo (SecurityError) from mthd_taint.rb:11

2005-09-09

String#* [ruby] [compat]
String#[] [ruby] [compat]

空文字にも taint が伝播するようになりました。((<ruby-dev:26900>)) ((<ruby-dev:27121>)) $ ruby-1.8.2 -e 'p ("x".taint * 0).tainted?' false $ ruby-1.8.3 -e 'p ("x".taint * 0).tainted?' true

$ ruby-1.8.2 -e 'p ("x".taint[1..-1]).tainted?' false $ ruby-1.8.3 -e 'p ("x".taint[1..-1]).tainted?' true

Range オブジェクトが taint されている場合、"string"[range] も taint されるようになりました。((<ruby-dev:27121>))

$ ruby-1.8.2 -e 'p ("x"[(0..-1).taint]).tainted?' false $ ruby-1.8.3 -e 'p ("x"[(0..-1).taint]).tainted?' true

2005-08-29

Time.parse [lib] [compat]

Time.parse が小数点以下の秒も扱えるようになりました。((<ruby-talk:153859>))

$ ruby-1.8.2 -r time -e 'p Time.parse("23 Aug 2005 19:00:01.1").to_f' 1124791201.0 $ ruby-1.8.3 -r time -e 'p Time.parse("23 Aug 2005 19:00:01.1").to_f' 1124791201.1

2005-08-20

Logger [lib] [bug]

ファイルをシフト時のレースコンディションが修正されました。

2005-08-07

WIN32OLE_EVENT#on_event [lib] [bug]

最後に定義したイベントハンドラが有効になるように修正しました。

2005-07-27

Dir#each [ruby] [bug]
Dir#entries [ruby] [bug]

1回メソッドを呼んでしまうと空になるバグを修正しました。

$ ruby-1.8.2 -e ' d = Dir.new("/") d.entries p d.entries ' [] $ ruby-1.8.3 -e ' d = Dir.new("/") d.entries p d.entries ' [".", "..", "dev", "home", "proc", "var", "tmp", "etc", "usr", "sbin", "bin", "boot"]

2005-07-11

正規表現 [ruby] [bug]

正規表現リテラル中で \c\\ 表記があるとパースエラーになるバグを修正しました。

$ cat r.rb p /[\c\\]/ =~ "\c\\" p /\c\\/ =~ "\c\\" $ ruby-1.8.2 r.rb r.rb:1: premature end of regular expression: /[\c\\]/ r.rb:2: invalid regular expression; '\' can't be last character: /\c\\/ $ ruby-1.8.3 r.rb 0 0

2005-06-30

Delegator [lib] [compat]

Delegator オブジェクトが生成された後に定義されたメソッドに関しても、適切に委譲するようになりました。 ((<ruby-talk:146776>)) ((<ruby-talk:146894>)) $ cat test_dlg.rb foo = Object.new foo2 = SimpleDelegator.new(foo) def foo.bar puts "bar" end foo2.bar $ ruby-1.8.2 -r delegate test_dlg.rb test_dlg.rb:6: undefined method `bar' for #<Object:0x4021b0a0> (NoMethodError) $ ruby-1.8.3 -r delegate test_dlg.rb bar

2005-06-20

DBM#closed? [lib] [new]
GDBM#closed? [lib] [new]
SDBM#closed? [lib] [new]

2005-06-16

Time.parse [lib] [compat]

うるう秒 "Fri Jan 1 08:59:60 +0900 1999" をサポートしている環境において、Time.parse が適切に振舞うようになりました。

2005-06-08

Curses.insertln [lib] [new]
Curses::Window.insertln [lib] [new]

2005-06-08

ext/socket [lib] [compat]

拡張ライブラリ socket が AIX 上でコンパイルされるようになりました。((<ruby-list:40832>))

2005-06-07

Module#class_variable_get [ruby] [new]
Module#class_variable_set [ruby] [new]

クラスメソッドから((<変数と定数/クラス変数>))にアクセスするための ((<Module#class_variable_get|Module/class_variable_get>)) と ((<Module#class_variable_set|Module/class_variable_set>)) が追加されました。((<ruby-talk:144741>))

class Fred @@foo = 99 def foo @@foo end end def Fred.foo @@foo = 101 #=> @@foo は Fred クラスのクラス変数ではない。 end def Fred.foo_foo class_variable_set(:@@foo, 101) # self が Fred クラス自身であることに注意。クラス変数 @@foo に値をセットする。 end Fred.foo # メソッドを呼んでも、Fred クラスのクラス変数 @@foo は変わらない。 p Fred.new.foo #=> 99

Fred.foo_foo # p Fred.new.foo #=> 101

2005-05-28

WEBrick::CGI::Socket#request_line [lib] [compat]

WEBrick を CGI 環境下で使う場合、 request_line メソッドは REQUEST_URI ヘッダがあればそちらを優先して使うようになりました。 ((<ruby-dev:26235>))

2005-05-27

mkmf [lib] [bug]

MSYS 環境下において、PATHの区切り値にセミコロンを使うよう修正しました。((<ruby-dev:26232>))

2005-05-24

getopts [lib] [obsolete]

getopts が deprecated になりました。deprecated であるという警告は、オプションに -w を付けた時に出ます。((<ruby-dev:26201>))

2005-05-22

OpenSSL::SSL::SSLServer#initialize(svr, ctx, session_id=nil)

session_id を受け付けるようになりました。((<ruby-core:4663>))

2005-05-19

REXML::Encoding#decode_sjis [lib] [bug]
REXML::Encoding#encode_sjis [lib] [bug]

decode_sjis と encode_sjis が逆に定義されていたバグを修正しました。((<ruby-core:4772>))

2005-05-16

singleton class [ruby] [change]

特異クラスは複製できなくなりました。((<ruby-talk:142749>))

$ ruby-1.8.3 -e 'class << "str"; self end.dup' -e:1:in `initialize_copy': can't copy singleton class (TypeError) from -e:1

2005-05-15

Pathname#unlink [lib] [compat]

ディレクトリへのシンボリックリンクも削除されるようになりました。((<ruby-core:4992>))

2005-05-14

NameError
SystemCallError
SystemExit

各例外クラスのインスタンスが生成される時に、親クラスのコンストラクタである Exception#initialize が呼ばれるようになりました。((<ruby-talk:142593>)) ((<ruby-dev:26177>))

2005-05-11

break [ruby] [bug]

メソッドを越えて break が有効になるバグを修正しました。((<ruby-list:40818>)) $ cat brk.rb def stop(n) break if n == 2 end (1..5).each do |i| stop(i) puts i end $ ruby-1.8.2 brk.rb 1 $ ruby-1.8.3 brk.rb 1 brk.rb:2:in `stop': unexpected break (LocalJumpError) from brk.rb:6 from brk.rb:5

2005-05-11

WEBrick::CGI#[] [lib] [new]
WEBrick::CGI#logger [lib] [new]
WEBrick::CGI#config [lib] [new]

2005-05-01

ruby -s option [ruby] [bug]

オプション -s でアクセスできないグローバル変数ができてしまうバグを修正しました。- を _ に変換してグローバル変数を定義するようになりました。- 以外の記号がふくまれる場合は、例外 NameError を投げます。 $ ruby-1.8.2 -se 'puts global_variables.grep(/foo/)' -- --foo-bar $-foo-bar $ ruby-1.8.3 -se 'puts global_variables.grep(/foo/)' -- --foo-bar $_foo_bar

$ ruby-1.8.3 -se 'puts global_variables.grep(/foo/)' -- --foo\@bar -e: invalid name for global variable - --foo@bar (NameError)

2005-04-18

WIN32OLE.codepage [lib] [new]
WIN32OLE.codepage= [lib] [new]

2005-04-10

WIN32OLE#invoke [lib] [bug]

nil を VT_ERROR に変換して Invokeを呼び出して失敗するときには VT_EMPTYに変換して再度 Invokeを呼び出すようにしました。

2005-04-09

rss [lib][new][compat]

複数のDublin Coreの要素を扱えるようになりました。

このためdc_#{Dublin Coreの要素名の複数形}というメソッドが導入されました。

互換性のために以前のdc_#{Dublin Coreの要素名の単数形}というメソッドも残されています。

2005-03-07

String#<=> [ruby][compat]

比較できないものを渡された時に false ではなく nil を返すようになりました。 ((<ruby-dev:25811>))

$ ruby-1.8.2 -e 'p "a" <=> 1' false $ ruby-1.8.3 -e 'p "a" <=> 1' nil

2005-03-06

HTTPHeader#get_fields [lib][new]
HTTPHeader#add_field [lib][new]

追加。((<ruby-list:40629>))

2005-02-23

local variable and method [ruby][bug]

レシーバを指定したメソッド呼び出しが、同名のローカル変数の有無によって影響されるバグが修正されました。 ((<ruby-dev:25737>)) ((<URL:http://yowaken.dip.jp/tdiary/20050220.html#p01>))

2005-02-17

Open3.popen3 [lib] [compat]

Open3.popen3実行後の$?.exitstatusが0になるように修正されました。

((<クラス/メソッドの定義/defined?>)) [ruby][bug]

(({defined?(@a = b)}))のような NODE_IASGN が nil ではなく "assignment" を返すようになりました。 ((<"[yarv-dev:418]"|URL:http://www.atdot.net/mla/yarv-dev/418>))

2005-02-17

Test::Unit::AutoRunner.run [lib] [change]

第一引数の意味が変わりました。

2005-02-14

OpenSSL::SSL::SSLSocket#post_connection_check [lib][new]

追加 ((<ruby-dev:25690>))

2005-02-13

ERB::Util.html_escape [lib] [compat]
ERB::Util.url_encode [lib] [compat]

モジュール関数としても使えるようになりました。((<ruby-dev:25687>))

2005-02-12

open-uri [lib] [new]

https をサポートするようになりました。

2005-02-11

URI::HTTP#proxy_open [lib][new]

(({:http_basic_authentication})) オプションの追加 ((<ruby-core:4416>))

OpenSSL::X509::Store#set_default_paths [lib][new]

追加 ((<ruby-dev:25670>))

2005-02-06

Resolv::DNS::Resource::TXT#strings [lib] [new]
Resolv::DNS::Message::MessageEncoder#put_string_list [lib] [new]
Resolv::DNS::Message::MessageDecoder#get_string_list [lib] [new]

追加。((<ruby-talk:129732>))

2005-02-04

RSS Parser/Maker [lib] [new]

((<Imageモジュール|URL:http://web.resource.org/rss/1.0/modules/image/>))のサポート

2005-02-03

RSS::Element#convert(value) [lib] [new]

valueのエンコーディングを変換するメソッドを公開。 valueのエンコーディングは要素の内部エンコーディングからoutput_encoding=で設定したエンコーディングへ変換されます。

StringIO [lib] [compat]

close, close_read, close_write が ((<IO>)) と同じように、 nil を返すようになりました。((<ruby-dev:25623>))

2005-01-29

Resolv::DNS::Resource::IN::SRV [lib] [new]

追加 (RFC2782)

2005-01-26

File#flock [ruby] [bug]

Windows 上での File#flock(File::LOCK_UN) が正しく理解されないバグが修正されました。((<ruby-dev:25574>))

2005-01-25

RUBYOPT [ruby] [bug]

環境変数 RUBYOPT の -T オプションを適切に解釈するようになりました。またハイフン - を省略できるようになりました。((<ruby-dev:25512>))

$ env RUBYOPT='Ke rnet/http' ruby -e 'p Net::HTTP' Net::HTTP

2005-01-17

WEBrick::Config::SSL [lib] [compat]

オプション :SSLEnable のデフォルトが false になりました。

WEBrick::HTTPUtils#escape_path [lib] [new]

2005-01-15

RSS::VERSION [lib]

0.1.2 -> 0.1.3

RSS::Parser [lib] [bug]

継承するとエラーになるバグを修正。 ((<ruby-talk:126104>))

2005-01-12

Class#superclass [ruby] [bug]

特異クラスのメソッド superclass が特異クラスを返すように修正されました。 ((<ruby-list:40519>))

2005-01-09

IO#read [obsolete]
IO#readpartial [new]

nonblocking IO に対する IO#read の挙動は ruby 1.9 以降で変化します ((<ruby-dev:25101>))。そのため、 ruby 1.8.3 以降では、VERBOSE モードの時に IO#read がノンブロッキングモードでデータの読み込みに失敗して ((<Errno::EAGAIN|Errno::EXXX>)) エラーが発生した場合、 "nonblocking IO#read is obsolete" という警告が出るようになりました。そして ruby 1.8 の nonblocking IO#read の移行先として ruby 1.8.3 に IO#((<IO/readpartial>)) が追加されました。 ((<ruby-dev:25430>)) ((<ruby-dev:25443>))

$ ruby -e 'sleep 1; print "hoge"' | ruby-1.8.2 -rio/nonblock -we ' io = IO.open(0) io.nonblock = true p io.read(4)' -e:4:in `read': Resource temporarily unavailable (Errno::EAGAIN) from -e:4 $ ruby -e 'sleep 1; print "hoge"' | ruby-1.8.3 -rio/nonblock -we ' io = IO.open(0) io.nonblock = true p io.read(4)' -e:4: warning: nonblocking IO#read is obsolete; use IO#readpartial or IO#sysread -e:4:in `read': Resource temporarily unavailable (Errno::EAGAIN) from -e:4 $ ruby -e 'sleep 1; print "hoge"' | ruby-1.8.3 -rio/nonblock -we ' io = IO.open(0) io.nonblock = true p io.readpartial(4)' "hoge"

$ ruby -e 'sleep 1; print "hoge"' | ruby-1.9 -rio/nonblock -we ' io = IO.open(0) io.nonblock = true p io.read(4)' "hoge"

2005-01-05

srand(bignum) [compat]

srand が引数として unsigned long よりも大きな値も受け付けるようになりました。

rand(bignum) [bug]

負の ((<Bignum>)) を受け取っても 正の ((<Bignum>)) を返すようになりました。

2005-01-03

srand [compat]

引数を与えない場合、可能なら /dev/urandom を参照するようになりました。((<ruby-dev:25392>))