華文網

“為什麼卡爾達諾用Haskell?難道IOHK將永遠運行Cardano項目?

“為什麼卡爾達諾用Haskell?難道IOHK將永遠運行Cardano項目?Haskell程式師的數量也是有限的,

所以人力資源也非常有限。那麼到底是Haskell的什麼優勢讓這個項目如此專情於Haskell?”

答:構成卡爾達諾的協議是分散式的,與密碼術捆綁在一起並且要求高度的容錯性。Haskell因其滿足這些要求而被選中。例如,Haskell是一種程式設計語言,它支援strong type system,同時具有合理的容錯能力。另外,Haskell的libraries在過去幾年中已經發展到編寫生產應用程式。此外,專注于Haskell的開發人員是一群經過良好的培訓,

並擁有學術和行業資質的組合的團體。因此Haskell語言被我們作為選擇合適人才的標準,因為經驗豐富的Haskell開發人員通常情況下都具備非常豐厚的電腦科學知識。

為何選用HASKELL?

組合卡爾達諾的協議是分散式的,與密碼學結合在一起,需要高度的容錯能力。在最佳的日子裡,仍然會有拜占庭式的參與者、格式錯誤的消息和錯誤的客戶,于無意中在網路上造成某種形式的havok。

首先,

我們需要一種具有強大類型系統的語言,讓我們可以輕鬆地使用諸如Quickcheck等工具,和更精細的技術,如精簡類型,同時對容錯有合理的期許。 Erlang風格的OTP模型滿足後者,而Haskell和Ocaml等語言則滿足前者。

隨著Cloud Haskell的推出,Haskell獲得了許多Erlang的優勢,而不是屈服於自身。此外,Haskell的模組化和可組合性使我們能夠為卡爾達諾使用更羽量級的定制庫,稱之”Time Warp”。

其次,由於廣泛的商業實體,如Galois、FP Complete和Well-Typed,Haskell的文庫在過去幾年中已經有很大的進展。

因此,Haskell可用于編寫生成應用程式24。

第三,PureScript的快速發展為JavaScript世界提供了一個非常需要的橋樑,類似於Clojurescript給予的Clojure。我們期待PureScript可在讓卡爾達諾於流覽器中運作,並在開發手機錢包時尤為重要。

第四,於依賴解決方案方面,Haskell在過去幾年中一直受到像Michael Snoyman這樣的技術專家的技術支援,通過一個叫做堆疊的平臺,這個平臺很容易使用,並且得到了FP Complete的良好支援。

第五,除了足夠的依賴解決方案之外,

我們的目標是使我們的軟體構建是可重現的。換句話說,使用相同的配置值和依賴性版本,它應該產生完全相同的構建工件。通過堆疊,我們一直在使用NixOps實現重現性,取得巨大成功。

最後,專業從事Haskell的開發人才庫相當龐大,相當於同行 - 而且訓練有素,具有相應的學術和行業資質。它也充當能力篩檢程式,因為在沒有電腦科學的詳細知識的情況下,

找到經驗豐富的Haskell開發人員是不太普遍的。

Cloud Haskell平臺

Cloud Haskell,Haskell中的Erlang式併發和分散式程式設計。Cloud Haskell平臺由 通用網路傳輸API,用於向遠端節點發送靜態封閉的庫,用於分散式程式設計的豐富API以及在Erlang的開放式電信平臺之後建模的一組平臺庫組成。

最初由Cloud文章中的Hasksell聯合描述,Cloud Haskell從頭開始重新編寫,並支持豐富且越來越多的功能,

- 使用非同步消息傳遞構建併發應用程式- 建立分散式運算應用- 構建容錯系統- 在各種網路傳輸中運行Cloud Haskell節點- 與幾個網路傳輸實現一起工作(還有更多正在進行中)- 支援靜態值(遠端通訊所需)

Cloud Haskell包含以下元件,其中一些是完整的,另一些是實驗性的。有三個主要部分:

核心庫

- 分散式進程:基礎併發和分發支持。它提供了一些從Erlang中知道的原始類似link和monitor。- 分散式靜態:支援靜態值- rank1dynamic:像Data.Dynamic和Data.Typeable,但是支持多態值

平臺庫

- 分散式進程用戶端伺服器:像Erlang這樣的通用用戶端/伺服器模式gen_server- 分散式進程非同步:未來風格的計算- 分散式進程任務:一個工作隊列- 分散式進程附加功能:監控,日誌記錄,解析名稱等- 分散式進程註冊表:一個鍵值註冊表- 分散式流程執行:負載調節,工作流程,切換等

網路層

網路傳輸:通用Network.TransportAPI

network-transport-tcp:TCP的實現Network.Transport

網路傳輸記憶體:記憶體實現Network.Transport(不完整)

網路傳輸組成:組成兩個傳輸(非常初步)

分散式進程simplelocalnet:本地網路的簡單後端

分散式進程Azure:Cloud Haskell的Azure後端(概念驗證)

Cloud Haskell的目標之一是將傳輸層與進程層分開 ,以便傳輸後端完全獨立。實際上,其他項目可以並重複使用傳輸層,即使它們不使用或具有其自己的進程層。

通過傳輸層進行抽象允許消息傳遞的不同協定,包括TCP / IP,UDP, MPI, CCI, ZeroMQ,SSH,MVars,Unix管道等等。這些傳輸中的每一個都提供了它自己的Network.TransportAPI 實現,並提供了創建新的連接以便在其中使用的方法Control.Distributed.Process。

Cloud Haskell從頭開始重新編寫,並支持豐富且越來越多的功能,

- 使用非同步消息傳遞構建併發應用程式- 建立分散式運算應用- 構建容錯系統- 在各種網路傳輸中運行Cloud Haskell節點- 與幾個網路傳輸實現一起工作(還有更多正在進行中)- 支援靜態值(遠端通訊所需)

Cloud Haskell包含以下元件,其中一些是完整的,另一些是實驗性的。有三個主要部分:

核心庫

- 分散式進程:基礎併發和分發支持。它提供了一些從Erlang中知道的原始類似link和monitor。- 分散式靜態:支援靜態值- rank1dynamic:像Data.Dynamic和Data.Typeable,但是支持多態值

平臺庫

- 分散式進程用戶端伺服器:像Erlang這樣的通用用戶端/伺服器模式gen_server- 分散式進程非同步:未來風格的計算- 分散式進程任務:一個工作隊列- 分散式進程附加功能:監控,日誌記錄,解析名稱等- 分散式進程註冊表:一個鍵值註冊表- 分散式流程執行:負載調節,工作流程,切換等

網路層

網路傳輸:通用Network.TransportAPI

network-transport-tcp:TCP的實現Network.Transport

網路傳輸記憶體:記憶體實現Network.Transport(不完整)

網路傳輸組成:組成兩個傳輸(非常初步)

分散式進程simplelocalnet:本地網路的簡單後端

分散式進程Azure:Cloud Haskell的Azure後端(概念驗證)

Cloud Haskell的目標之一是將傳輸層與進程層分開 ,以便傳輸後端完全獨立。實際上,其他項目可以並重複使用傳輸層,即使它們不使用或具有其自己的進程層。

通過傳輸層進行抽象允許消息傳遞的不同協定,包括TCP / IP,UDP, MPI, CCI, ZeroMQ,SSH,MVars,Unix管道等等。這些傳輸中的每一個都提供了它自己的Network.TransportAPI 實現,並提供了創建新的連接以便在其中使用的方法Control.Distributed.Process。