Rubyを開発したMatz氏が先週のBaruco (Barcelona Ruby Conference) で,Ruby MRIのバージョン2.1から世代別ガベージコレクション (Generational Garbage Collection/GC) に移行することを発表した。これによってRuby言語の大幅なパフォーマンス向上が期待できる。Ruby 2.1は年末までにリリースされる予定だ。
偶然にも同じ日,別の講演でGithubのVicent Martí氏は,Ruby MRIのガベージコレクション実装を強い調子で批判していた。氏は現行のマーク・アンド・スイープ (mark-and-sweep) アルゴリズムを "双頭の怪物 (2-headed monster) "と呼び,大規模なRubyシステムであるGithubがGCの制限によって何度となく影響を受けていることを説明した。
問題のひとつはマーキング・フェーズが遅いこと (アクティブなオブジェクトの識別で,オブジェクトグラフ全体がシーケンシャルに走査されるため。アプリケーションはその間,事実上の停止状態となる),もうひとつはスイーピング・フェーズが不正確で,実際にはC拡張によって使用されているRubyオブジェクトを開放してしまう場合があることだ。
氏はValgrindなどツールの利用や事前に静的解析を実施することで,これらの問題を最小化することができる,と説明した。その一方で,現状のRuby MRIのGC実装に根本的な欠陥がある点を強調し,JRubyやRubiniusがMRIと同じ機能セットを達成できた時点で,大規模なRubyシステムはそちらへ移行した方がよい,とも提言している。
New RelicのChris Kelly氏は自身の講演で,現行のGC実装の遅さについて同調するとともに,典型的なRailsアプリケーションは数十万のオブジェクトを伴って起動するため,GC実行のマーキングフェーズ中に何度も解析処理を行わなければならないことを指摘した。またNew Relicで実施したRuby GCベンチマークの結果として,Ruby 1.8から1.9の間に,ガベージコレクションの実行が48%削減されていることも合わせて報告した。
氏はこれを,MRI開発チームがこの領域で大きな改善を行ったことを示すものだ,としている。具体的には,発表されたような世代別ガベージコレクションへの移行 (Matz氏によると,マーキングフェーズ時間の半減が期待できる) である。
Ruby MRIのガベージコレクション実装については,英語のドキュメントがないことに批判的な意見もある。氏は自身のプレゼンテーションで,"Rare Are GC Talks" など資料の一覧を紹介した。
Matz氏が発表したRuby 2.1の拡張機能としては,他にも文字列サフィックス (複素数に "i",有理数に "r",凍結した文字列に "f") やRefinement (フル機能),RDoc生成の高速化 (約15%) などがある。