Cardano编程语言:Haskell和Plutus

简介
上一个模块考察了Cardano的历史,这个模块将考察Cardano的编程语言。

如果你熟悉Cardano生态系统,你可能知道区块链是建立在函数式编程语言 "Haskell "之上。

“Plutus”,Cardano的智能合约编程语言,是建立在Haskell之上的,Marlowe,Cardano用于金融智能合约的特定领域语言也是如此。

在这个模块中,我们将研究Haskell和Plutus,以及为什么它们对Cardano至关重要。

什么是Haskell?
Haskell的官方标语将其描述为 “一种先进的、纯粹的函数式编程语言”。从本质上讲,Haskell是一种基于lambda calculus(一种描述数学函数和程序的符号)的编程模型,为描述和评估函数提供了一个理论框架。这种声明式的编程风格用表达式取代了语句,并关注 "解决什么 "而不是 “如何解决”。

Haskell被称为 "纯函数式 "语言,因为Haskell中的每个函数都是数学意义上的函数,并且具有高度安全性。该语言由数学家Haskell Brooks Curry开发,他的职业生涯中一直在研究组合逻辑(一种旨在消除数理逻辑中对变量的需求的符号),这形成了函数式编程的基础。

在Haskell中,函数执行低层次的任务,并指定程序应完成的任务。它是一种静态类型的语言,这意味着代码在编译过程中被评估。因为编译器在代码运行前就进行了评估,所以类型检查可以确保代码的简洁、清晰和正确。Haskell还确保了代码的结构良好。

Haskell在生产高质量的软件方面起着至关重要的作用。正确性、性能和可维护性是评价软件质量的三个最重要的因素。

正确性
编写遵守规范的代码需要强大的静态类型化、纯洁性和不可变的数据。基于Haskell的软件是安全的、可靠的、没有错误的。

性能
GHC(Glasgow Haskell编译器)提供高效的本地可执行文件。它有一个垃圾收集器,并在其运行时系统中支持绿色线程。Haskell适合于需求量大的多线程系统,如网络后端。

可维护性
在Haskell中鼓励使用类型系统对业务领域进行建模,并将其明确化。这使得重构代码和适应不断变化的需求变得更加简单明了。

使用Haskell的好处是什么?
这种语言有很多好处,例如。

内存安全
手动内存管理是资源管理的一种形式,用于管理计算机的内存。内存管理提供了在需要时为程序动态分配内存部分的机制。

手动内存管理 在C和C++这些常用的编程语言中,会导致缓冲区溢出、内存泄漏和其他与内存有关的错误。内存安全是现代语言的一个共同特征,包括Java、Python、Go、JavaScript、Rust等,它是编写安全软件的必要条件。然而,Haskell软件不太可能遇到这样的问题,因为Haskell数据默认是不可变的。

本地代码
Haskell是提前编译的,直接成为本地代码(被配置为在特定处理器上运行的编程代码),与Python、Ruby、JavaScript、Lua和其他解释语言不同。编译器在优化和产生高效的可执行文件方面表现出色。因此,对于需要高吞吐量数据处理的高性能应用,如系统编程、数据结构、数据库、开发、文本处理等,Haskell是一个合适的选择。

静态类型
Haskell和Java一样,但与JavaScript不同,它有一个类型检查器,可以在编写代码时进行验证。这意味着许多问题会在开发周期的早期被发现,在产品到达用户或质量保证部门之前。此外,开发人员可以通过研究代码来更好地了解业务领域。

丰富的类型
与Java或Go相比,静态类型(如Java、C或C++)经常被认为是一种障碍,而Haskell的类型系统非常强大,成为一种有价值的工具。此外,Haskell为开发静态类型的程序提供了大量的工具。

懒惰性
Haskell从一开始就是为了成为一种 "懒惰 "的语言,它最基本的特征是懒惰的评估。懒惰评估允许程序将计算推迟到需要时进行。这样做的好处之一是更容易重构–代码重构被定义为在不改变或增加其功能的情况下重组计算机代码的过程。

纯洁性
纯粹的函数和不可变的数据对Haskell的设计至关重要。

如果一个函数对应于数学意义上的函数,那么它就被称为纯函数:它为每个可能的输入值分配一个输出值,而不做其他事情。

Haskell中的表达式是不可改变的。这意味着它们在被评估后不能改变。不变性使重构变得简单,代码更容易理解。

这些属性已被反复证明是创建正确软件的关键。Haskell编程语言提供了程序员需要的所有工具,以防止或减少这些复杂性的来源。

其他重要的好处包括缩短开发时间,严格控制副作用,可扩展性,以及更多。所有这些结合起来,使Haskell成为各种行业的一个有吸引力的选择。特别是,处理大量数据的公司对这种语言表现出很大的兴趣。

为什么Cardano要使用Haskell?
只要有可能,函数式编程语言强调使用 "纯 "函数,对于相同的输入总是返回相同的结果。Haskell作为最纯粹的函数式编程语言之一,据说影响了许多开发人员的一般编程方法,并提高了他们的整体编程技能。

如上所述,函数式编程语言非常适用于需要高度形式化验证的代码和程序。

