erlang Haskell作为服务器?

piok6c0g  于 2023-05-27  发布在  Erlang
关注(0)|答案(8)|浏览(231)

关于制作游戏服务器,Erlang似乎总是以其可伸缩性和并发特性作为“为这种事情而构建”的语言。我对Haskell和Erlang都没有经验,但从表面上看它们是一样的。查看Haskell的文档,似乎它支持多处理器可扩展性和并发性,据说Haskell是一种更可靠的语言,并且具有明显更好的社区。那么,我的问题是,Haskell是否被认为是像Erlang那样好的服务器构建解决方案?

qkf9rpyu

qkf9rpyu1#

这取决于你想用你的服务器做什么。正如电信应用程序所预期的那样,Erlang擅长以非常高的并发性完成简单的任务。如果您的服务器每秒需要大量的连接,或者一次需要大量的连接,那么Erlang是您的好朋友。Erlang还为在多个服务器上分配负载提供了更好的支持。

Haskell擅长复杂的符号计算,截至2009年4月,它还可以处理大量线程(见下面的更新)。此外,Haskell有更多的工具来正确处理复杂的代码:比如QuickCheckSmallCheck和静态类型系统。因此,如果您的服务器正在做复杂而有趣的事情,并且您可以只使用一台服务器,那么您可能更适合使用Haskell。
2009年4月13日更新:Don Stewart,一个可靠的消息来源,报告说“格拉斯哥Haskell编译器中的最后一个线程扩展错误在几个月前被压扁了”,一些用户报告说使用一百万个Haskell线程没有问题。截至2009年1月,有一个new, unpublished paper from the implementors可以描述如何实现这一点。
2012年2月21日更新:John Hughes的公司QuviQ现在为Erlang提供QuickCheck。他们发现了一些非常有趣的bug。可以免费下载“QuickCheck Mini”;它与Haskell QuickCheck相当。还有一个更强大的商业版本。

oaxa6hgo

oaxa6hgo3#

我对Haskell和Erlang都没有经验,但从表面上看它们是一样的。
Haskell和Erlang之间有一些非常明显的区别。Erlang是专门为并发系统设计的。语言和虚拟机都被设计为支持许多进程,Erlang使用一个Actor风格的系统来管理它们之间的通信。Haskell也相当容易地支持并发,这是由于它的函数性质,* 但是 * 在Haskell中进行并发编程仍然有点困难,并且该语言没有专门设置为促进这一点。
像Haskell一样,Erlang不会在进程之间共享状态,因此很容易编写多进程软件。但是Haskell和Erlang之间的编程风格有点不同,因为Erlang强调使用小进程来执行并发处理。
我喜欢Haskell --它是我最喜欢的语言之一--但如果我要写服务器软件,我可能会使用Erlang。但是如果你更了解Haskell或者发现库支持上级的话,用Haskell编写一个服务器当然是可能的。

vlju58qv

vlju58qv5#

上次我看过,用Erlang构建可伸缩服务器的库和框架看起来比Haskell的要成熟一些。我建议查看Programming Erlang: Software for a Concurrent World以获取有关这些的信息。

zpjtge22

zpjtge226#

由于懒惰,在Haskell应用程序中引入内存泄漏要容易得多。长时间运行的服务器正是那种你不希望有任何内存泄漏的程序。
虽然我同意Haskell是一种更坚实的语言,更好地编程,但Erlang更容易,并且有许多专门用于这些用途的库。
我不认为有一个Haskell等价物,比如Mnesia,编写它将是困难的。您可以编写gen_servergen_event等的Haskell版本。但它们在十年内都不会被优化和调整。

mlmc2os5

mlmc2os57#

Haskell是否和Erlang一样好的问题取决于人们对语言的需求。我认为两者作为游戏服务器都能做得很好,但这主要取决于你想从编程语言中得到什么。最容易注意到的区别之一是Haskell是一种具有类型推断的静态类型语言,而Erlang是一种动态类型语言。总的来说,我认为对于那些不习惯函数式编程的人来说,Haskell需要更多的“复杂性”。

hpxqektj

hpxqektj8#

我相信你可以找到这样认为的人,但是我认为你误解了Erlang支持这种用途的能力;它被广泛应用于电话应用中,实际上非常健壮。Erlang针对高可靠、高并发的服务器进行了非常优化。

相关问题