約束どおり、Ruby 1.9を2007年のクリスマスに発表した(source)。
以前は臨時のマイナーバージョンを備えたRubyのバージョンナンバーは試験的なバージョンを意味していた。従って、Ruby1.8が製品バージョンの間はずっとRuby1.7は試験的なバージョンだった。この実装は製品使用として準備が整うまでにはまだしばらく時間がかかるが、Ruby1.9.0の出現でRuby1.9が試験的とはみなされなくなるため、Rubyの主要チームはこれを変更した。まつもと氏は1.9の安定性は改善していると断言した。これ以上試験的な機能が追加されずに、現在も言語を安定させるべきである。Railsを含む主要なRuby製品はすでにRuby1.9との互換性に取り組んでいる。より詳しい情報は以下を参照してほしい。
Ruby1.9は多くの変更や新しい機能を備えている。これらの多くは評判もよく、例えば、特にいらないものは排除するといった新しいリテラルハッシュ値構文などである。=> ハッシュ値議論を引き起こす方式と呼ばれるもので、以下のようなものである。
link_to :controller => 'People', :action => "list"このように記すこともできる。
link_to controller: fred, action: "list"
Ruby 1.8と1.9の違いを記してある一番のソースは、Mauricio Fernandez氏が記した(source)長いリストである。Mauricio氏は2年間かけてじっくりとその違いを追跡してきた。そして最近、subversionの変更ログから自動的にリストを抽出し(source)、発表した。
また、Ruby GemsやRakeのようなキーとなる外部ツールが、今では標準的なライブラリの一部になっているのが興味深い。
たぶん一番の変更は内部構造だろう。Ruby 1.9は(笹田耕一氏が開発した)YARVと呼ばれるRubyのVMを使用しており、それは以前からある、まつもと氏が実装していた抽象構文木(AST)のインタプリタよりもはるかに効率的である。YARVも並列実行スレッドの変更機能を持っている。Rubyは現在カーネルスレッドを使用しており(Rubyコードはグローバルインタプリタロックの影響で並列動作はしないが)、Fiberと呼んでいる軽量スレッド機能で「Continuation(継続の機能)」を更新して(source)、RubyにCoroutine(関数)を持ってきている。
一方、Ruby 1.9はRuby 1.8の完全な互換性は実現していない。いくつかの(用語の)意味が変更となった。例えば、ブロック引数とは1.8ではブロックローカル引数の意味だが、1.9では少し意味が異なってきた。この変更は、多くの既存のRubyプログラムがRuby 1.9を利用するために、若干の手直しが必要であるということを意味している。
Rubyの本の著者たちは大変になるだろう。Rubyの達人プログラマ達は、「Programming Ruby」の第3版(source)、またの名を「Pickaxe(つるはし)」を現在執筆中である。これは、達人達が行っているプログラミング上の慣例を、ベータプログラムの下で利用できるようにしている書籍である。
オライリーもまた、David Flanigan氏とまつもとゆきひろ氏の共著である「The Ruby Programming Language」(source)を2008年1月に出版予定である。これは、Ruby 1.9をカバーするために更新され、まつもと氏の「Ruby in a Nutshell」を大幅に書き直したバージョンである。