Scala支持continuation了!

    Scala 2.8有一项非常重大的进步,那就是支持了continuation(http://en.wikipedia.org/wiki/Continuation)。这玩意儿不知道怎么翻译成中文,叫“连续”吗?怪难听的。不过不管叫什么,它都是一个相当令人着迷的语言特性。


    我最早是在Scheme那儿通过一个叫Call-with-current-continuation(简写成call/cc,http://en.wikipedia.org/wiki/Call-with-current-continuation)的神奇函数认识它的。我曾经以为和coroutine差不多,最近因为关注continuation-based web framework才算有点明白,这是多么肤浅的认识啊!最著名的continuation-based web开发框架当属用Smalltalk实现的Seaside(http://en.wikipedia.org/wiki/Seaside_(software)),大家可以去官网体验一下它所支持的与传统WEB开发大不一样的编程模型,而这一切都有赖于continuation。


    Scala支持的continuation和Scheme的还有点不一样,称之为delimited continuation(http://www.scala-lang.org/node/2096),更详细的背景可以参考这里:http://okmij.org/ftp/continuations/Continuations.html,Haskell也有相关实现:http://www.haskell.org/haskellwiki/Library/CC-delcont。Scala的实现比之Haskell的独特之处在于:continuation可以被传送到其它机器上再次执行。这真的很牛逼,据我所知,现在只有Racket语言(http://racket-lang.org/)中的continuation可以序列化。这种能力可以帮助如前所述的continuation-based web框架大大提高scalability,而这也正是此类框架最为人诟病之处。 


    在continuation的帮助下可以探索的领域很多,比如Swarm(http://www.scala-lang.org/node/3485),比如ScalaFlow(https://github.com/hotzen/ScalaFlow)。


    JVM上终于有了一门科学家设计的语言了!再加上它和Java代码良好的互操作性(interoperability),我觉得Scala前途不可限量。

你可能感兴趣的:(程序设计知与行)