Ruby 1.8.7-preview1 has been released

knu さんからアナウンスが出ました。

 Ruby 1.8.7-preview1 をリリースしました。伸び伸びのスケジュール
ながら、辛抱強くご協力いただいたみなさんに感謝します。

 本リリースには、1.8.6リリース以降見つかった数多くのバグの修正、
組み込みクラスの機能充実、標準ライブラリの更新、パフォーマンスの
改善等が含まれています。

 ソースファイルは以下のURLで取得できます。

	ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-preview1.tar.bz2
	ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-preview1.tar.gz
	ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-preview1.tar.zip

チェックサム情報:

	MD5 (ruby-1.8.7-preview1.tar.bz2) = a916996720d8891f4f0bf0c9fbb5bb6c
	SHA256 (ruby-1.8.7-preview1.tar.bz2) = e432ab1ab9b4570c0b7fe5c0c2730de0fda4c49a47811ea3a9170a311cf110b9
	SIZE (ruby-1.8.7-preview1.tar.bz2) = 4007006

	MD5 (ruby-1.8.7-preview1.tar.gz) = 522b8a1dffb04984a602d1d85b355a1a
	SHA256 (ruby-1.8.7-preview1.tar.gz) = 19f17c9546a61dddf1a44d5f9b460e34a01440195b5375ce70000f89fa425f68
	SIZE (ruby-1.8.7-preview1.tar.gz) = 4705632

	MD5 (ruby-1.8.7-preview1.zip) = a754af64daa0613055b58813da50cd7d
	SHA256 (ruby-1.8.7-preview1.zip) = 45fbbf34f04a750cf72d5e9a8a23412a57fd933dd077d3f23fd7be62e3478b32
	SIZE (ruby-1.8.7-preview1.zip) = 5788496


 ユーザから見える変更点のリストは NEWS, 時系列に沿った全変更点の
リストは ChangeLog に記述されています。

	http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7_preview1/NEWS
	http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7_preview1/ChangeLog


 使ってみて問題を見つけた場合は ruby-dev ML ないしは以下のBTSに
報告してください。

	http://rubyforge.org/tracker/?atid=22040&group_id=426&func=browse

 既知の問題としてすでにここに挙げてあったり、解決されていたり
することがあるので、報告の前に「Status」を「Any」にして全件表示
してチェックしてください。


 次のプレビュー(preview2)は来週土曜日を予定しています。今度は
スケジュールを守れるよう一層努力しますのでよろしくお願いします。

