事件/异步语言列表

时间:2010-03-05 03:07:01

标签: javascript python ruby asynchronous lisp

我正在开发一个系统,而不是从一开始就可以扩展。我开始研究/使用异步/偶数方法编写服务器端代码。我玩过ruby的EventMachine和node.js。

EventMachine很酷,但没有我需要的异步文件I / O.界面也有点奇怪。

Node.js真棒,但它......呃......这是javascript。

更大的Stack Overflow社区可以通过列出具有强大异步支持的其他语言来帮助我吗?要符合条件,语言需要支持两个闭包,并拥有异步文件io,http等的库。如果像用javascript语言编写的更强大的语言编写node.js会更好。

Lisp的? Python扭曲了吧?

4 个答案:

答案 0 :(得分:20)

Erlang可能是服务器端代码具有最高内在可伸缩性的语言(它为您管理多处理,主要是通过执行异步,协作任务切换“在幕后”) - 如果您可以忍受它特殊的语法和(通常)特殊的语义。

Python已扭曲(非常通用于所有网络任务),龙卷风(专门用于服务器端异步)和无堆栈(广泛用于MMP在线游戏),更不用说旧的但可用的asyncore在标准库中(以及位于asyncore之上的更老的“Medusa”以丰富其功能)。

Go在需要时具有非常轻的“无堆栈”goroutineschannels用于同步目的。

答案 1 :(得分:15)

我建议你再看看node.js。使用库在面向对象的编程语言中进行基于事件的编程(而不是首先使用基于事件的编程语言)的最大问题之一是,通常所有的其他现有的库基于事件,混合基于事件和同步I / O真的很尴尬。实际上,它几乎是不可能的,或者更确切地说, 是可能的,但它首先破坏了使用基于事件的I / O的所有好处。 (请注意,您使用的几乎所有第三方库(以及他们使用的库等等),包括语言本身的标准库和核心库,都必须基于事件,实际上是收获的好处。否则,你将花费你项目的大部分时间在现有的库周围编写异步包装。)

现在,如果使用基于事件的库是一件坏事,那么为什么我推荐node.js?简单:ECMAScript没有拥有任何同步I / O库(因为它根本没有任何I / O库 ),所以混合问题根本不会出现。 (实际上,它有一些 I / O库,比如XmlHttpRequest或Web套接字,但是猜猜:那些已经所有基于事件的。)

node.js实现所有I / O库本身,所有这些都是基于事件的,没有向后兼容性或遗留要求。

否则,每个语言或平台都有一些基于事件的或异步的I / O库:Ruby有EventMachineRev,.NET有Rx ,JVM有NIO,Unix系统有kqueue / epoll,C有libevlibeio(在其上构建了node.js和Rev),Perl有{{3} (由同一作者构建在libev之上)等等。

答案 2 :(得分:4)

由于您已表达了对Lisp的兴趣,您可能需要考虑Clojure - JVM的Lisp方言,重点关注concurrency。几乎所有东西都可以通过在agent中运行来异步运行。当然,它还提供painless对整个Java生态系统的访问。

答案 3 :(得分:3)

F#具有异步工作流,这是编写异步代码的一种极好方法。