{"content":{"title":"Solidity vs Move vs Rust：智能合约编程语言的演变","body":"![image.png](https://img.learnblockchain.cn/attachments/2023/01/Ct78ChA363c78b2b4caf7.png)\r\n区块链的安全性、速度和开发人员活动取决于其底层编程语言和虚拟机。两种最流行的编程语言是 Solidity，用于为以太坊虚拟机 (EVM) 构建去中心化应用程序，以及用于在 Solana 上构建 dApp 的 Rust。\r\n\r\n然而，由于最新出现的基于智能合约的区块链 Aptos 和 Sui 使用 Move 作为其更安全和可扩展的第 1 层的基础，因此对这三者进行并排比较是合适的。\r\n# 编码术语\r\n## 高级语言 (HLL)\r\nHLL 通常更易于开发人员阅读和编写，因为与更接近机器代码的低级语言相比，它们更接近人类语言。计算机要读取和执行源代码，首先需要将其编译成机器语言。\r\n\r\n## 低级语言 (LLL)\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相比之下，一些编程语言支持并行处理（或并行执行），与顺序处理相比允许更高的 TPS，而不需要像零知识证明这样的数学驱动解决方案。\r\n\r\n并行执行识别独立事务以同时执行它们。然而，依赖事务会影响另一个事务的执行，因此必须按顺序执行。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/01/XWExaoqg63c78b9fc6134.png)\r\n\r\n# Solidity——EVM 智能合约的编程语言\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- HLL，因此更容易学习和用户友好\r\n- 大量优秀的开发人员工具和开源库\r\n- Web3 中使用最多的语言\r\n- 类似于 C++、Python 和 JavaScript 等语言\r\n- 开发人员不太可能在他们已经熟悉的语言中犯错误\r\n- 良好的社区支持\r\n- 现有标准（ERC20 和 ERC 721）\r\n- 多链兼容性（第二层区块链、侧链和 EVM 兼容的第一层区块链）\r\n## Solidity 的缺点\r\n- 作为一种编译型语言，Solidity 更容易出现可利用的错误\r\n- 顺序处理是网络吞吐量的瓶颈\r\n\r\n# Solidity 使用\r\n在撰写本文时，Solidity 占智能合约锁定总价值的 87.45%，其次是 Vyper (8.95%) 和 Rust (2.31%)\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/01/MjkZ5kFv63c78c2b06aef.png)\r\n\r\n# Rust——Solana 的主要编程语言\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- 作为一种面向机器的编译型语言，Rust 提供了高速和良好的内存效率\r\n- Rust 允许通过并行处理实现更高的吞吐量\r\n- Rust通过所有权和借用原则实现内存安全，在编译时消除与内存相关的错误\r\n- 由于 Rust 开发人员通常是更有经验的开发人员，因此预计 Solana 上的智能合约（称为程序）不太容易出现错误\r\n\r\n## Rust的缺点\r\n- 作为 LLL，Rust 的学习曲线陡峭，通常更难学\r\n- 大型项目的程序编译最多可能需要 10 分钟\r\n- 今天，只有少数区块链支持 Rust，即 Solana 和 Near\r\n\r\n## Rust的使用\r\n虽然使用 Solidity 作为主要编程语言的区块链继续拥有最大份额的活跃开发人员，但 Solana 目前的增长速度超过了以太坊。\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/01/Y2MxTjpV63c78cb04978d.png)\r\n# Move\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 相比，在 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- 与 Rust 一样，Move 允许用户通过并行处理实现更高的吞吐量\r\n- 作为一种解释型语言，Move 没有编译器，因此没有编译器错误\r\n- Move 的设计考虑到了安全性，旨在消除重入等漏洞\r\n## Move的缺点\r\n- 工具、资源和社区有限的新语言\r\n- 比高级语言更难学\r\n- 解释型语言的性能通常比同类编译型语言差\r\n- 没有多链兼容性，因为目前还没有主要的区块链采用 Move\r\n## Move使用\r\nAptos 和 Sui 是目前唯一使用 Move 作为主要编程语言的区块链项目，现在说该语言会有多成功还为时过早。\r\n\r\n# 结论\r\n由于其用户友好性和在以太坊上的广泛使用，Solidity 是最流行的区块链开发编程语言。然而，它有几个漏洞，在过去曾导致代价高昂的错误。相比之下，Rust 和 Move 是有趣的替代方案，因为它们提高了安全性和效率。\r\n\r\n虽然 Rust 已经在 Solana 上提供了更好的性能并显示出令人印象深刻的采用率，但 Move 旨在提供三者中最安全的解决方案，消除了 Solidity 的许多漏洞。\r\n\r\n重要的是要记住这三种语言都是相对较新的。潜在的安全隐患尚未被发现，它们的长期成功还有待观察。\r\n\r\n在为智能合约开发提供基础的同时，编程语言只是决定区块链及其 dApp 的速度和安全性的一个因素。\r\n\r\n然而，像 Move 这样的新方法只会在可扩展性和安全性的竞争中推动竞争和创新，我们将密切关注这个新兴生态系统的发展和进步。"},"author":{"user":"https://learnblockchain.cn/people/12138","address":null},"history":null,"timestamp":1674022438,"version":1}