NEWS を見ると結構 1.8.6 から変更されてますね。へたれ訳してみますが、怪しいところは末尾に(?)ついてます & 一気にできないのでチョコチョコと。

  • ライブラリの更新
    • 新規に追加されたもの
    • 組み込みクラス
      • Array#nitems がブロックを取れるようになった。ブロックは、要素が非nilかどうかをチェックする変わりにその要素が数えられるべきかどうかの判断に使用される
      • Array#flatten, Array#flattern! が flattern する際の再帰レベルを定義するオプション引数を取れるようになった
      • Array#index, Array#rinde が引数の変わりにブロックを取るようになった(?)
      • Array#collect!, Array#map!, Array#each, Array#each_index, Array#reverse_each, Array#reject, Array#reject!, Array#delete_if はブロックが無い場合に enumerator を返すようになった(注:1.9 と異なり、#map, #collect は互換性のため Array を返す)
      • Array#pop, Array#shift は削除する要素数を指定するためのオプション引数を取れるようになった
      • Array#choice, Array#combination, Array#cycle, Array#drop, Array#drop_while, Array#permutation, Array#product, Array#shuffle, Array#shuffle!, Array#take, Array#take_while がメソッドとして追加された
      • Dir#each, Dir#foreach はブロックが無い場合に enumerator を返すようになった
      • クラス Enumerable::Enumerator が追加され、enumerator ライブラリによって定義される様々な enumeration に用いられる
      • Enumerable#each_slice, Enumerable#enum_slice, Enumerable#each_cons, Enumerable#enum_cons, Object#to_enum, Object#enum_for の各メソッドが追加され、enumerator ライブラリによって定義される様々な enumeration に用いられる
      • Enumerable#count, Enumerable#cycle, Enumerable#drop, Enumerable#drop_while, Enumerable#find_index, Enumerable#first, Enumerable#group_by, Enumerable#max_by, Enumerable#min_by, Enumerable#minmax, Enumerable#minmax_by, Enumerable#none?, Enumerable#one?, Enumerable#take, Enumerable#take_while の各メソッドが追加された
      • Enumerable#find, Enumerable#find_all, Enumerable#partition, Enumerable#reject, Enumerable#select, Enumerable#sort_by はブロックが無い場合に enumerator を返すようになった(注:1.9 と異なり、#map, #collect は互換性のため Array を返す)
      • Enumerable#inject はブロックの変わりにバイナリ演算子を受け付けるようになった
      • Enumerable#reduce は #inject の新たなエイリアスとして追加された
      • Hash#delete_if, Hash#each, Hash#each_key, Hash#each_pair, Hash#each_value, Hash#reject! Hash#select, ENV.delete_if, ENV.each, ENV.each_key, ENV.each_pair, ENV.each_value, ENV.reject!, ENV.select はブロックが無い場合に enumerator を返すようになった
      • GC.stress, GC.stress= の各メソッドが追加された
      • Integer#ord, Integer#odd?, Integer#even?, Integer#pred の各メソッドが追加された
      • Integer#downto, Integer#times, Integer#upto はブロックが無い場合に enumerator を返すようになった
      • IO#each, IO#each_line, IO#each_byte, IO.foreach, ARGF.each, ARGF.each_line, ARGF.each_byte はブロックが無い場合に enumerator を返すようになった
      • Method#receiver, Method#name, Method#owner の各メソッドが追加された
      • Numeric#step はブロックが無い場合に enumerator を返すようになった
      • Object#tap が実装された
      • ObjectSpace.each_object はブロックが無い場合に enumerator を返すようになった
      • Process.exec が実装された
      • Range#each, Range#step はブロックが無い場合に enumerator を返すようになった
      • Regexp.union はパターン配列を受け付けるようになった
      • String#chars, String#each_char, String#partition, String#rpartition, String#start_with?, String#end_with? の各メソッドが追加された。#index, #rindex, #include? と異なり、$KCODE を認識する
      • String#each_byte, String#each, String#each_lines, String#gsub(pattern) はブロックが無い場合に enumerator を返すようになった
      • 例外クラス StopIteration が追加された。Kernel#loop が停止された際に raise される
      • Struct#each, Struct#each_pair はブロックが無い場合に enumerator を返すようになった
      • Symbol#to_proc が実装された
    • enumerator
      • Enumerator is now a built-in module. The #next and #rewind methods are implemented using the "generator" library. Use with care and be aware of the performance loss.
    • ipaddr
      • New methods - IPAddr#<=>, IPAddr#succ - IPAddr objects are now comparable and enumerable having these methods. This also means that it is possible to have a Range object between two IPAddr objects.
      • IPAddr#to_range メソッドが追加された。ネットワークアドレスの Range オブジェクトを生成する
      • Type coercion support - IPAddr#&, IPAddr#|, IPAddr#==, IPAddr#include? - These methods now accept a string or an integer instead of an IPAddr object as the argument.
    • openssl
      • OpenSSL::PKey::EC, OpenSSL::PKey::EC::Group, OpenSSL::PKey::EC::Point, OpenSSL::PKey::PKCS5, OpenSSL::SSL::Session の各クラスを追加
      • Documentation! - Various new methods (see documentation).
      • Cipher, Digest, PKCS7, PKCS12 内の冗長なモジュール名前空間を削除。 互換性を維持するためにクラスは提供されるものの、1.9 では削除される予定。
    • shellwords
      • Add methods for escaping shell-unsafe characters: Shellwords.join, Shellwords.escape, Array#shelljoin, String#shellescape
      • Add shorthand methods: Shellwords.split (alias shellwords), String#shellsplit
    • tempfile
      • Tempfile.open と Tempfile.new が一時ファイルを作成する際のサフィックスを受け付けるようになった。サフィックスを指定するには最初の引数として [basename, suffix] という配列を渡すこと。
      Tempfile.open(['image', 'jpg']) { |tempfile| ... }
    • rss
      • 0.1.6 -> 0.2.4
      • Fix image module URI
      • Atom をサポート
      • iTunes モジュールをサポート
      • Slash モジュールをサポート
      • content:encoded with RSS 2.0 support
  • Compatibility issues (excluding feature bug fixes)
    • tempfile
      • ファイル名の書式が変更された。デフォルトでは一時ファイル名にドット(.)はもはや含まれない。サフィックスの指定方法に関しては前述の通り。
      • tmpdir - New method: Dir.mktmpdir
  • 1.8.5 以降の変更点
    • 新たなプラットフォーム/ビルドツールをサポート
      • IA64 HP-UX
      • Visual C++ 8 SP1
      • autoconf 2.6x
    • Library updates (outstanding ones only)
      • builtin classes - New method: Kernel#instance_variable_defined?, New method: Module#class_variable_defined?, New feature: Dir::glob() can now take an array of glob patterns.
      • date - date2 4.0.3 ベースに更新された
      • digest - C と Ruby 用の新たな内部 API
      • autoloading のサポート
      require 'digest'

      # autoloads digest/md5
      md = Digest::MD5.digest("string")
      • New digest class methods: file
      • New digest instance methods: clone, reset, new, inspect, digest_length (alias size or length), block_length()
      • New library: digest/bubblebabble
      • New function: Digest(name)
    • fileutils
    • nkf
      • 2007-01-28 の nkf ベースに更新
    • thread
      • より高速な C による mutex 実装に置き換えられた。以前の遅いものの安定している実装は configure のオプションとして --disable-fastthread を指定すれば利用可能。
    • tk
      • Tile 0.7.8 ベースの Tile 拡張サポート
      • Tcl/Tk の X11 非対応バージョンのために --without-X11 configure オプションがサポートされた
      • サンプルスクリプト irbtkw.rbw(Ruby/Tk 上の irb) が追加された。Windows 上で STDIN がブロックされる問題はこれでは発生しない
  • Compatibility issues (excluding feature bug fixes)
    • 組み込みクラス
      • String#intern は $SAFE レベルが 1 以上の場合に SecurityError 例外を発生するようになった
    • date
      • Time#to_date, Time#to_datetime がプライベートメソッドとして追加された。これにより Rails 1.2.2 以前で使用されている ActiveSupport の 1.4.1 以前と名前衝突が発生するため、ActiveSupport または Rails をこの問題が修正されている最新バージョンに更新すること。
    • digest
      • コンストラクタは feed のための初期化文字列を取らなくなった。移行方法は以下を参照のこと:
      # Before
      md = Digest::MD5.new("string")
      # After (works with any version)
      md = Digest::MD5.new.update("string")
        
      # Before
      hd = Digest::MD5.new("string").hexdigest
      # After (works with any version)
      hd = Digest::MD5.hexdigest("string")
    • fileutils
      • 些細な修正により Rake の 0.7.1 以前が上手く動かない。Rake を 0.7.2 以上にアップデートすること。
    • tk
      • Tk::X_Scrollable (Y_Scrollable) が Tk::XScrollable (YScrollable) に名称変更された。Tk::X_Scrollable (Y_Scrollable) も使用可能だが単なる別名である。