少し古いバージョンの Ruby のとある不具合調査を行い Ruby の C コード読んで、たまたまかもしれないけど割と読め楽しくて興味がでてきた
— ebi (@ebihara99999) 2025年2月28日
ということで Ruby のソースコードも読んでみようと思い、Ruby の朝刊
ruby-trunk-changes.hatenablog.com
を読み始めた。その中で yjit の invariants.rs が挙がっていたので読んでみた。
雰囲気でしかわからないが、いくつかの assumptions を置き、それらの assumptions が有効なのか無効なのかを追跡し、assumptions が無効だったら生成されたコードを無効化するという処理をしている。
assumptions はについては
- Ruby の基本的な演算子はオーバーライドされない
- 定数が再代入されていない
- callable method entry に関するもの(おそらくあるメソッドが再定義されているか)
- klass object が singleton class を持たない
などがある。
ということがわかった。
楽しいし、続ければ何か視野が広がることもあるだろうから朝刊読んで気になったところ調べてみるというのは Ruby の方でもやってみようと思う。