エスケープ解析中断しています

エスケープ解析ですが、aoベンチに適用してみると、効果がなさそうなので中断しています。適用できる場所そのものは結構あるのですが、適用できるのがトップレベルに近い寿命の長いあまりアロケーションしないオブジェクトで、本当に適用して欲しいループの内部のオブジェクトに限って適用できないという感じです。ちょっと考えると作らなくても判るのかもしれませんが・・・

例えば、こんな感じのありがちのパターンでもうまく行きません。

  class Foo
    def initialize
       @bar = Bar.new  # これがヒープに取られる
    end
  end

  def test_foo
    a = Foo.new
    nil
  end

結局、オブジェクトの解放のタイミングとメソッドからリターンするタイミングが違うのが問題なのかなと思います。オブジェクトアロケーション用に別スタックを用意してオブジェクトの解放をメソッドのリターンとは異なるタイミングに設定できるようにするとうまく行くんじゃないかなと思っていますが、もうちょっと色々考える必要がありそうです。

結局、いいたいことはForthや6809は偉大だなということです。