Rubyの変更点を書いていってます。 *1
現在は1.4から1.6への変更点(一部)と1.6.0から1.6.1への変更点(ChangeLogにあるもの)と1.6.1から1.6.2への変更点(2000-11-18まで)があります。
普通のスクリプトへ影響しそうなものは変更点のまとめに書いてあります。
1.6.1以降の変更点は<URL:http://www.ruby-lang.org/ja/man-1.6/>にある変更履歴や<URL:http://www.pragmaticprogrammer.com/ruby/new_features.html>(英語)をみてください。
足りないものや間違いなどあれば*2掲示板、%ruby(IRC)、メールなどで教えてください。 [ruby-list:24985]も参照。
1.4.6より古い1.4系からのバージョンアップの場合は、filter
からcollect!
への変更やClass#module_function
がなくなった*3ことや/[/]/
がエラーになる*4などの1.4系の途中での変更も注意が必要です。
-Xdirectory
が-Cdirectory
に変更になった。
RUBYOPT
とRUBYLIB_PREFIX
を参照するようになった。
シンボルのクラスがFixnum
からSymbol
になった。
*5
p
がobsoleteになってm
が追加された。
*6
(?>...)
と\G
が追加された。
新機能。
可視性については[ruby-dev:10870]からのスレッド参照。 [ruby-dev:10677]からのスレッドもありますが、最終的な仕様とはちょっと違うかもしれません。
[ruby-dev:10906]と[ruby-dev:10903]にあるようにクラス変数は親から先に初期化した方が良いです。
rescue
に =>
で変数が指定できるようになった。
文 rescue 式
という書き方ができるようになった。
def
にもrescue
節、else
節、ensure
節をつけられるようになった。
$KCODE
のデフォルトが"NONE"
になった。*7
block_given?
iterator?
の名称変更。
fail
からraise
のように古いものも残っている。
Regexp::new(str[,option[,code]])
Regexp::compile(str[,option[,code]])
m
に対応するRegexp::MULTILINE
が追加されている。
Array#pack(template)
eEgGMUwZ_が追加された。 *8
Array#concat
[ruby-list:22546]自動的に配列へ変換しなくなった。
Array#+など他にも自動的に配列に変換しなくなったメソッドがある。
Numeric
Numeric#modulo(num)
Numeric#remainder(num)
[ruby-list:25031]やruby-math参照。
IO#stat
返値のクラスがStruct::Stat
からFile::Stat
に変更になった。
Thread::start([arg,...]){|x...|...}
Thread::fork([arg,...]){|x...|...}
Thread::new([arg,...]){|x...|...}
引数を渡せるようになった。
Thread::join
Thread.join
がなくなった。
1.4系でも使えるThread#join
を使えば良い。
ThreadGroup
スレッドグループクラスが追加された。
Time::at(time[,usec])
μ秒が指定できるようになった。
at
以外も同様。
usec
はTime::strftime
では取り出せない。
Time::tv_usec
またはTime::usec
で取り出す。
参考:[ruby-list:23707]。
Date::new(year,month,day[,start])
古いDateはDate2で置き換えられた。
今後はrequire 'date2'
の代わりにrequire 'date'
としてDateを使うのが望ましい。
require 'marshal'
がobsolete。
[ruby-dev:10946]からのスレッド参照。
英語弱いのでChangeLogからわかったものだけ書いていきます。
ChangeLogからの情報を中心に関連情報へのリンクもつけて紹介していきます。
Wed Sep 20 14:01:45 2000
a.rb で require "a" するとデッドロック([ruby-dev:10981])などのデバッグ。
Wed Sep 20 23:21:38 2000
rubyを何も指定せずに起動したときに,Ctrl-Dを2回押さないと止まらないバグの修正。 <URL:http://www.ruby-lang.org/cgi-bin/ruby-bugs-ja/1.6?id=17;user=guest>
Thu Sep 21 15:49:07 2000
シンボリックリンクのディレクトリの中をたどらなくなった。 他改善。 <URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/lib/find.rb?r1=1.3&r2=1.4>
Thu Sep 21 15:59:23 2000
netlibが1.1.29になった。 rubyのCVSだけ1.1.29になっててSofticaやRAAは9/22の時点では更新されていない。
以上が変更点となっていますが、HTTPResponseReceiverへの変更でnet/httpはいろいろ変わっているみたいなので注意。 connectingの変更点はよくわからなかったです。
<URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/lib/net/http.rb?r1=1.29&r2=1.30>
Thu Sep 21 17:23:05 2000 と Fri Sep 22 10:16:21 2000
lstatがない環境ではstatと同じになった。 今までは例外NotImplementErrorが発生していた。 [ruby-dev:11006]からのスレッド参照。
これと一緒にlstat, symlink, readlink, telldir, seekdirをconfigureでチェックするようになったらしい。
Thu Sep 21 19:04:34 2000
libdirがディレクトリかどうかをチェックするようになった。 <URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/ext/extmk.rb.in?r1=1.29&r2=1.30>
Fri Sep 22 13:42:50 2000
[ruby-dev:11028]からのスレッド。 alphaでのwarningを消したらしい。 <URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/regex.c?r1=1.30&r2=1.31>
Fri Sep 22 13:58:51 2000
[ruby-dev:11024]のようです。 <URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/ext/extmk.rb.in?r1=1.30&r2=1.31>
Fri Sep 22 15:46:21 2000
[ruby-dev:11036]とDOS窓でエラーメッセージが流れて読めない原因だったバックトレースがつかなくなったという変更だと思うのですが、ChangeLogの英語の意味がわかりませんでした。 <URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/lib/net/http.rb?r1=1.30&r2=1.31>
Sat Sep 23 03:06:25 2000
さっぱりわかりません(^^;)。 providedっていうのがどういう状態を表しているのかがわかればわかるのかも。
<URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/variable.c?r1=1.24&r2=1.25>
Sun Sep 24 03:01:53 2000
[ruby-dev:11041]だけかと思ったら他にもあったみたい。
Mon Sep 25 00:35:01 2000
<URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/defines.h?r1=1.11&r2=1.12>
Mon Sep 25 13:31:45 2000
[ruby-list:25141]からのスレッドにある\があるとワイルドカードがきかなくなる問題の修正。 ([ruby-list:25164])
内部的な変更だけのようなので途中は省略。
Wed Sep 27 18:40:05 2000
net/httpのHTTPReadAdapterがHTTPResponseReceiverになった。
その他バグ修正や内部的な変更のようです。
2000/10/05
[ruby-dev:11110]からのスレッドのパッチ。
Fri Oct 6 14:50:24 2000
安全性を高めたのがメインのようです。
Wed Oct 25 12:30:19 2000
Fri Oct 6 12:50:52 2000
主に高速化だと思います。
Thu Nov 16 16:32:45 2000
Tue Nov 7 04:32:19 2000
Tue Oct 31 17:27:17 2000
Fri Oct 27 10:00:27 2000
Fri Oct 27 02:37:22 2000
MacOS Xサポートとバグ修正。
Sun Oct 1 00:43:34 2000
Tue Sep 19 23:47:44 2000
使われてないコードを削っただけのようです。
Tue Oct 10 16:11:54 2000
[ruby-list:25819]のバグ修正など。
Mon Nov 13 22:44:52 2000
Fri Nov 10 16:15:53 2000
Mon Nov 6 1:22:49 2000
proc{|a|}.arity
が-2から-1になった。([ruby-dev:11115]からのスレッド参照。)
他はバグ修正などだと思います。
Fri Nov 17 02:54:15 2000
Thu Nov 16 10:23:24 2000
Wed Nov 15 19:33:20 2000
Mon Nov 6 1:22:49 2000
Fri Oct 20 07:56:23 2000
Tue Oct 17 17:30:34 2000
Tue Oct 17 12:48:20 2000
Mon Oct 16 15:37:33 2000
Mon Oct 16 01:02:02 2000
Sat Oct 14 03:32:13 2000
Wed Oct 11 22:15:47 2000
Wed Oct 11 18:13:50 2000
Wed Oct 11 11:13:03 2000
Sun Oct 8 13:20:26 2000
Fri Oct 6 12:50:52 2000
Wed Oct 4 00:26:11 2000
FileTest.sizeがFile.sizeと同じように空のファイルで0を返すようになった。 (存在しないファイルでFile.sizeと同じように例外Errno::ENOENTを発生するようになった。) 古い挙動には size? を使ってください。([ruby-dev:11607])
Sun Oct 15 01:49:18 2000
Tue Oct 10 09:49:23 2000
mallocやfreeの安全性を高めたようです。
Sat Nov 11 22:37:36 2000
Fri Oct 6 12:50:52 2000
IOのtaintチェックがついてsafe levelが4以上だとuntainted IOでgetsなどができなくなりました。
Fri Nov 17 02:54:15 2000
Mon Nov 13 19:02:08 2000
Thu Nov 9 14:22:13 2000
Wed Nov 8 03:08:53 2000
marshalの強化のようです。
Tue Oct 31 17:27:17 2000
[ruby-dev:11501]に「to_iは整数化に使われていましたが、今度導入したto_intはNUM2INTでの整数化だけに使われます。to_sとto_strの関係と言えば分かるでしょうか?」とあります。 そうなっていなかったのを修正したようです。([ruby-dev:11503])
Fri Nov 10 16:15:53 2000
バグ修正だけのようです。
Mon Oct 16 15:37:33 2000
Mon Oct 16 14:25:18 2000
Thu Oct 12 00:03:02 2000
Wed Oct 11 22:15:47 2000
Thu Oct 5 18:02:39 2000
Thu Oct 19 14:58:17 2000
Tue Oct 17 16:36:28 2000
Mon Oct 16 14:06:00 2000
[ruby-list:25674]からのスレッドの修正など。
Sat Nov 11 22:57:38 2000
Fri Nov 10 16:15:53 2000
Sat Oct 28 23:54:22 2000
Mon Oct 16 01:02:02 2000
Wed Oct 11 11:13:03 2000
Fri Oct 6 12:50:52 2000
[ruby-list:25919]のmswin32版とdjgpp版のsystemで$?
が256倍されていないバグ修正など。
Mon Nov 13 19:02:08 2000
Sun Oct 15 01:49:18 2000
srandはsafe levelが4以上の場合は禁止になった([ruby-dev:11478])。 randにFloatを渡したときの処理のバグを修正([ruby-dev:11369]からのスレッド)。
Sat Nov 11 22:57:38 2000
Thu Nov 2 18:01:16 2000
Thu Sep 28 14:57:09 2000
ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC, ATOMIC_DEC, RUBY_CRITICALが増えて、 TRAP_BEG, TRAP_ENDが新しくなった。
Sat Nov 11 22:37:36 2000
Fri Nov 17 14:55:18 2000
Sat Oct 7 15:10:50 2000
Mon Oct 2 05:28:58 2000
Thu Oct 12 00:03:02 2000
Time#dst?が追加された。(Time#isdstと同じ)
Mon Nov 6 1:22:49 2000
dbmを1回で開けなくて別の開き方を試すときのmodeが0になった。
Thu Nov 16 14:58:00 2000
Tcl/Tk 8.4対応。
[ruby-ext:01398]の変更。 [ruby-list:26135]の変更。
[ruby-dev:11166]からのスレッドの変更。
Thu Oct 12 01:23:38 2000
[ruby-dev:11207]の変更(catchpoint対応)。 [ruby-dev:11158]の変更。
rescue Errno::ENOENTが追加されている。
_regex_quoteと_expand_chの高速化。
lib/net/imap.rbが追加された。
imap.rb以外は Project Softicaの netlibを 見てください。 添付されているバージョンは1.1.29から1.1.31になったようです。
Sat Nov 18 14:07:20 2000
Thu Nov 16 23:06:07 2000
Sat Nov 11 08:34:18 2000
Tue Nov 7 20:29:56 2000
Thu Oct 26 02:42:50 2000
Mon Oct 16 06:39:32 2000
Thu Oct 12 18:56:28 2000
Wed Oct 11 14:29:51 2000
[ruby-list:25538]からのスレッドの変更。
[ruby-dev:11160]の修正(ファイルが小さくならなかったバグ修正)。
頑丈にした([ruby-dev:11216])のと使用例の追加。
[ruby-dev:11259]からのスレッドの修正。
[ruby-list:25393]からのスレッドの修正。
謎の変更。
diff -u -r1.2 -r1.3 --- sample/from.rb 1999/08/13 05:45:19 1.2 +++ sample/from.rb 2000/10/10 07:03:36 1.3 @@ -50,8 +50,8 @@ $outcount = 0; def fromout(date, from, subj) return if !date - y = m = d = 0 y, m, d = parsedate(date) if date + y ||= 0; m ||= 0; d ||= 0 if from from.gsub! /\n/, "" else
NameErrorがStandardErrorのサブクラスではなくなったことへの対応のようです。
diff -u -r1.1.1.1 -r1.2 --- sample/occur2.rb 1998/01/16 12:13:08 1.1.1.1 +++ sample/occur2.rb 2000/10/02 07:48:41 1.2 @@ -5,7 +5,7 @@ for word in $_.split(/\W+/) begin freq[word] = freq[word] + 1 - rescue + rescue NameError freq[word] = 1 end end
[ruby-dev:11510]の変更。
テストの追加。
[ruby-list:25919]のmswin32版とdjgpp版のsystemで$?
が256倍されていないバグ修正の他に、
スレッド関係やソケット関係でもたくさん修正があるようです。
Thu Nov 16 14:58:00 2000
Mon Nov 13 19:02:08 2000
Sat Nov 11 22:37:36 2000
proc{|a|}.arity
が-2から-1になった。
$?
が256倍されていないバグが修正された。
*1気分によって「ですます調」だったり「だである調」だったりしますが気にしてはいけません。
どんどんファイルが大きくなっていったり最後まで読み終わらないと最新の情報が見えなかったりするのも気にしてはいけません。
*2絶対あるはず。
*3理由は[ruby-dev:10340]参照。
*4/[\/]/
にしないといけない。
*5s = s.id2name if s.is_a? Fixnum
のようなコードは
s = s.id2name unless s.is_a? String
に変更する必要がある。
*6perlのsやmについては[ruby-list:22575]に表があります。
*7configure時のオプション--with-default-kcode=CODEで変更できる。
*8wのBER(Basic Encoding Rules)については[ruby-list:22451]のスレッド参照。