由于Haskell非常安全,程序员可以更加确信他们开发的代码是正确的。正因为如此,Haskell编程语言是程序员创建Cardano的绝佳选择。用Haskell编写的智能合约,如Cardano的Plutus和Marlowe,可以用精确的、经过正式测试的代码精心制作,从一开始就保证高度的安全性。

Plutus和Marlowe结合了Haskell库,利用现有的Haskell文档、工具包和高度专业的社区,为智能合约创造一个安全和企业就绪的基础。

Cardano的代码在链外和链上都是用Haskell编写的。因此,与其用一种全新的、未经验证的智能合约语言重新发明车轮,Cardano可以从Haskell生态系统的广泛研究中受益。

什么是Plutus?
Plutus平台是Cardano的智能合约平台。Plutus合约由链上(在区块链上运行的代码)和链下(在用户的计算机上运行的代码)组件组成。Cardano的Alonzo升级建立了基础设施,并为使用Plutus的功能性智能合约开发增加了工具。

Plutus是一个安全的、全功能的编程环境,它基于顶级函数式编程语言Haskell,借鉴了最新的语言研究。Plutus的智能合约是Haskell程序,链上和链下的代码都是用Haskell编写的。GHC编译链外代码,而Plutus编译器编译链上代码。

程序员可以直接在Plutus Playground(一个用于Plutus探索性编程的轻量级、基于网络的环境)中编程,利用Plutus平台构建智能合约。因此,有可能使用Plutus编写和模拟合约,而不需要建立和管理整个开发环境。

Plutus的好处
以下是对Plutus最大优势的概述。

Plutus以它的高安全性和可靠性而闻名。它还为智能合约提供了卓越的代码审查功能。这最终减少了未来的维护时间和成本。对于智能合约,正确性是绝对的关键。

与以前的选择相比,Plutus允许以更安全、更方便的综合方式进行智能合约和分布式应用开发。链上和链下的编程都使用相同的语言。他们用一个单一的代码库工作,Plutus将其分为链上和链下代码,然后打包进行部署。

了解Plutus
为了更好地理解Plutus和学习环境,有必要首先了解以下三个概念。

扩展UTXO模型(EUTXO)

Plutus核心–Plutus的 "链上 "部分

Plutus应用框架(PAF)。这是Plutus的 "链外 "部分,能够与智能合约互动。

扩展的UTXO模型
UTXO模型被Cardano使用,就像比特币一样。UTXO设计中的交易包含输入和输出,输入是先前交易的未花费的输出。

当一个输出被用作交易中的输入时,它就被消耗了,不能再被使用。相反,一个地址(公钥或公钥哈希)和一个值被用来指定输出(由ADA金额和可选的额外本地代币金额组成)。一个输出的地址定义了哪些交易被允许 "解锁 "该输出并将其作为输入使用。

EUTXO模型在UTXO模型的基础上进行了扩展,允许输出地址包含复杂的逻辑,以确定哪些交易被允许解锁,并向所有输出添加自定义数据。

Plutus核心
为了实现EUTXO模型,必须正确指定脚本和数据这两个术语。因此,脚本必须有一个独特的、定义明确的脚本语言。

Plutus Core在这种情况下是有帮助的。Cardano使用Plutus Core脚本语言。Plutus Core脚本可以用与Haskell相当的初级函数式语言编写,而且可以使用Haskell的大量子集。你不以合同作者的身份编写Plutus Core;Haskell编译器插件会生成所有的Plutus Core程序。

Plutus应用框架(PAF)
Plutus应用框架(PAF)使得访问Plutus应用程序所利用的服务变得简单。Plutus应用程序的后端,为访问区块链以及持久性、日志和监控等其他问题提供运行时支持,可用于执行用该框架的库构建的应用程序。此外,基于PAF的应用程序包括一个HTTP和WebSocket接口,可用于从网络浏览器与该程序进行通信。

我可以用Plutus做什么?
Plutus核心可以用来定义造币准则。Plutus核心政策脚本将在造币和烧钱期间在后台运行,批准或不批准该行动。

什么是Plutus Playground?
正如我们所知,Plutus Core允许开发者创建高度安全的Cardano应用程序。另一方面,Plutus Playground是一个平台,用于在智能合约部署到Cardano区块链之前开发和测试它们。

Plutus Playground为构建和执行智能合约提供了一个基于网络的模拟器,并允许访问预先写好的智能合约。该项目已经得到了巨大的发展,是一个非常受欢迎的开发者资源。

Plutus Playground的目标是那些想与Cardano合作创建去中心化应用程序(DApps)和智能合约的人。例如,Plutus可以为供应链、跟踪和追溯、医疗记录、身份核对、财产登记、点对点支付和金融系统开发DApps。因此,它将吸引各种各样的受众。

结论
Plutus合约是由在区块链上运行的代码(链上)和在用户电脑上运行的代码(链下)组成的。

Plutus是一个安全的、全功能的编程环境,基于Haskell,一种顶级的功能性编程语言。Plutus的智能合约是Haskell程序,链上和链下的代码都是用Haskell编写的。