Ruby中的Continuations

12

有没有人尝试过让Ruby实现类似Smalltalk上的Seaside一样的continuations(续延)功能?

4个回答

12

大多数情况下是可以的。远至我记忆所及,MRI (1.8)已经支持了它们,Ruby 1.9(YARV)也支持,Rubinius也一样。JRuby和IronRuby没有continuations,并且它们很难获得(JVM和CLR使用堆栈内省进行安全性保护)。

Ruby作为一种语言,通过callcc关键字支持continuations。例如,它们被用于实现标准库中的Generator类。

请参考ruby-doc上的continuations资料

基于continuations的Web框架(如seaside或Arc的std库中的一个)似乎不太流行。我找到了一个声称允许您进行可选continuations的wee,但我从未使用过。


6

正如其他人所说,Ruby 1.8支持continuations(续延)。

然而,Ruby 1.9已经不再支持续延了一段时间。虽然它们在今年的某个时候被重新添加了,但大多数其他的Ruby解释器(JRuby,IronRuby等)不支持它们。

如果您希望您的代码可用于除主线Ruby之外的其他平台,我建议不要使用它们。

阅读这篇InfoQ文章,以获取有关该主题的更全面的讨论。


2

顺便说一下,这里是使用延续实现的可重启异常(也称条件)的示例。我曾经多次使用它,它是Ruby工具箱中很酷的东西。


0
neverblock 使用 1.9 fibers 来实现单线程的 Ruby Web 服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接