“为什么卡尔达诺用Haskell?难道IOHK将永远运行Cardano项目?

Posted ADA艾达币

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“为什么卡尔达诺用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从头开始重新编写,并支持丰富且越来越多的功能,


使用异步消息传递构建并发应用程序

  1. 建立分布式计算应用

  2. 构建容错系统

  3. 在各种网络传输中运行Cloud Haskell节点

  4. 与几个网络传输实现一起工作(还有更多正在进行中)

  5. 支持静态值(远程通信所需)


Cloud Haskell包含以下组件,其中一些是完整的,另一些是实验性的。有三个主要部分:


核心库


  1. 分布式进程:基础并发和分发支持。它提供了一些从Erlang中知道的原始类似link和monitor。

  2. 分布式静态:支持静态值

  3. rank1dynamic:像Data.Dynamic和Data.Typeable,但是支持多态值


平台库


  1. 分布式进程客户端服务器:像Erlang这样的通用客户端/服务器模式gen_server

  2. 分布式进程异步:未来风格的计算

  3. 分布式进程任务:一个工作队列

  4. 分布式进程附加功能:监控,日志记录,解析名称等

  5. 分布式进程注册表:一个键值注册表

  6. 分布式流程执行:负载调节,工作流程,切换等


网络层


  1. 网络传输:通用Network.TransportAPI

  2. network-transport-tcp:TCP的实现Network.Transport

  3. 网络传输内存:内存实现Network.Transport(不完整)

  4. 网络传输组成:组成两个传输(非常初步)

  5. 分布式进程simplelocalnet:本地网络的简单后端

  6. 分布式进程Azure:Cloud Haskell的Azure后端(概念验证)


Cloud Haskell的目标之一是将传输层与进程层分开 ,以便传输后端完全独立。实际上,其他项目可以并重复使用传输层,即使它们不使用或具有其自己的进程层。


通过传输层进行抽象允许消息传递的不同协议,包括TCP / IP,UDP, MPI, CCI, ZeroMQ,SSH,MVars,Unix管道等等。这些传输中的每一个都提供了它自己的Network.TransportAPI 实现,并提供了创建新的连接以便在其中使用的方法Control.Distributed.Process。

以上是关于“为什么卡尔达诺用Haskell?难道IOHK将永远运行Cardano项目?的主要内容,如果未能解决你的问题,请参考以下文章