Web服务的Haskell vs Erlang


30

我正在尝试使用一种功能语言来开始一个实验项目,并试图在Erlang和Haskell之间做出选择,而这两点我都非常喜欢。

我喜欢Haskell强大的字体系统和纯正的风格。我有一种感觉,它将使编写真正可靠的代码变得更加容易。而且我认为Haskell的强大功能将使我想做的事情变得容易得多。

不利的一面是,我觉得在Haskell上做Web东西的某些框架(例如Yesod)不如其Erlang计数器部分那么先进。

我更喜欢Erlang的线程和容错方法。我觉得Erlang的可伸缩性可能是一个主要优点。

这就引出了我的问题,人们在Haskell和Erlang中实现Web应用程序后端有什么经验。Haskell是否有软件包提供Erlang中一些轻量级线程和actor?


4
如果您未指定要求,则无法确定。只是扔硬币或类似的东西。
Vitor Py

1
我没有这个结论的证据,但是Facebook对Erlang的使用向我表明它既强大又可靠。

1
@Matthew:Facebook的聊天系统使用了Erlang,大概是因为它具有很高的并行性。
罗伯特·哈维

3
是的,请使用Lissssssp
Mark C

8
在旧的Commodore 64杂志上,他们有一篇关于假语言的文章。最好的是“ Lithp”,它与lisp完全一样,只是排除了's'字符。这就迫使所有“懒散”的开发人员用“ th”代替“ s”。:)
Berin Loritsch 2011年

Answers:


17

我唯一的问题是您的Web服务在做什么?如果Web服务确实是一个功能性问题,那么Haskell将是一个更好的选择。

Erlang不一定是功能语言。它是一种过程语言,具有用于大型并行系统的非常强大的执行模型。它是为电信行业设计的,绝对适合响应Web服务请求。

看到这个页面 *,以了解过程编程和函数式编程之间的区别。(对于深蓝页面上的难看的黑色,请提前道歉)。

如果您的Web服务正在做大量的模式匹配和应用规则,那么Haskel是您的选择。如果您只想要与您可能已经知道的语言没有太大差异的可伸缩基础结构,请选择Erlang。

(*通过Wa​​yback机器链接。原始文件已被删除)


它将看起来很像一个社交网络。此时,有90%的可能性将在haskell中完成。
Zachary K

12
Erlang是一种功能语言,而不是过程语言。它对模式匹配有很好的支持,并且每位都是唯一的模式匹配,在进行网络服务时非常有帮助。
乔纳斯(Jonas)

和外部链接一样,@ Berin一直是问题,现在已经死了。
thecoshman 2014年

@thecoshman,我的应用程序...三年后,我什至无法回忆起页面上以前的内容。
Berin Loritsch 2014年

完全不用担心:D¬_¬只是再也不要让它再次发生。(在人们吓坏之前,我在开玩笑)
thecoshman 2014年

11

在您提到的这两者之间,肯定Haskell是学术人士,而Erlang用于现实生活中的高可扩展性项目。因此,在这两个Web服务中,我会选择Erlang。

但是我想说您有第三种选择:Scala,一种受Haskell和Erlang共同影响的语言。它用于构建一流的Web服务,例如Twitter或Foursquare。甚至还有Lift,它是一个受Rails和Django启发的Web框架,尽管使用的功能有所不同,但有所不同。Foursquare正在使用Lift。


2
同意您的答案,除了最后一句话。电梯与Rails有很大的不同。Rails是模块化的,Lift是整体的。Rails是MVC框架,Lift不是。Rails是面向对象的,Lift具有更多功能。
dbyrne 2011年

@dbyrne:OK,编辑
vartec

3
用于Web服务的Scala的问题在于,与用Erlang和Haskell编写的服务器相比,最流行的Java应用程序服务器的伸缩性确实很差。
乔纳斯(Jonas)

1
@Jonas:有例如vert.x vertx.io
vartec

Lift不再是Scala的实际框架。现在是Play,它完全是MVC且无状态。我同意答案。Scala是现实世界中的更好选择。比Erlang和Haskell更容易获得Scala开发人员。
2014年

7

通常我会说:“尽可能从舒适的地方学习东西,即使您从不实际使用它,也可以使您成为一个更好的程序员”。

在这种情况下,这可能意味着Haskell。但是Erlang不仅在社会上几乎可以接受;但是要点(轻量级流程,消息传递,巨大的可伸缩性)正在许多其他“实用”平台上使用,因此,所汲取的教训对于更“真实”的工作具有广泛而直接的适用性。

我的建议:如果这很有趣,请执行Haskell。如果用于培训,请去Erlang。


对于工作类型项目。我想可能是Erlang,但我可能会做haskell。
Zachary K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.