Ruby 2.1の公式リリースが公開された。待望されていた多数の改善の中にはガベージコレクタの大幅な変更も含まれ,将来的なパフォーマンスの向上を期待させている。
Ruby 2.1のガベージコレクタは世代別ガベージコレクションを実装したもので,RubyではこれをRGenGC(Restricted Generational Garbage Collection)と呼んでいる。これによって,従来のバージョンで使用されていた “マーク&スイープ” 方式の実装は置き換えられることになる。2013年4月にRuby開発者のKoichi Sasada氏が行ったプレゼンテーションによると,Ruby開発者たちには,保護されたオブジェクトと安全でないオブジェクトを同一ヒープ上で扱うことのできるGCアルゴリズムを実装するという課題があった。
新しいGCを使用するために,既存のCエクステンションをすべて書き直すというのは現実的ではない。そのためRGenGCでは,実装の一部としてライトバリア(Write-Barrier)が使用されている。RubyConf 2013のプレゼンテーションでSasada氏が説明したように,RGenGCは A) 世代別GCをまったく実装しない(Ruby 2.0以前のように),B) すべてのCエクステンションの書き換えが必要な世代別GCを実装する,という2つの選択肢のどちらでもない,第3の方法を提供しているのだ。
RGenGCはパフォーマンスの向上を達成しながら,同時に既存のエクステンションとの高い互換性を実現している。一般的なオブジェクトであるArrayやString, Hash, Object, Numericなどはいずれもライトバリアなので,RGenGCシステムのメリットを享受することが可能だ。内部および外部ライブラリに関する今後の開発によって,将来的にはさらなるパフォーマンスの向上も期待できる。
新しいガベージコレクションシステムだけが改善点ではない。RDoc 4.1.0やRubyGems 2.2.0,他にもいくつかのライブラリが更新されている。2.1の変更点に関する完全なリストは,プロジェクトのGitHubページにあるリリースノートで確認できる。