Rubyの変更点

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>(英語)をみてください。

1.4から1.6への変更点

足りないものや間違いなどあれば*2掲示板、%ruby(IRC)、メールなどで教えてください。 [ruby-list:24985]も参照。

1.4.6より古い1.4系からのバージョンアップの場合は、filterからcollect!への変更やClass#module_functionがなくなった*3ことや/[/]/がエラーになる*4などの1.4系の途中での変更も注意が必要です。

コマンドラインオプション

-Xdirectory-Cdirectoryに変更になった。

環境変数

RUBYOPTRUBYLIB_PREFIXを参照するようになった。

リテラル

シンボル

シンボルのクラスがFixnumからSymbolになった。 *5

Rubyの文法

正規表現

変数

クラス変数

新機能。

可視性については[ruby-dev:10870]からのスレッド参照。 [ruby-dev:10677]からのスレッドもありますが、最終的な仕様とはちょっと違うかもしれません。

[ruby-dev:10906][ruby-dev:10903]にあるようにクラス変数は親から先に初期化した方が良いです。

制御構造

例外処理

組み込み変数

$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以外も同様。 usecTime::strftimeでは取り出せない。 Time::tv_usecまたはTime::usecで取り出す。 参考:[ruby-list:23707]

Date::new(year,month,day[,start])

古いDateはDate2で置き換えられた。 今後はrequire 'date2'の代わりにrequire 'date'としてDateを使うのが望ましい。

Marshal

require 'marshal'がobsolete。 [ruby-dev:10946]からのスレッド参照。

1.6.0から1.6.1への変更点

英語弱いのでChangeLogからわかったものだけ書いていきます。

ChangeLog

ChangeLogからの情報を中心に関連情報へのリンクもつけて紹介していきます。

eval.c

Wed Sep 20 14:01:45 2000

a.rb で require "a" するとデッドロック([ruby-dev:10981])などのデバッグ。

ruby.c (load_file)

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>

lib/find.rb (find)

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>

lib/net

Thu Sep 21 15:59:23 2000

netlibが1.1.29になった。 rubyのCVSだけ1.1.29になっててSofticaRAAは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>

File::lstat

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でチェックするようになったらしい。

ext/extmk.rb (install_rb): check whether libdir is directory or not.

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>

regex.c (PUSH_FAILURE_COUNT): avoid casting warning on alpha.

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>

ext/extmk.rb.in: don't use default $:

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>

lib/net/http.rb: too early parameter expantion in string.

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>

variable.c (rb_autoload_load): should not require already provided features.

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>

lib/net/protocol.rb, http.rb: typo.

Sun Sep 24 03:01:53 2000

[ruby-dev:11041]だけかと思ったら他にもあったみたい。

defines.h: #undef HAVE_SETITIMER on cygwin.

Mon Sep 25 00:35:01 2000

[ruby-list:24637]かな。

<URL:http://cvs.netlab.co.jp/cgi-bin/cvsweb/ruby/defines.h?r1=1.11&r2=1.12>

win32/win32.c (NtCmdGlob): substitute '\\' with '/'.

Mon Sep 25 13:31:45 2000

[ruby-list:25141]からのスレッドにある\があるとワイルドカードがきかなくなる問題の修正。 ([ruby-list:25164])

2000/09/25〜2000/09/27

内部的な変更だけのようなので途中は省略。

Wed Sep 27 18:40:05 2000

1.6.0から1.6.1への変更点のまとめ

net/httpのHTTPReadAdapterがHTTPResponseReceiverになった。

その他バグ修正や内部的な変更のようです。

1.6.1から1.6.2への変更点

詳細

README.EXT, README.EXT.jp

2000/10/05

[ruby-dev:11110]からのスレッドのパッチ。

Makefile.inなど

array.c

安全性を高めたのがメインのようです。

bignum.c

主に高速化だと思います。

configure.inなどのautoconf関係

MacOS Xサポートとバグ修正。

dln.c

使われてないコードを削っただけのようです。

error.c

[ruby-list:25819]のバグ修正など。

eval.c

proc{|a|}.arityが-2から-1になった。([ruby-dev:11115]からのスレッド参照。)

他はバグ修正などだと思います。

file.c

FileTest.sizeがFile.sizeと同じように空のファイルで0を返すようになった。 (存在しないファイルでFile.sizeと同じように例外Errno::ENOENTを発生するようになった。) 古い挙動には size? を使ってください。([ruby-dev:11607])

gc.c

mallocやfreeの安全性を高めたようです。

io.c

IOのtaintチェックがついてsafe levelが4以上だとuntainted IOでgetsなどができなくなりました。

marshal.c

marshalの強化のようです。

numeric.c

[ruby-dev:11501]に「to_iは整数化に使われていましたが、今度導入したto_intはNUM2INTでの整数化だけに使われます。to_sとto_strの関係と言えば分かるでしょうか?」とあります。 そうなっていなかったのを修正したようです。([ruby-dev:11503])

object.c

バグ修正だけのようです。

pack.c

parse.y

[ruby-list:25674]からのスレッドの修正など。

process.c

[ruby-list:25919]のmswin32版とdjgpp版のsystemで$?が256倍されていないバグ修正など。

random.c

srandはsafe levelが4以上の場合は禁止になった([ruby-dev:11478])。 randにFloatを渡したときの処理のバグを修正([ruby-dev:11369]からのスレッド)。

regex.c

rubysig.h, signal.c

ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC, ATOMIC_DEC, RUBY_CRITICALが増えて、 TRAP_BEG, TRAP_ENDが新しくなった。

string.c

struct.c

time.c

Time#dst?が追加された。(Time#isdstと同じ)

ext/dbm/dbm.c, ext/gdbm/gdbm.c, ext/sdbm/init.c

dbmを1回で開けなくて別の開き方を試すときのmodeが0になった。

ext/socket/socket.c

ext/tcltklib/extconf.rb

Tcl/Tk 8.4対応。

ext/tk/lib/tk*.rb

[ruby-ext:01398]の変更。 [ruby-list:26135]の変更。

lib/cgi.rb

[ruby-dev:11166]からのスレッドの変更。

lib/debug.rb, lib/tracer.rb

[ruby-dev:11207]の変更(catchpoint対応)。 [ruby-dev:11158]の変更。

lib/find.rb

rescue Errno::ENOENTが追加されている。

lib/jcode.rb

_regex_quoteと_expand_chの高速化。

lib/net/*

lib/net/imap.rbが追加された。

imap.rb以外は Project Softicanetlibを 見てください。 添付されているバージョンは1.1.29から1.1.31になったようです。

lib/open3.rb

[ruby-list:25538]からのスレッドの変更。

lib/pstore.rb

[ruby-dev:11160]の修正(ファイルが小さくならなかったバグ修正)。

lib/timeout.rb

頑丈にした([ruby-dev:11216])のと使用例の追加。

lib/cgi/session.rb

[ruby-dev:11259]からのスレッドの修正。

misc/ruby-mode.el

[ruby-list:25393]からのスレッドの修正。

sample/from.rb

謎の変更。

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

sample/occur2.rb

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

sample/svr.rb

[ruby-dev:11510]の変更。

sample/test.rb

テストの追加。

win32/*

[ruby-list:25919]のmswin32版とdjgpp版のsystemで$?が256倍されていないバグ修正の他に、 スレッド関係やソケット関係でもたくさん修正があるようです。

1.6.1から1.6.2への変更点のまとめ


上へ indexへ
copyright © 2000 ZnZ

*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]のスレッド参照。