継続を定義できる言語

デバッガを作っていて

  1. ブレークポイントで止まり、コマンドモードに入る
  2. コマンドモードで別のブレークポイントを定義する
  3. continueコマンドを実行する
  4. 2で定義したブレークポイントが引っかからない

という問題が解決できずにいます。これを解決するには実行中のプログラムのバイトコードを書き換える必要があってそれは出来ないようです。*1
継続の中に入っているPCやリターンスタックを書き換えると実現できそうだと思います。でも現状はもちろん、将来も継続オブジェクトの内部構造にアクセスするためのメソッドが追加されるって可能性もゼロでしょう。Cで拡張ライブラリを作るか、処理系にパッチを当てる方法がありますが、余り面白くないです。

そういうことで、継続(callcc)をRuby/バイトコードのレベルで定義できないかなと考えています。バイトコードインタープリタRubyで作ったり、RubyのプログラムをCPS変換するとかすれば出来そうですが、速度が大幅に落ちてしまいます。

インタープリタを書かなくても継続が定義出来ないかなと考えています。そもそも、インタープリタを書かなくても継続が定義できる言語って無いんじゃないのかなとも思います。機械語なら出来そうですが、それでも68000の例外のバグとか考えると厳密には出来ないような気もします。

*1:もっとも、出来た場合すごいセキュリティホールになりえるような気もしますが。