何でも屋エンジニアのブログ

ソフトウェア関連技術、コミュニティ、日々の雑貨

Ruby YJIT の `invariants.rs` を読んだ

ということで Rubyソースコードも読んでみようと思い、Ruby の朝刊

ruby-trunk-changes.hatenablog.com

を読み始めた。その中で yjit の invariants.rs が挙がっていたので読んでみた。

github.com

雰囲気でしかわからないが、いくつかの assumptions を置き、それらの assumptions が有効なのか無効なのかを追跡し、assumptions が無効だったら生成されたコードを無効化するという処理をしている。

assumptions はについては

  • Ruby の基本的な演算子はオーバーライドされない
  • 定数が再代入されていない
  • callable method entry に関するもの(おそらくあるメソッドが再定義されているか)
  • klass object が singleton class を持たない

などがある。

ということがわかった。

楽しいし、続ければ何か視野が広がることもあるだろうから朝刊読んで気になったところ調べてみるというのは Ruby の方でもやってみようと思う。