2007-06-22 [長年日記]
λ. “Coroutines in Lua” by Ana Lúcia de Moura, Noemi Rodriguez and Roberto Ierusalimschy
遠藤さんの[ruby-dev:30986]を読んで、読んでみた。
コルーチンのモデルには、全てのコルーチンが対等に呼び出しあう対称コルーチンと、親子関係があって子は親に制御を返すことしか出来ない非対称コルーチンがある。 対称コルーチンと非対称コルーチンの表現力は相互に比較不可能と言われているけど、実は同じらしい。へぇ(3)。しかし、非対称コルーチンの方が単純さや実装のポータビリティの点で優れているので、Luaでは非対称コルーチンのみをサポートしていると。
確かに操作的意味論は単純だし、これを読んでるとなんだか「RubyのFiberもLuaと同じようにすれば良いのに」とか思えてきてしまう。洗脳されてしまった。
あと、対称コルーチンと非対称コルーチンの関係が継続と部分継続の関係に似ているという話は面白かった。ただ、非対称コルーチンの場合にも部分継続と同様の点が少し気になる。具体的には、部分継続の場合の「どこまで切り取るか」という点に対応して、yieldでどのresumeに制御を移すかという点。この操作的意味論だとyieldで制御が渡る先はダイナミックスコープで決まっているけど、それで本当に十分? 部分継続の方では議論が収束気味らしいので、こっちでも結論は出てるのかも知れないけどさ。