Japanese follows; 日本語はあとで

Hello all --

We are pleased to announce the release of Ruby 2.0.0-preview2.
Please try it and give us feedback on anything you notice.

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.tar.bz2
  SIZE:   10722295 bytes
  MD5:    a645a783c3302cc094a9963a5e700a4d
  SHA256: cea98c000a113f10cb7d55753c759da1f1baa7ca9b3edf75fc19fa5f44bf71a0

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.tar.gz
  SIZE:   13471954 bytes
  MD5:    eaddcbf63dc775708de45c7a81ab54b9
  SHA256: 03d15c7c643f737906c7736820bf4d6f3a71aa8f1dce343284240fee5665f970

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.zip
  SIZE:   14987310 bytes
  MD5:    faded4edd05e6ecf86d37c94345f3ace
  SHA256: bdf26f073e3bdbe2098858349cda0898537b0977c43614bb4aca18310511cdfe


## New features in 2.0.0

  - Refinements
  - Keyword arguments
  - Enumerable#lazy
  - Module#prepend
  - #to_h: Convention for conversion to Hash
  - %i: a literal for symbol array
  - regexp engine was changed to Onigmo
  - DTrace support
  - TracePoint

.. and more improvements.  See NEWS for details.

Here are some introductory articles by third parties:

  - https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails
  - http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features/
  - http://www.infoq.com/news/2012/11/ruby-20-preview1
  - http://timelessrepo.com/refinements-in-ruby (Refinements)
  - http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html (in Japanese)
  - https://speakerdeck.com/nagachika/rubyist-enumeratorlazy
(Enumerator::Lazy, in Japanese)

(If you volunteer to provide additional articles, we may cite or refer to
 them in the next release announcement.)


## Notes

### Unimplemented new features

We are planning to include the features shown in the following URL, but
they are not implemented, or need more discussion.

  - http://bugs.ruby-lang.org/projects/ruby-trunk/issues?query_id=94

