Ruby中的Continuation让时光倒流

Ruby中的Continuation让时光倒流

大家对Continuation可能还比较陌生,但它是个好东西
按手册介绍说:它包含返回地址和执行上下文,允许从程序的任何地方返回到callcc block的结尾处。
使用continuation 我们就可以实现“月光宝盒”,重返往日某时某刻。那还不赶快来见识一下?
举个例子来说:
def cont
 a=nil
 for i in 1..4
  puts i
  callcc {|continuation| a=continuation} if i==2
 end
 return a
end
在irb中,我们执行
x=cont
它会输出
0
1
2
3
4
当再调用 x.call时会输出
3
4
看,我们又重新回到了2这个时光点。
至于它的应用,大家可以发挥了。。。
长期以来人们一直认为:Ruby不可以正确处理尾调用,你能构造个例子吗?

可以参考下列例子:
http://www.ibm.com/developerworks/cn/opensource/os-lightweight9/

我个人认为:Java/.NET就不能正确处理尾调用!
实际上ruby1.8中的continuation还不能进入实际使用阶段。
有大最的bug
非安全的
有个比较权威的continuation的讲座
http://www.atdot.net/~ko1/pub/ContinuationFest-ruby.pdf
不过continuation即使有这些问题,但还是能给我们带来不少作用的。比如在Debug中。或对商业环境要求不是非常严格的情况下使用。
或许ruby2.0能给我们带来真正的continuation

[ 本帖最后由 wtbwtb 于 2008-6-14 19:13 编辑 ]
期待中,哈!