ケイゾク(Call with Current Continuation(Call/CC))

ケイゾク。大好きです。渡部篤郎は天才です。堤幸彦最高です。ただ、残念ながらそのケイゾクではありません(爆)。コンピュータ言語の技術の一つである「継続(continution)」の話。

 ゲームのシーン管理において、「以前のシーンのスタックを捨てて別のシーンへジャンプする」というロジックが必要になりました。が、今悩んでいるのは「本当にそんなロジックが無ければならないのか?」という事です。
 これと同じ事を、最近の言語で取り入られ始められている*1「継続(continution)」の機能説明を読んだときにも感じました。もしかして同じ問題なのか? と思い、今までスルーしていた「継続」をちょっとしらべてみました。

 自分の中でまとめるにはまだ時間がかかる為、とりあえずサイト。

LoveRubyNet内「継続」より
http://i.loveruby.net/ja/rhg/cd/continuation.html
とりあえず「継続(というかcall/cc)」がなんなのか分かる。
何冊も本を書いていらっしゃるようで。実にわかりやすく簡潔な文章を書く方ですね。不勉強にも存じ上げませんでした。もっとたくさん学ばねばー。

継続の詳細な説明(書き途中)
http://www.shiro.dreamhost.com/scheme/docs/cont-j.html

読んでいて思うのは、つまるところ、技術としてはあるけども、難しいからあまり使うなって事なんでしょうか。C言語のsetjmp/longjmpでも似たような議論がよく出ますね。

setjmpとlongjmpは、C言語の標準ライブラリ関数で、setjmpを実行した時点でスタックを保存する事が出来て、longjmpを実行するとsetjmpした所に戻る事が出来るという物です。使い方が分からないと言う人は、まずそこから調べましょう。って、自分で書いておきながらみはえるもわかりません^^;。これ、プログラミング教育の致命的な問題だと思うなあ……。

*1:もちろん、一番はじめはLispあたりでしょうけども