HackerNews

ハッシュが文字列になるとき:Rubyの百万分の一メモリバグを追う

When Your Hash Becomes a String: Hunting Ruby's Million-to-One Memory Bug

https://mensfeld.pl/2025/11/ruby-ffi-gc-bug-hash-becomes-string/


この記事では、Ruby gemを維持する開発者が直面する理解不能なエラーを中心に、メモリ管理の異常が引き起こす問題について述べています。特に、FFIのバージョン1.17.0未満には書き込みバリアが不足しており、これがガベージコレクションに影響を及ぼし、内部のハッシュが異なるオブジェクトで置き換えられるという、稀でありながら壊滅的なエラーの原因とされています。開発者は、あるユーザーから報告されたエラー(Stringのインスタンスで#defaultメソッドが未定義とのエラー)を受けて、FFIの内部やRubyコードを徹底的に調査し、特にmusl libcを使用するDocker環境での問題点に着目した経緯が詳述されています。この記事は、Rubyのメモリモデルやバグ修正の展望についても触れています。