Ruby の朝刊 ruby trunk changes より github.com
を発見したので proc.c を読んでみる。大枠では Proc や lambda、Binding に関する実装がしていることが分かった。たしかに実行コンテキストを保持する必要があるので、同じソースで実装するのもわかる気がするという感じだったが、デバッガー動かしながら詳細を見ないときちんと理解できなさそうだったので、Ruby をソースコードから build した。
$ sudo apt install -y build-essential libssl-dev libreadline-dev zlib1g-dev bison automake
$ autoreconf --install
$ ./configure --enable-debug-env CFLAGS="-O0 -g"
$ make
$ echo 'p = Proc.new { |x| x + 1 }; p.call(1)' > test.rb
$ gdb --args ./ruby test.rb
としデバッグを始めることができた(WSL2 Ubuntu)。Mac だと make が LDFLAG のせいで失敗していたので、この辺ちゃんと設定しないといけないのだろう。
時間が来てしまったので、いったんこの辺で今日は終わり。