Especially, the spec of refinement [#4085] is still actively being discussed
and may change for the official release.


### Incompatibilities

There are four notable incompatibilities we know:

  - The default encoding for ruby scripts is now UTF-8 [#6679].  Some people
    report that it affects existing programs, such as a some benchmark
    programs that have become very slow [ruby-dev:46547].
    The spec may change for the official release.

  - String#lines, #chars, #codepoints, and #bytes now returns an Array
    instead of an Enumerator [#6670].  You should instead use each_line (or
    the corresponding each_*).  This is the decision; the methods will
    eventually change someday.  However, if the impact is practically bigger
    than we expect, 2.0.0 may include only a warning, instead of changing
    the behavior.

  - iconv was removed.  It was deprecated for ruby 1.9.x.  You should use
    the M17N features instead like String#encode.

  - There is ABI breakage [ruby-core:48984].  We think that normal
    users can/should just reinstall extension libraries.
    You should be just aware "DO NOT COPY .so OR .bundle FILES FROM 1.9".

There are some comparatively small incompatibilities. [ruby-core:49119]
[ruby-core:48450]
Please report another incompatibilities if you notice.

FYI: We are creating upgrade notes, but some parts are already outdated.

  - http://bugs.ruby-lang.org/projects/ruby/wiki/200UpgradeNotesDraft


## Main differences from 2.0.0-preview1

  - require is faster [#7158]
  - Rake was updated to 0.9.5 [#7256]
  - RDoc was updated to 4.0 [#7426]
  - RubyGems was updated to 2.0 [#7427]
  - minitest was updated to 4.3.2
  - The default script encoding was changed to UTF-8 [#6679]
  - libyaml was embedded [#7375]
  - DTrace support was implemented [ruby-core:27448]
  - Enumerator#size was introduced [#6636]
  - Array#shift/unshift are faster [#6638]
  - String#lines, #chars, etc. was changed to return an Array [#6670]
  - hash algorithm was changed to siphash

(The list was made based on ruby trunk changes [1].)

[1] http://d.hatena.ne.jp/nagachika/searchdiary?word=%2A%5Bchanges%5D


## Upcoming mile stones

I'd like to set the code freeze to "23 Dec."
I'll announce the concrete release plan in a few days.

  - code freeze: 23 Dec.
  - 2.0.0-rc1 release: 1W Jan. (expected)
  - 2.0.0-rc2 relaase: 1W Feb. (expected)
  - 2.0.0-p0 release: 24 Feb.


## Special thanks

First, we appreciate all who try preview1!
I'm grateful for all the committers' hard work to implement the new
features in time for preview2.
(Those who missed preview2 should work harder until code freeze.)
Finally, Denoit Daloze and Eric Hodel kindly reviewed the draft of this
announcement.  Thank you!



Ruby 2.0.0-preview2 をリリースします。
ぜひお試しいただき、気づいたことは何でもフィードバックしてください。

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.tar.bz2
  SIZE:   10722295 bytes
  MD5:    a645a783c3302cc094a9963a5e700a4d
  SHA256: cea98c000a113f10cb7d55753c759da1f1baa7ca9b3edf75fc19fa5f44bf71a0

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.tar.gz
  SIZE:   13471954 bytes
  MD5:    eaddcbf63dc775708de45c7a81ab54b9
  SHA256: 03d15c7c643f737906c7736820bf4d6f3a71aa8f1dce343284240fee5665f970

* http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-preview2.zip
  SIZE:   14987310 bytes
  MD5:    faded4edd05e6ecf86d37c94345f3ace
  SHA256: bdf26f073e3bdbe2098858349cda0898537b0977c43614bb4aca18310511cdfe


## 2.0.0 の新機能

  - Refinements
  - キーワード引数
  - Enumerable#lazy
  - Module#prepend
  - #to_h: Hash への変換メソッド
  - %i: シンボルの配列のリテラル
  - 正規表現エンジンを Onigmo に変更
  - DTrace サポート
  - TracePoint

その他改善多数。詳しくは NEWS をご覧あれ。

サードパーティによる紹介記事があります。

  - https://speakerdeck.com/a_matsuda/ruby-2-dot-0-on-rails
  - http://globaldev.co.uk/2012/11/ruby-2-0-0-preview-features/
  - http://www.infoq.com/news/2012/11/ruby-20-preview1
  - http://timelessrepo.com/refinements-in-ruby (Refinements)
  - http://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html (in Japanese)
  - https://speakerdeck.com/nagachika/rubyist-enumeratorlazy
(Enumerator::Lazy, in Japanese)

(他にも記事を書いて頂けると、今後のリリースアナウンスで引用や参照をさせて
 頂くかも)


## 注意点

### 未実装の機能

以下の URL に掲載されている機能は、未実装か、まだ議論が必要なものです。

  - http://bugs.ruby-lang.org/projects/ruby-trunk/issues?query_id=94

特に、refinement の仕様 [#4085] は活発に議論されており、公式リリースまでに
変化する可能性があります。


### 非互換

特筆すべき非互換を 4 つ把握しています。

  - デフォルトのスクリプトエンコーディングが UTF-8 になりました [#6679] 。
    これは既存のプログラムに影響を与えることが報告されています。例えば、
    ベンチマークプログラムが非常に遅くなるなど [ruby-dev:46547] 。
    公式リリースまでに仕様が変化するかもしれません。

  - String#lines, #chars, #codepoints, #bytes が enumerator ではなく配列を
    返すようになりました。#each_line (または対応する each_*) を代わりに
    使用してください。これは決定事項で、いつかはなされる変更です。しかし
    もし実用上の影響が予想より大きい場合は、2.0.0 では挙動は変えず、警告
    だけとするかもしれません。

  - iconv が削除されました。元々 deprecated なものでした。M17N の機能で
    ある String#encode などを使って書き換えてください。

  - ABI 互換性がなくなっています [ruby-core:48984] 。通常のユーザは、拡張
    ライブラリを再インストールするだけでよいはずです。「1.9 の .so, .bundle
    ファイルをコピーするな」とだけ気をつけてください。

他にも比較的小さな非互換があります。[ruby-core:49119] [ruby-core:48450]
さらに非互換に気づいたらぜひ報告してください。

ご参考: 以下にアップグレードガイドを作成中ですが、すでに一部内容が古いです。

  - http://bugs.ruby-lang.org/projects/ruby/wiki/200UpgradeNotesDraft


## 2.0.0-preview1 からの主な差分

  - require が高速化された [#7158]
  - Rake が 0.9.5 に更新された [#7256]
  - Rdoc が 4.0 に更新された [#7426]
  - Rubygems が 2.0 に更新された [#7427]
  - minitest が 4.3.2 に更新された
  - デフォルトのスクリプトエンコーディングが UTF-8 になった [#6679]
  - libyaml が組み込みになった [#7375]
  - DTrace サポートが実装された [ruby-core:27448]
  - Enumerator#size が導入された [#6636]
  - Array#shift/unshift が高速化された [#6638]
  - String#lines や #chars などが配列を返すようになった [#6670]
  - ハッシュアルゴリズムが siphash に変更された

(このリストは ruby trunk changes [1] を元に作成しました)

[1] http://d.hatena.ne.jp/nagachika/searchdiary?word=%2A%5Bchanges%5D


## 今後の予定

コードフリーズを 12/23 にしたいと思います。
具体的なリリースプランは数日のうちにアナウンスします。

  - コードフリーズ: 12/23
  - 2.0.0-rc1 リリース: 1 月第一週 (期待)
  - 2.0.0-rc2 リリース: 2 月第一週 (期待)
  - 2.0.0-p0 リリース: 2/24


## Special thanks

まず、preview1 を試してくれた皆さんに感謝します
また、preview2 に間に合うように頑張ってくれたコミッタのみなさんに感謝します。
(間に合わなかった人はコードフリーズまで頑張ってください)
Denoit Daloze と Eric Hodel がこのアナウンス文案をレビューしてくれました。
ありがとうございます。

-- 
Yusuke Endoh <mame / tsg.ne.jp>