{"content":{"title":"Solidity vs Move vs Rust: 智能合约编程语言的演变","body":"> * 原文链接： https://yieldapplabs.medium.com/solidity-vs-rust-move-e6fec78f77df\r\n> * 译文出自：[登链翻译计划](https://github.com/lbc-team/Pioneer)\r\n> * 译者：[张小雨](https://learnblockchain.cn/people/390)  校对：[Tiny 熊](https://learnblockchain.cn/people/15)\r\n> * 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/5128)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n![img](https://img.learnblockchain.cn/2022/11/28/1_ZRBfZ4uByU-S-wtJkKvNKA.png)\r\n\r\n区块链的安全性、速度和开发者活动都取决于其底层编程语言和虚拟机。两种最流行的编程语言是Solidity及 Rust，Solidity用于为以太坊虚拟机（EVM）构建去中心化的应用程序，而Rust则用于Solana上的dApps。\r\n\r\n然而，由于最新出现的智能合约的区块链，Aptos和Sui，使用Move作为他们的基础编程语言，以实现更安全和可扩展的第1层，所以对这三者做一个比较是非常合适的。\r\n\r\n## 编码术语\r\n\r\n### 高级语言(HLL)\r\n\r\n高级语言通常对开发人员来说更容易阅读和编写，因为与更接近机器代码的低级语言相比，它们更接近人类语言。为了让计算机能够阅读和执行源代码，首先需要将其编译成机器语言。\r\n\r\n### 低级语言(LLL)\r\n\r\nLLL对开发者来说更难读和写，因为它们类似于机器代码。因此，它们可以在没有中间编译器或解释器的情况下转换为机器代码。\r\n\r\n### 运行时环境\r\n\r\n在区块链上，虚拟机作为操作系统的运行时环境。\r\n\r\n### 解释型或编译型编程语言\r\n\r\n编程语言将自己区分为解释型或编译型语言。\r\n\r\n编译型编程语言需要从源代码转换为可执行的字节码。\r\n\r\n另一方面，解释型编程语言在运行时被解释器逐行读取和执行。\r\n\r\n因此，解释型语言通常比编译型语言要慢。然而，解释型语言不容易出现错误，因为代码的调试是在运行时进行的，而且中间的编译表示被删除了。\r\n\r\n在编译型语言中，即使源代码无缺陷，也可能出现编译器自身的错误而出现错误，所以它们更容易出错。\r\n\r\n### 顺序或并行处理\r\n\r\n今天，大多数主要的区块链使用交易顺序执行，这意味着运行时环境一次只能处理一个交易。这是网络吞吐量的一个主要瓶颈。\r\n\r\n相比之下，一些编程语言能够实现并行处理（或并行执行），与顺序处理相比，允许更高的TPS，而不需要零知识证明等数学上的解决方案。\r\n\r\n并行执行可以识别独立的交易，以并发地执行它们。然而，依赖性交易会影响另一个交易的执行，因此必须依次执行。\r\n\r\n![img](https://img.learnblockchain.cn/2022/11/28/1_HmJPw2qve1YxpGUO5N5RGw.png)\r\n\r\n## Solidity - EVM智能合约的编程语言\r\n\r\n以太坊是第一个可编程的区块链，至今仍是Web3生态系统发展的基础性开发环境。为了在以太坊上编程，你需要首先利用Solidity创建一个 \"智能合约\"--这是Gavin Wood博士在2014年为以太坊的智能合约专门设计的定制语言。然后，智能合约在以太坊虚拟机（EVM）上运行。\r\n\r\n作为一个HLL，Solidity使软件开发更方便用户使用。此外，Solidity受到其他流行语言（如C++、Java和Python）的影响并与之相似，使新的开发人员更容易在EVM生态系统中开始开发。\r\n\r\n然而，作为一种编译型语言，Solidity更容易出现错误，因为将其翻译成机器可读的字节码需要额外的步骤。因此，尽管智能合约经历了极其复杂和昂贵的审计，我们仍然看到智能合约漏洞在以太坊生态系统中被利用。\r\n\r\n今天，Solidity是一个独立的开源项目，在GitHub上进一步完善和发展。虽然它不是唯一可以用来为以太坊写代码的语言，但Solidity的语法是专门针对EVM设计的。\r\n\r\n### Solidity的优势\r\n\r\n- HLL，因此更容易学习和用户友好\r\n- 丰富的优秀开发者工具和开源库\r\n- 是Web3中使用最多的语言\r\n- 与C++、Python和JavaScript等语言类似\r\n- 开发人员在他们已经熟悉的语言中犯错误的可能性较小\r\n- 良好的社区支持\r\n- 现有的标准（ERC20和ERC721）\r\n- 多链兼容（Layer2、侧链和EVM兼容的第一层区块链）。\r\n\r\n### Solidity的劣势\r\n\r\n- 作为一种编译型语言，Solidity更容易出现可利用的bug\r\n- 顺序处理是网络吞吐量的一个瓶颈\r\n\r\n### Solidity的采用\r\n\r\n\r\n在撰写本报告时，Solidity占所有智能合约锁定总价值的87.45%，其次是Vyper（8.95%）和Rust（2.31%)\r\n\r\n![img](https://img.learnblockchain.cn/2022/11/28/1_tYu-TLKtK3rVevSpn6tcNg.png)\r\n\r\n## Rust - Solana的主要编程语言\r\n\r\n当许多生态系统试图通过兼容EVM来吸引新的开发者时，Solana采取了一条不同的道路，它有自己独特的编程语言，自推出以来，其采用率有了令人印象深刻的增长。\r\n\r\nRust于2011年推出，与Solidity不同，它从一开始就被设计为一种通用的编程语言，不限于智能合约程序。\r\n\r\n与Solidity相比，Rust是一种经过编译的、低级别的、更复杂的编程语言。因此，它对新开发者的吸引力可能较小，因为它更难学习。然而，Web3生态系统以外的许多开发人员已经熟练掌握了Rust，使其更容易开始在Solana或Near项目上工作。\r\n\r\nRust最有名的是作为Solana的主要编程语言，它有助于实现其他区块链只能梦想的吞吐量。对许多人来说，与Solidity相比，它也是一种更强大、更通用的语言，因为它允许开发人员有效地管理内存并利用并行处理。\r\n\r\n### Rust的优势\r\n\r\n- 作为一种面向机器的编译型语言，Rust提供了高速度和良好的内存效率\r\n- Rust允许通过并行处理实现更高的贯穿性\r\n- Rust通过所有权和借用原则实现了内存安全，在编译时消除了与内存有关的错误。\r\n- 由于Rust的开发者通常是更有经验的开发者，因此可以预计Solana上的智能合约（称为程序）不容易出现错误。\r\n\r\n**Rust的劣势**\r\n\r\n- 作为一个LLL，Rust有一个陡峭的学习曲线，通常更难学习\r\n- 大型项目的程序编译可能需要10分钟。\r\n- 今天，只有少数几个区块链支持Rust，即Solana和Near\r\n\r\n## Rust的采用\r\n\r\n虽然使用Solidity作为主要编程语言的区块链仍然拥有最大的活跃开发者份额，但增长速度较快。\r\n\r\n![img](https://img.learnblockchain.cn/2022/11/28/1_jWY6BGA9lpfCW27UpLyAjw.png)\r\n\r\n## Move\r\n\r\nMove于2019年推出，是Aptos和Sui等新层一链中使用的最现代的编程语言之一。Move以Rust为基础，但由Meta为其Diem区块链专门设计，以解决现有智能合约语言的问题。\r\n\r\n因此，Move背后的团队有机会研究Web3空间的现有语言，并从它们的缺点中学习。\r\n\r\n最重要的是，Move被设计为一种面向对象的语言，用于编写具有安全资源管理的智能合约或程序。资产被定义为一种 \"资源\"，它可以在账户之间移动，但不能被重复消费或复制。\r\n\r\n这使得编写无错误的代码非常容易，与Solidity相比，资产的转移必须手动指定，增加了编写错误代码的可能性。\r\n\r\n因此，Move消除了重入攻击的可能性，这是对Solidity智能合约最糟糕的攻击之一。\r\n\r\n作为一种解释型语言，Move的性能与编译型语言相比要慢一些。然而，由于缺乏编译器和编译器错误，Move在本质上比Solidity更安全。\r\n\r\n此外，Move继承了Rust的内存效率和并行处理，使其成为整体性能的可靠选择。\r\n\r\n### Move的优势\r\n\r\n- 与Rust一样，Move允许用户通过并行处理实现更高的吞吐量\r\n- 作为一种解释型语言，Move没有编译器，因此也就没有编译器的缺陷\r\n- Move在设计时考虑到了安全问题，旨在消除诸如重入性这样的漏洞。\r\n\r\n### Move的劣势\r\n\r\n- 新的语言，工具、资源和社区有限\r\n- 比高级语言更难学习\r\n- 解释型语言的性能通常比类似的编译型语言要弱一些\r\n- 没有多链兼容性，因为到目前为止还没有主要的区块链采用Move。\r\n\r\n### Move的采用\r\n\r\nAptos和Sui是目前唯一使用Move作为其主要编程语言的区块链项目，现在说该语言的成功还为时过早。\r\n\r\n## 结语\r\n\r\nSolidity是区块链开发中最受欢迎的编程语言，因为它的用户友好性和在以太坊上的广泛使用。不过，在过去，Solidity 的一些漏洞，造成了昂贵的损失。相比之下，Rust和Move由于其更高的安全性和效率而成为有趣的替代品。\r\n\r\n虽然Rust已经在Solana上提供了更好的性能，并显示出不错的采用率，而Move被设计为提供三者中最安全的解决方案，消除了Solidity的许多漏洞。\r\n\r\n\r\n重要的是要记住，这三种语言都是比较新的。潜在的安全隐患尚未被发现，它们的长期成功还有待观察。\r\n\r\n虽然提供了智能合约开发的基础，但编程语言只是决定区块链及其dApps的速度和安全性的一个因素。\r\n\r\n然而，像Move这样的新方法会在可扩展性和安全性的竞赛中推动竞争和创新，值得我们关注。"},"author":{"user":"https://learnblockchain.cn/people/390","address":null},"history":"QmXRqSFpfFLnas6j1KMESm55xu5aa7kUdkQpYmpATzBBTT","timestamp":1669630414,"version":1}