Solidity vs Move vs Rust: 智能合约编程语言的演变

  • 张小雨
  • 更新于 2022-11-28 18:13
  • 阅读 795

Solidity vs Move vs Rust: 智能合约编程语言的演变

img

区块链的安全性、速度和开发者活动都取决于其底层编程语言和虚拟机。两种最流行的编程语言是Solidity及 Rust,Solidity用于为以太坊虚拟机(EVM)构建去中心化的应用程序,而Rust则用于Solana上的dApps。

然而,由于最新出现的智能合约的区块链,Aptos和Sui,使用Move作为他们的基础编程语言,以实现更安全和可扩展的第1层,所以对这三者做一个比较是非常合适的。

编码术语

高级语言(HLL)

高级语言通常对开发人员来说更容易阅读和编写,因为与更接近机器代码的低级语言相比,它们更接近人类语言。为了让计算机能够阅读和执行源代码,首先需要将其编译成机器语言。

低级语言(LLL)

LLL对开发者来说更难读和写,因为它们类似于机器代码。因此,它们可以在没有中间编译器或解释器的情况下转换为机器代码。

运行时环境

在区块链上,虚拟机作为操作系统的运行时环境。

解释型或编译型编程语言

编程语言将自己区分为解释型或编译型语言。

编译型编程语言需要从源代码转换为可执行的字节码。

另一方面,解释型编程语言在运行时被解释器逐行读取和执行。

因此,解释型语言通常比编译型语言要慢。然而,解释型语言不容易出现错误,因为代码的调试是在运行时进行的,而且中间的编译表示被删除了。

在编译型语言中,即使源代码无缺陷,也可能出现编译器自身的错误而出现错误,所以它们更容易出错。

顺序或并行处理

今天,大多数主要的区块链使用交易顺序执行,这意味着运行时环境一次只能处理一个交易。这是网络吞吐量的一个主要瓶颈。

相比之下,一些编程语言能够实现并行处理(或并行执行),与顺序处理相比,允许更高的TPS,而不需要零知识证明等数学上的解决方案。

并行执行可以识别独立的交易,以并发地执行它们。然而,依赖性交易会影响另一个交易的执行,因此必须依次执行。

img

Solidity - EVM智能合约的编程语言

以太坊是第一个可编程的区块链,至今仍是Web3生态系统发展的基础性开发环境。为了在以太坊上编程,你需要首先利用Solidity创建一个 "智能合约"--这是Gavin Wood博士在2014年为以太坊的智能合约专门设计的定制语言。然后,智能合约在以太坊虚拟机(EVM)上运行。

作为一个HLL,Solidity使软件开发更方便用户使用。此外,Solidity受到其他流行语言(如C++、Java和Python)的影响并与之相似,使新的开发人员更容易在EVM生态系统中开始开发。

然而,作为一种编译型语言,Solidity更容易出现错误,因为将其翻译成机器可读的字节码需要额外的步骤。因此,尽管智能合约经历了极其复杂和昂贵的审计,我们仍然看到智能合约漏洞在以太坊生态系统中被利用。

今天,Solidity是一个独立的开源项目,在GitHub上进一步完善和发展。虽然它不是唯一可以用来为以太坊写代码的语言,但Solidity的语法是专门针对EVM设计的。

Solidity的优势

  • HLL,因此更容易学习和用户友好
  • 丰富的优秀开发者工具和开源库
  • 是Web3中使用最多的语言
  • 与C++、Python和JavaScript等语言类似
  • 开发人员在他们已经熟悉的语言中犯错误的可能性较小
  • 良好的社区支持
  • 现有的标准(ERC20和ERC721)
  • 多链兼容(Layer2、侧链和EVM兼容的第一层区块链)。

Solidity的劣势

  • 作为一种编译型语言,Solidity更容易出现可利用的bug
  • 顺序处理是网络吞吐量的一个瓶颈

Solidity的采用

在撰写本报告时,Solidity占所有智能合约锁定总价值的87.45%,其次是Vyper(8.95%)和Rust(2.31%)

img

Rust - Solana的主要编程语言

