---
title: "Solidity vs. Rust：你需要知道的一切"
description: "相似之處、差異，以及如何學習 Solidity 和 Rust"
---

# Solidity vs. Rust：你需要知道的一切

Solidity 和 Rust 是 web3 開發者用來在 Ethereum Virtual Machine 相容區塊鏈與 Solana 上分別建構 web3 應用程式的兩種主要[程式語言](http://www.alchemy.com/overviews/web3-programming-languages)。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** - 一種第二層擴容方案，旨在透過將運算移出 [Ethereum mainnet](https://www.alchemy.com/rpc/ethereum)，降低交易費用與交易壅塞
- **Optimism** - 一個與 EVM 相容的第二層區塊鏈，使用樂觀 rollup 來降低交易費用與網路壅塞
- **Polkadot** - 一個可互通的公開區塊鏈，Polkadot 利用其平行鏈（parachain）讓不同區塊鏈（例如 Astar）能彼此互動
- **Avalanche** - Avalanche 是一個權益證明區塊鏈，旨在解決區塊鏈三難困境
- **Celestial** - Celestial 是一個為 Ethereum 提供資料可用性的區塊鏈，負責排序與發布交易，但不處理運算
- **Fuel** - 一個模組化區塊鏈，將執行與資料可用性、共識分離，以實現彈性的吞吐量與最大程度的安全性

## **什麼是 Rust？**

**Rust 是一種低階、多典範程式語言，著重於型別安全與效能，讓開發者能建構快速且強健的應用程式。**

讓我們更詳細地說明。

- **低階** - Rust 的架構與電腦處理器類似，這使得撰寫機器高效、高效能的程式碼更加容易
- **多典範** - 語言有不同的類型（例如函數式、動態、程序式等），而多典範語言則支援不止一種類型

### **Rust 與 Solana**

Solana 是一個開源的可程式化區塊鏈，這代表它和 Ethereum 一樣支援智能合約（程式）功能，且經常被視為全球速度最快的公開區塊鏈，其區塊時間為 400 毫秒，並能夠每秒處理 50,000 筆交易。

Solana 允許使用 C 和 C++ 進行開發，但以 Rust 作為其核心程式語言。與 Solidity 不同，Rust 並非專為 Solana 而創建，Rust 在 Solana 出現之前已存在多年。不過，它因其高效能特性而被選為核心程式語言。

若要開始使用 Rust 在 Solana 上進行開發，開發者只需要[找一個 Solana RPC provider](https://www.alchemy.com/overviews/solana-rpc)。

### **支援 Rust 的區塊鏈**

除了 Solana 之外，以下是其他支援 Rust 或以 Rust 為基礎的程式語言的區塊鏈：

- **Near** - Near 是一個以權益證明為基礎的第一層區塊鏈，它使用分片（sharding）來解決可擴展性問題
- **Aptos** - Aptos 是一個以 move 為基礎的第一層區塊鏈，move 是一種以 rust 為基礎、用於實作智能合約的程式語言
- **Sui** - Sui 是第一個實作無需許可（permissionless）區塊鏈的專案，它執行以 move 撰寫的智能合約

## **Solidity vs. Rust**

既然我們已經確立了這些語言的定義，接下來我們將在本節中對它們進行比較與對照。

### **Solidity 與 Rust 有哪些相似之處？**

**Solidity 與 Rust 的主要相似之處在於它們的多鏈相容性與圖靈完備性。**

#### **1. 多鏈相容性**

雖然 Solidity 是專為 Ethereum 設計的，但它也支援第二層區塊鏈、側鏈、[模組化區塊鏈](https://www.alchemy.com/overviews/modular-vs-monolithic-blockchains)，以及與 EVM 相容的第一層區塊鏈，如 Polkadot 和 Avalanche。

同樣地，Rust 支援多種區塊鏈，包括 Near 和 Solana，並且它也是啟發 Move 和 Sui 語言的程式語言。此外，也有使用 Polkadot 的 substrate 框架實作的 Rust 版本。

#### **2. 圖靈完備性**

Rust 和 Solidity 都是圖靈完備語言。圖靈完備語言是指能夠解決任何複雜度的計算問題的語言。這是程式語言從 **Alan Turing** 所建立的圖靈機（Turing machine）繼承而來的特性。

### **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 透過在編譯期間消除與記憶體相關的錯誤來確保記憶體安全，這使得它無需像其他記憶體安全語言那樣使用垃圾回收器（garbage collector），也能達到記憶體效率。

#### **2. 速度與高輸出量**

Rust 有能力建立具有高輸出量與高效能的去中心化程式，這是大規模應用程式所必需的特性。Rust 之所以能更高效地運作，是因為它能在不使用垃圾回收器的情況下達成記憶體安全。

### **使用 Rust 而非 Solidity 建構 Web3 應用程式有哪些取捨？**

**使用 Rust 建構 web3 應用程式相對於 Solidity 的兩大主要取捨是：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 建構 web3 應用程式相對於 Rust 的兩大主要取捨是：Solidity 的整數溢位問題與靜態分析困難，讓開發者建構應用程式時面臨困難。**

#### **1. 整數溢位與下溢**

當數字超過資料型別所能儲存的範圍（其位元組大小）時，就會發生整數溢位或下溢。舉例來說，\( 0 - 1 \) 應該得到 \( -1 \)，但它反而會拋出錯誤。這種情況通常發生在早期版本的 Solidity 中，也就是 solidity 0.8 之前的版本。

#### **2. 難以進行靜態分析**

靜態分析是一種在不實際執行程式碼的情況下對其進行分析與疑難排解的過程。由於 solidity 具有圖靈完備的特性，程式碼可能存在無數種潛在結果，這使得這類除錯工作充滿挑戰。

## **我應該使用 Solidity 還是 Rust 進行開發？**

Rust 和 Solidity 都是為支援智能合約與可擴展應用程式的建構而設計的。因此，這個問題的答案取決於你個人的偏好，以及你想要建構所在的區塊鏈生態系統。
