it-swarm.cn

Web服务的Haskell vs Erlang

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

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

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

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

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

29
Zachary K

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

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

请参见 此页面 *,以了解过程和功能编程之间的区别。 (对于深蓝页面上的难看的黑色,请提前道歉)。

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

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

19
Berin Loritsch

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

但是我要说的是您还有第三种选择: Scala ,这是一种受Haskell和Erlang共同影响的语言。它用于构建一流的Web服务,如Twitter或Foursquare。甚至还有 Lift ,这是一个受Rails和Django启发,有点不同,更实用。Foursquare正在使用Lift。

10
vartec

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

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

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

6
Javier

Haskell(GHC)对绿色线程(Erlang的“进程”)具有开箱即用的支持。例如,forkIO产生一个新的绿色线程并返回其线程ID。

forkIO :: IO () -> IO ThreadId

消息传递机制是由 distributed-process 包实现的,但它维护得不是很好。
Haskell的数据共享机制与Erlang不同。 Haskell接受了可变的全局状态的想法,并添加了抽象使其可以安全使用。最好的例子是TVar([〜#〜] t [〜#〜]变应性Variable),启用可组合的原子交易
Haskell还具有一些非常高级的Web服务库,这些库利用其表达类型系统(依赖类型),例如,servant。它允许您使用类型级别DSL指定您的REST API),可以在编译时使用以确保类型安全。

编辑:
显然,distributed-closure也在staticptr的帮助下实现了闭包序列化

1
Poscat

您还可以考虑 Rust

  • 它不是纯粹的功能,而是鼓励半功能的样式
    • 关闭
    • 默认不变性
    • 它具有强大,安全的宏系统,可让您编写宏(或使用现有的社区创建的宏)以更实用的方式编写代码
  • 它具有用于每个抽象级别的库/框架
  • 它非常强调有效的内存安全性
  • 它具有强大的字体系统
  • 它使各种并发真的非常容易(只要满足所有安全要求)
  • 它有一个活跃的社区
  • 它是开源的(就像您提到的其他一样)
  • 等等.
0
Solomon Ucko