您的位置:首頁>正文

“為什麼卡爾達諾用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。

工作流程,切換等

網路層

網路傳輸:通用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。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示