今更

びっくりするくらい時流に乗れていない僕のことですから全く関知していなかったのですが、Javaクロージャが入るとか入らないとかいう話でこんなのが出てたんですね(ひょっとすると、これももはや最新ではないかも知れません)。個人的には、わざわざ(恐らく javac の仕事を増やすことで)クロージャを導入しなくたって、コールバック用のインターフェイスと、プリミティブ型の mutable なラッパ(ないし汎用の ref のようなもの)を java.lang にでも放り込んだらそれでいいんじゃないかと思ってます。が、まぁ確かにクロージャは流行ってるし、あったら便利ではあるので、採用の流れなのかな。(にしても、クロージャが OK なら goto も許可すべきだと思うんですけど。)
で、上でリンクした文書を斜め読みしたところ、“Non-local transfer”なる気になる一節が。要は、

for (;;) {
    void() closure = () { break; };
    closure();
}

で for ループを抜けられるとか、

int hoge() {
    void() closure = () { return hoge: 1; };
    closure();
    return 0;
}

で 1 が返るとか、そういう感じらしい。どうやって実装するのか謎ですが(例外なのかなぁ)。ちなみに、たとえば 2 番目の例の場合、すでに hoge() の実行が終わっていた(あるいは実行が別スレッドで行われていた)ら、クロージャ内の return 文はコケるらしいです。ということは

<T> T callCC(T(void(T)) f) {
    return f((T v) { return callCC: v; });
}

とかはダメなわけですね。いや別に残念じゃないんですけどね。