---
title: "Solidity 与 Rust：你需要了解的一切"
description: "相似点、差异，以及如何学习 Solidity 和 Rust"
---

# Solidity 与 Rust：你需要了解的一切

Solidity 和 Rust 是[两种主要的编程语言](http://www.alchemy.com/overviews/web3-programming-languages)，分别被 web3 开发者用于在 Ethereum Virtual Machine 兼容区块链和 Solana 上构建 web3 应用。Ethereum 和 Solana 是全球领先的基于公共智能合约的两条区块链。

在本文中，我们将介绍这两种 web3 编程语言，并了解它们为何被这些强大的区块链所采用。

## **什么是 Solidity？**

[**Solidity**](https://www.alchemy.com/overviews/solidity) 是一种面向对象、高级、静态类型的编程语言，用于在 Ethereum 上实现智能合约，由 Ethereum 团队在 Christian Reitwiessner 的带领下创建。

以下是对相关术语的解释：

- **面向对象** - 一种以数据和对象为中心而非以逻辑和函数为中心的软件开发方式
- **高级** - 独立于计算机硬件架构、使软件开发更易于使用的语言
- **静态类型** - 在编译期检查错误和类型的语言

Solidity 设计用于运行在 Ethereum Virtual Machine（EVM）上，EVM 是一种类似虚拟计算机的运行环境，用于运行软件程序。EVM 运行的“程序”被称为智能合约，智能合约用 Solidity 编写。

### **支持 Solidity 的区块链**

除 Ethereum 外，以下区块链也支持 Solidity：

- **Polygon** - 作为 Ethereum 的侧链，Polygon 允许开发者以较低的交易费用构建可扩展的去中心化应用
- **Arbitrum** - 一种 layer 2 扩容方案，旨在通过将计算移出 [Ethereum 主网](https://www.alchemy.com/rpc/ethereum)来降低交易费用并缓解交易拥堵
- **Optimism** - 一条与 EVM 兼容的 layer 2 区块链，使用 optimistic rollup 来降低交易费用和网络拥堵
- **Polkadot** - 一条可互操作的公共区块链，Polkadot 利用其 parachain 使不同的区块链（例如 Astar）能够相互交互
- **Avalanche** - Avalanche 是一条 Proof-of-Stake 区块链，旨在解决区块链不可能三角问题
- **Celestial** - Celestial 是一条为 Ethereum 提供数据可用性的区块链，负责对交易进行排序和发布，但不处理计算
- **Fuel** - 一条模块化区块链，将执行与数据可用性、共识分离，以实现灵活的吞吐量和最大程度的安全性

## **什么是 Rust？**

**Rust 是一种低级、多范式的编程语言，注重类型安全和性能，使开发者能够构建快速且健壮的应用程序。**

我们来更详细地了解一下。

- **低级** - Rust 的架构与计算机处理器的架构类似，这使得编写高效、高性能的代码更加容易
- **多范式** - 编程语言有不同的类型（例如函数式、动态、过程式等），多范式语言支持不止一种类型

### **Rust 与 Solana**

Solana 是一条开源的可编程区块链，这意味着与 Ethereum 一样，它也支持智能合约（程序）功能，并常被认为是全球最快的公链，出块时间为 400 毫秒，每秒可处理 50,000 笔交易。

Solana 允许使用 C 和 C++ 进行开发，但以 Rust 作为其核心编程语言。与 Solidity 不同，Rust 并非专为 Solana 创建，Rust 的存在早于 Solana 许多年。不过，由于其高性能特性，Rust 被选为核心编程语言。

要开始使用 Rust 在 Solana 上构建应用，开发者只需[找到一个 Solana RPC provider](https://www.alchemy.com/overviews/solana-rpc)。

### **支持 Rust 的区块链**

除 Solana 外，以下区块链也支持 Rust 或基于 Rust 的编程语言：

- **Near** - Near 是一条基于 layer one proof of stake 的区块链，它使用分片（sharding）来解决可扩展性问题
- **Aptos** - Aptos 是一条 layer one 区块链，基于 Move 构建，Move 是一种基于 Rust 用于实现智能合约的编程语言
- **Sui** - Sui 是首个无需许可（permissionless）区块链的实现，运行以 Move 编写的智能合约

## **Solidity 与 Rust 的比较**

在明确了这两种语言分别是什么之后，本节将对它们进行比较。

### **Solidity 与 Rust 有哪些相似之处？**

**Solidity 与 Rust 的主要相似之处在于它们的多链兼容性和图灵完备性。**

#### **1. 多链兼容性**

尽管 Solidity 是专为 Ethereum 设计的，但它同样支持 layer 2 区块链、侧链、[模块化区块链](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains)，以及像 Polkadot 和 Avalanche 这样的兼容 EVM 的 layer 1 区块链。

同样，Rust 支持包括 Near 和 Solana 在内的多种区块链，并且是启发了 Move 和 Sui 语言的编程语言。此外，还存在基于 Polkadot 的 substrate 框架的 Rust 实现。

#### **2. 图灵完备性**

Rust 和 Solidity 都是图灵完备的语言。图灵完备语言是指能够解决任何计算问题（无论其复杂程度如何）的语言。这一特性是编程语言从 **Alan Turing** 创建的图灵机继承而来的。

### **Solidity 与 Rust 有哪些区别？**

**除了各自所支持的区块链不同之外，Solidity 与 Rust 之间的两个主要区别在于：Solidity 是一种高级、面向对象的语言，而 Rust 是一种低级、多范式的语言。**

#### **1. 高级语言 vs. 低级语言**

Solidity 是一种高级语言，相对于计算机系统架构提供了较高程度的抽象。因此，[Solidity 学习起来更简单](https://www.alchemy.com/overviews/learn-solidity)、更易于使用，是一种更面向用户的语言。相比之下，Rust 是一种更接近计算机硬件的低级语言，具有良好的内存效率和速度，是一种更面向机器的语言。

#### **2. 面向对象 vs. 多范式**

编程范式是解决给定问题时所采用的方法或风格。Solidity 是一种面向对象的语言，因为它使用面向对象范式来解决问题。

相反，Rust 是一种多范式语言，这意味着它允许使用不同的范式来解决问题。它所支持的范式包括面向对象、函数式和命令式等。

### **使用 Rust 而非 Solidity 构建应用有哪些优势？**

使用 Rust 而非 Solidity 构建 web3 [应用](https://www.alchemy.com/dapps/top/defi-dapps)的两个主要优势是：Rust 的内存安全特性和高速性能，使开发者的开发过程更安全，也使应用对用户而言性能更高。

#### **1. 内存安全**

内存安全是某些编程语言所具备的一种特性，可防止程序员犯下某些与内存相关的错误。Rust 通过所有权（ownership）和借用（borrowing）原则实现内存安全。

Rust 通过在编译期消除与内存相关的 bug 来确保内存安全，这使其无需像其他内存安全语言那样使用垃圾回收器（garbage collector），从而实现内存高效。

#### **2. 速度与高输出**

Rust 能够创建具有高输出和高性能的去中心化程序，这一特性对于大规模应用而言至关重要。由于 Rust 无需使用垃圾回收器即可实现内存安全，因此其运行效率更高。

### **使用 Rust 而非 Solidity 构建 Web3 应用有哪些取舍？**

**使用 Rust 而非 Solidity 构建 web3 应用的两个主要取舍是：Rust 的编译器速度比 Solidity 慢，并且 Rust 通常更难学习。**

#### **1. 编译速度慢**

Rust 编译器速度较慢。Rust 使用低级虚拟机（LLVM）来生成代码，这部分占据了 Rust 代码库的很大一部分，并且在编译期间重新生成机器代码需要花费不少时间。有时大型项目的程序编译会耗时超过 10 分钟。

#### **2. 更难学习**

Rust 之所以难以学习，原因有很多，其中之一是它与众不同。熟悉其独特的所有权和借用系统可能会让人望而生畏。此外，与其他一些语言不同，Rust 程序难以直接复制粘贴使用，你需要从零开始构建整个代码库。

### **使用 Solidity 而非 Rust 构建应用有哪些优势？**

**使用 Solidity 而非 Rust 构建去中心化应用的两个主要优势是：Solidity 更容易学习，并且 Solidity 拥有更多的开发者工具。**

#### **1. 更容易学习**

Solidity 是一种高级语言，这使其代码具有良好的可读性和可理解性，并且其语法与 JavaScript 类似，因此有 JavaScript 编写经验的开发者学习 Solidity 不会感到困难。

#### **2. 大量的开发者工具**

Solidity 拥有大量优秀的开发者工具，并得到诸如 OpenZeppelin 等平台的支持，该平台提供用于安全智能合约开发的开源库。

Solidity 还拥有多个[开发环境（IDE）](https://www.alchemy.com/overviews/solidity-ide)，例如 Remix 在线 IDE 和作为本地开发环境的 Hardhat。这些 IDE 提供了各种工具和功能，使去中心化应用的开发更加轻松。

### **使用 Solidity 而非 Rust 构建 Web3 应用有哪些取舍？**

**使用 Solidity 而非 Rust 构建 web3 应用的两个主要取舍是：Solidity 的整数溢出问题以及静态分析的困难，给开发者的构建工作带来了挑战。**

#### **1. 整数溢出与下溢**

当一个数字超出某个数据类型可存储的范围（即其字节大小）时，就会发生整数溢出或下溢。例如，\( 0 - 1 \) 本应得到 \( -1 \)，但实际却会抛出错误。这种情况通常出现在 Solidity 0.8 之前的早期版本中。

#### **2. 难以进行静态分析**

静态分析是指在不实际运行代码的情况下对其进行分析和排查问题的过程。由于 Solidity 具有图灵完备的特性，代码可能存在众多潜在的执行结果，因此这类调试具有一定难度。

## **我应该使用 Solidity 还是 Rust 进行开发？**

Rust 和 Solidity 都旨在支持智能合约及可扩展应用的构建。因此，这个问题的答案取决于你自身的偏好以及你希望构建所处的区块链生态系统。
