12

有没有人做过让 Ruby 做延续的工作(比如 Smalltalk 上的 Seaside)?

4

4 回答 4

12

是的,在大多数情况下。就我的记忆而言,MRI (1.8) 已经支持它们,Ruby 1.9 (YARV) 也支持它们, Rubinius也是如此。JRuby 和 IronRuby 没有延续,而且它们不太可能获得它们(JVM 和 CLR 使用堆栈自检来确保安全性)

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

ruby-doc 的延续

基于延续的 Web 框架(如 seaside 或 Arc 的 std. 库中的一个)似乎不太受欢迎。我发现有人声称可以让你做可选的延续,但我从未使用过它。

于 2008-09-29T17:11:22.643 回答
6

正如其他人已经说过的,Ruby 1.8 支持延续。

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

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

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

于 2008-09-29T17:34:58.530 回答
2

顺便说一句,这是使用延续实现的可重新启动异常(又名条件)的示例。我用过它几次,在 Ruby 工具箱中拥有它是一件很酷的事情。

于 2009-12-23T23:53:44.860 回答
0

neverblock 使用 1.9 光纤作为单线程 ruby​​ Web 服务器

于 2008-10-29T16:43:58.970 回答