簡體   English   中英

Haskell服務器?

[英]Haskell for a server?

關於制作游戲服務器,似乎Erlang總是作為一種“為這種東西而構建”的語言,具有可擴展性和並發性。 我沒有Haskell和Erlang的經驗,但從表面上看它們看起來是一樣的。 看看Haskell的文檔,似乎它支持多處理器的可擴展性和並發性,而Haskell被認為是一種更加可靠的語言,並且具有明顯更好的社區。 那么,我的問題是,Haskell被認為是像Erlang一樣的服務器構建解決方案嗎?

這取決於您想要對服務器執行的操作。 正如電信應用程序所期望的那樣, Erlang擅長以非常高的並發性執行簡單任務 如果您的服務器每秒鍾需要大量的連接,或者一次,Erlang就是您的朋友。 Erlang還為在多個服務器上分配負載提供了更好的支持。

Haskell擅長復雜的符號計算 ,截至2009年4月也可以處理很多線程(請參閱下面的更新)。 此外,Haskell有用於獲取復雜的代碼權更多的工具 :之類的東西快速檢查SmallCheck ,靜態類型系統。 因此,如果您的服務器正在執行復雜,有趣的事情,並且您可以只使用一台服務器,那么您最好使用Haskell。


2009年4月13日更新 :Don Stewart,一個可靠的消息來源,報告稱“幾個月前格拉斯哥Haskell編譯器中的最后一個線程擴展錯誤被壓扁了”,並且一些用戶報告使用了一百萬個Haskell線程沒有遇到麻煩。 截至2009年1月,有一篇來自實施者新的未發表的論文可能描述了如何實現這一目標。


2012年2月21日更新 :John Hughes的公司QuviQ現在為Erlang制作QuickCheck 他們發現了許多非常有趣的錯誤。 您可以免費下載“QuickCheck Mini”; 它與Haskell QuickCheck相當。 還有一個更強大的商業版本。

這些論文的基准測試表明Haskell可以與Apache競爭:

在Concurrent Haskell中開發高性能Web服務器
- 西蒙馬洛

結合可擴展網絡服務的事件和線程:Monadic,應用程序級並發原語的實現和評估
- Peng Li Stephan A. Zdancewic(見圖19)

我沒有Haskell和Erlang的經驗,但從表面上看它們看起來是一樣的。

Haskell和Erlang之間存在一些非常明顯的差異。 Erlang專為並發系統而設計。 語言和虛擬機都旨在支持許多流程,而Erlang使用actor風格的系統來管理所有流程之間的通信。 由於Haskell的功能性,Haskell也很容易支持並發, 在Haskell中進行並發編程仍然有點困難,而且語言沒有專門設置來促進這一點。

與Haskell一樣,Erlang不會在進程之間共享狀態,因此編寫多進程軟件很容易。 但是Haskell和Erlang之間的編程風格有點不同,因為Erlang強調使用小進程來執行並發處理。

我喜歡Haskell - 這是我最喜歡的語言之一 - 但如果我要編寫服務器軟件,我可能會使用Erlang。 但是,如果您更了解Haskell或者發現庫支持更優越,那么在Haskell中編寫服務器當然是可能的。

上次我看,在Erlang中構建可伸縮服務器的庫和框架看起來比Haskell更成熟。 我建議查看編程Erlang:並發世界的軟件以獲取有關這些的信息。

由於懶惰,在Haskell應用程序中引入內存泄漏要容易得多。 長時間運行的服務器正是那種你真的不希望有任何內存泄漏的程序。

雖然我同意Haskell是一種更加可靠的語言並且編程更好,但是Erlang更容易,並且有許多專門用於這類用途的庫。

我不認為有一個Haskell相當於Mnesia,編寫它會很困難。 可以編寫gen_servergen_event等的Haskell版本,但它們將不會被優化和調整超過十年。

Haskell是否和Erlang一樣好的問題取決於人們對語言的期望。 我認為兩者都可以作為游戲服務器做得很好,但它主要取決於你想要或期望的編程語言。 需要注意的最簡單的差異之一是Haskell是一種帶有類型推斷的靜態類型語言,而Erlang是一種動態類型語言。 總的來說,我會說Haskell對於那些不習慣函數式編程的人來說需要更多的“復雜性”。

我相信你能找到那些這么認為的人,但我認為你錯了Erlang支持這種用法的能力; 它廣泛用於電話應用,實際上非常強大。 Erlang針對高可靠性,高並發性服務器進行了優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM