じゃあ早速質問。
1. ブロッククロージャの実行環境というのは
無名のメソッドコンテキストであるという理解でいいのですか?
この場合ブロッククロージャ内に現れるselfの実体は何になるのでしょうか。

2. ブロッククロージャ内で出現する ^ は引数がどんなオブジェクトであれ
現在のメソッドコンテキストを消滅させ、直前のメソッドコンテキストに処理が戻る
という考え方は一般的でしょうか?

3. しかしvalueWithExitの実装を見ると^nil が非常に特殊なものであるように見えます。
これはバイトコンパイルする時に引数がnilである場合にのみ命令の置き換えをしているということでしょうか?