Ruby的延续

时间:2020-03-06 14:53:03  来源:igfitidea点击:

有没有人做过让Ruby继续工作的工作(例如Seaside on Smalltalk)?

解决方案

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

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

ruby-doc的续篇

基于连续性的Web框架(例如,海边或者Arc的标准库中的一个)似乎不太流行。我发现wee声称可以让我们执行可选的延续,但是我从未使用过它。

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

Ruby 1.9暂时还不支持它们。它们已经在今年的某个时候重新添加了,但是其他大多数Ruby解释器(JRuby,IronRuby等)都不支持它们。

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

阅读此InfoQ文章,以对该主题进行更全面的讨论。

neverblock将1.9光纤用于单线程ruby Web服务器

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