当许多生态系统试图通过兼容EVM来吸引新的开发者时,Solana采取了一条不同的道路,它有自己独特的编程语言,自推出以来,其采用率有了令人印象深刻的增长。

Rust于2011年推出,与Solidity不同,它从一开始就被设计为一种通用的编程语言,不限于智能合约程序。

与Solidity相比,Rust是一种经过编译的、低级别的、更复杂的编程语言。因此,它对新开发者的吸引力可能较小,因为它更难学习。然而,Web3生态系统以外的许多开发人员已经熟练掌握了Rust,使其更容易开始在Solana或Near项目上工作。

Rust最有名的是作为Solana的主要编程语言,它有助于实现其他区块链只能梦想的吞吐量。对许多人来说,与Solidity相比,它也是一种更强大、更通用的语言,因为它允许开发人员有效地管理内存并利用并行处理。

Rust的优势

  • 作为一种面向机器的编译型语言,Rust提供了高速度和良好的内存效率
  • Rust允许通过并行处理实现更高的贯穿性
  • Rust通过所有权和借用原则实现了内存安全,在编译时消除了与内存有关的错误。
  • 由于Rust的开发者通常是更有经验的开发者,因此可以预计Solana上的智能合约(称为程序)不容易出现错误。

Rust的劣势

  • 作为一个LLL,Rust有一个陡峭的学习曲线,通常更难学习
  • 大型项目的程序编译可能需要10分钟。
  • 今天,只有少数几个区块链支持Rust,即Solana和Near

Rust的采用

虽然使用Solidity作为主要编程语言的区块链仍然拥有最大的活跃开发者份额,但增长速度较快。

img

Move

Move于2019年推出,是Aptos和Sui等新层一链中使用的最现代的编程语言之一。Move以Rust为基础,但由Meta为其Diem区块链专门设计,以解决现有智能合约语言的问题。

因此,Move背后的团队有机会研究Web3空间的现有语言,并从它们的缺点中学习。

最重要的是,Move被设计为一种面向对象的语言,用于编写具有安全资源管理的智能合约或程序。资产被定义为一种 "资源",它可以在账户之间移动,但不能被重复消费或复制。

这使得编写无错误的代码非常容易,与Solidity相比,资产的转移必须手动指定,增加了编写错误代码的可能性。

因此,Move消除了重入攻击的可能性,这是对Solidity智能合约最糟糕的攻击之一。

作为一种解释型语言,Move的性能与编译型语言相比要慢一些。然而,由于缺乏编译器和编译器错误,Move在本质上比Solidity更安全。

此外,Move继承了Rust的内存效率和并行处理,使其成为整体性能的可靠选择。

Move的优势

  • 与Rust一样,Move允许用户通过并行处理实现更高的吞吐量
  • 作为一种解释型语言,Move没有编译器,因此也就没有编译器的缺陷
  • Move在设计时考虑到了安全问题,旨在消除诸如重入性这样的漏洞。

Move的劣势

  • 新的语言,工具、资源和社区有限
  • 比高级语言更难学习
  • 解释型语言的性能通常比类似的编译型语言要弱一些
  • 没有多链兼容性,因为到目前为止还没有主要的区块链采用Move。

Move的采用

Aptos和Sui是目前唯一使用Move作为其主要编程语言的区块链项目,现在说该语言的成功还为时过早。

结语

Solidity是区块链开发中最受欢迎的编程语言,因为它的用户友好性和在以太坊上的广泛使用。不过,在过去,Solidity 的一些漏洞,造成了昂贵的损失。相比之下,Rust和Move由于其更高的安全性和效率而成为有趣的替代品。

虽然Rust已经在Solana上提供了更好的性能,并显示出不错的采用率,而Move被设计为提供三者中最安全的解决方案,消除了Solidity的许多漏洞。

重要的是要记住,这三种语言都是比较新的。潜在的安全隐患尚未被发现,它们的长期成功还有待观察。

虽然提供了智能合约开发的基础,但编程语言只是决定区块链及其dApps的速度和安全性的一个因素。

然而,像Move这样的新方法会在可扩展性和安全性的竞赛中推动竞争和创新,值得我们关注。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
张小雨
张小雨 - 程序猿

53 篇文章, 1344 学分