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工具箱中是很酷的事情。