Rust - Arch Linux 中文维基

跳至內容

# Rust

出自 Arch Linux 中文维基

相關文章

- Rust 軟體打包準則

翻譯狀態：

- 本文（或部分內容）譯自 Rust，最近一次同步於 2025-10-03，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

根據維基百科：

  Rust 是由 Mozilla 主導開發的通用、編譯型程式語言。設計準則為「安全、並發、實用」，支持函數式、並髮式、過程式以及面向對象的程序設計風格。Rust 的設計目標之一，是要使設計大型的網際網路客戶端和伺服器的任務變得更容易。因此更加強調安全性、存儲器配置、以及並發處理等方面的特性。

## 語言核心

### Rust 核心庫

Rust 核心庫是 Rust 標準庫的基礎，無需依賴。它直接與 LLVM 原語對接，使 Rust 可以與平台和硬體無關。正是這種與 LLVM 的集成，使 Rust 比 Clang 編譯的同樣功能的 C 語言程序性能更高，使得用 libcore 設計的 Rust 軟體比 C 語言的更底層。為嵌入式平台設計軟體的開發者可通過 `#![no_std]` 放棄使用標準庫，只使用語言自帶的核心庫，以獲得更小的二進制文件和更好的性能。然而，由於大多數庫都需要標準庫，使用 `#![no_std]` 意味著來自 Rust 社區的軟體支持會受限。

### Rust 標準庫

Rust 標準庫提供了方便的高級抽象，用於開發大多數可移植的 Rust 軟體。標準庫包含 `Vec` 和 `String` 類型、大量的語言原語方法、大量的標準宏、I/O 和多線程支持、使用 `Box` 實現的堆分配，以及更多核心庫不具有的高級特性。

### 發布周期

與 Firefox 類似，Rust 使用每六周的發布周期。在每個新版本中，核心庫和標準庫都會得到改進，以支持更多的平台、提高性能，以及為穩定版本增加新特性。

## 安裝

安裝 Rust 主要有兩種方式：

- 直接安裝。如果你只使用 Rust 來運行或安裝軟體，推薦使用此方式。
- Rustup 安裝。如果你打算進行 Rust 編程，推薦使用此方式。

### 直接安裝

要從 Arch Linux 官方軟體庫中安裝最新的穩定版 Rust，安裝 rust包。這將安裝 `rustc` 編譯器和 Cargo。

除此之外還有開發版的 Rust 編譯器 rust-nightly-binAUR 和 rust-gitAUR 可用，分別用於預編譯的通用二進制文件、編譯器與系統庫的構建。

### 通過 rustup 安裝

為開發軟體，官方推薦的 Rust 安裝方法是使用 rustup 工具鏈管理器安裝。

使用 rustup 工具鏈管理器而不是倉庫中獨立的 Rust 軟體包的優點，主要是能為多個目標平台（Windows、macOS、Android）和架構（x86、x86_64、arm）安裝多個工具鏈（穩定版、測試版、開發版）。需要注意的是，安裝 rustup 並不會自動安裝 Rust 工具鏈，使用任何方法更新 rustup 也不會自動提供 Rust 的最新工具鏈版本。有關工具鏈的更多信息，請參見#用法或 rustup 工具鏈文檔。

Rustup 的安裝有兩種方式，一種是通過 Arch Linux 自帶的 pacman，另一種是通過 Rust 官方安裝腳本。

#### Arch Linux 軟體包

rustup包 在 Arch Linux 軟體倉庫中可用。注意，以這種方式安裝時，`rustup self update` 將不起作用，只能使用 pacman 更新 rustup。然而，這一變化並不適用於其他 rustup 功能，例如用於更新 Rust 工具鏈的 `rustup update`。

使用此軟體包的優點是 Rust 可執行文件都在 `/usr/bin` 目錄內，而不是 `~/.cargo/bin`，因此避免了在 `PATH` 中添加其他目錄的麻煩。

注意：rustup包 軟體包默認不會安裝工具鏈。它提供了 `/usr/bin/rustup` 與 `/usr/bin/rustc`、`/usr/bin/cargo` 等普通二進制文件之間的符號連結。如上所述，要使上述 Rust 命令能工作，用戶仍需手動安裝工具鏈。

為安裝工具鏈，需要指定使用的版本號或使用穩定版（`stable`）、測試版（`beta`）、開發版（`nightly`）：

    $ rustup default stable

#### 構建 Rust 時更新 LLVM

由於 Rust 採用引導策略進行構建，因此在構建前必須先安裝一個已經可用的 Rust 軟體包。當構建使用的 llvm包 版本高於官方倉庫中的版本時，需要提供用於構建倉庫中 Rust 版本的舊版 llvm-libs包 動態連結庫才能進行構建。

示例：官方倉庫提供 llvm-18.1.8，需要針對 llvm-19.1.6 構建。

引導步驟需要來自 llvm-libs-18.1.8 的 `/usr/lib/libLLVM.so.18.1` 文件。該文件可以通過手動放置到構建根目錄，或通過安裝諸如 llvm15-libs包 之類的軟體包來提供。

#### 上游安裝腳本

Rustup 也可通過 rustup 官方網頁下載並手動安裝。

使用下面命令下載：`curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs -o rust.sh`，查看腳本：`less ./rust.sh`，運行腳本以安裝 rustup：`./rust.sh`。此腳本僅對當前登錄 Shell 的配置文件進行 PATH 修改。在註銷並重新登錄之前需要`source ~/.cargo/env`。在此之後升級 rustup 需執行 `rustup self update`。

該腳本自動安裝並激活默認工具鏈（rust包 所使用的工具鏈），因此無需手動安裝工具鏈即可使用 Rust。

警告：正如 Rust 文檔所建議的，執行 `curl some-url | sh` 會帶來安全風險，因為它執行的是未知的、甚至可能在下載過程中被破壞的代碼。因此建議在執行腳本之前，手動下載並檢查。
注意：在運行 `rustup` 時請確保 `~/.cargo/bin` 在 `PATH` 內。

#### 用法

可能需要手動安裝工具鏈，例如穩定版（`stable`）、測試版（`beta`）、開發版（`nightly`）或特定版本（`1.58.0`）。如果想要使用或測試另一個工具鏈，也需要如下操作：

    $ rustup toolchain install toolchain

現在可通過 `rustup run toolchain command` 來執行 Rust 命令。然而，如果要直接使用這些命令，則需要激活該工具鏈：

    $ rustup default toolchain

使用 `rustc -V` 檢查目前安裝的 Rust 版本:

    $ rustc -V

    rustc 1.58.0 (02072b482 2022-01-11)

注意：Rust 自身並不會進行連結操作，因此需要確保已安裝連結器。可使用 gcc包，否則 Rust 會提示以下錯誤：`error: linker `cc` not found.`
注意：

Rustup 不會自動更新提供的工具鏈。如果用戶希望使用最新版本的 Rust、crates 以及其他相關包，他們可能需要偶爾使用 `rustup update` 來更新他們的工具鏈。有關更多信息，請參見 官方 rustup 文檔。

### 測試安裝結果

通過構建一個小程序來測試 Rust 是否已正確安裝，源碼如下所示：

    ~/hello.rs

    fn main() {
        println!("Hello, World!");
    }

可使用 `rustc` 編譯，然後運行：

    $ rustc hello.rs && ./hello

    Hello, World!

## 交叉編譯

### 使用 rustup

使用 rustup 可輕鬆地交叉編譯。rustup 支持許多交叉編譯目標，完整列表可通過執行 `rustup target list` 查看。

例如，使用 Windows 穩定通道安裝 Rust，使用 GNU 編譯器，需要執行以下命令：

    $ rustup toolchain install stable-x86_64-pc-windows-gnu

此操作只會為目標架構安裝 Rust 及其工具，但在交叉編譯時可能還需要其他工具。

### Windows

本節中，`$ARCH` 是目標架構（`x86_64` 或 `i686`）。以下內容將解釋如何使用 rustup 進行交叉編譯。

1. 安裝 mingw-w64-gcc包
2. 為目標架構安裝 Rust 標準庫：`rustup target add $ARCH-pc-windows-gnu`
3. 最後，為了使 cargo 能找到 MinGW-w64 gcc/ar，需要在 `~/.cargo/config.toml` 中添加如下內容：

    ~/.cargo/config.toml

    [target.$ARCH-pc-windows-gnu]
    linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
    ar = "/usr/bin/$ARCH-w64-mingw32-ar"

最後，通過向 cargo 傳遞 `--target $ARCH-pc-windows-gnu` 參數，即可為 Windows 交叉編譯：

    $ # Build
    $ cargo build --release --target "$ARCH-pc-windows-gnu"
    $ # Run unit tests under wine
    $ cargo test --target "$ARCH-pc-windows-gnu"

目前無法使用 MinGW 6 和通過 rustup 安裝的工具鏈構建可執行文件。要修復此問題，請執行

    for lib in crt2.o dllcrt2.o libmsvcrt.a; do cp -v /usr/x86_64-w64-mingw32/lib/$lib $HOME/.rustup/toolchains/$CHANNEL-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/; done

其中 `CHANNEL` 為更新通道：穩定版（`stable`）、測試版（`beta`）或開發版（`nightly`）。

### 非官方軟體包

非官方倉庫 archlinuxcn 有 rust-nightly 和 i686, ARM, ARMv7, Windows 32 & 64 的 Rust 標準庫，因此只需安裝對應的標準庫即可享受交叉編譯。然而，ARM 工具鏈只能自行尋找。對於 32 位 Windows 目標，需要獲取 mingw-w64-gcc包 提供的 libgcc_s_dw2-1.dll 來編譯運行。

## Cargo

Cargo，Rust 的包管理器，是 rust包 的一部分。作為 rust-nightly-binAUR 的一部分，Cargo 開發版（nightly）在 AUR 上可用。如果使用 rustup包 則無需再安裝 Cargo。

Cargo 使 Rust 項目能聲明各種依賴關係，並確保始終能得到可重現構建。推薦閱讀官方指南。

### 用法

使用 Cargo 創建新項目：

    $ cargo new hello_world

此操作將創建包含默認 Cargo.toml 文件的目錄，該文件用於構建可執行文件。

注意：Cargo 將 `Cargo.toml` 作為包含編譯項目所需所有元數據的列表。

    Cargo.toml

    [package]
    name = "hello_world"
    version = "0.1.0"
    edition = "2021"

    [dependencies]

### 為本機 CPU 平台優化

通過在 `~/.cargo/config.toml` 中添加一個標誌，Cargo 將始終為本機 CPU 進行編譯優化。請注意，由此產生的二進制文件無法在其他計算機上運行。如果未來更換 CPU，您甚至可能無法在自己的系統上運行這些二進制文件。

找出安裝時默認使用的目標平台：

    $ rustup toolchain list

    stable-x86_64-unknown-linux-gnu (default)

這說明目前在 `x86_64-unknown-linux-gnu` 平台上使用穩定版（`stable`） Rust。

將 Cargo 設置為始終為本機 CPU 進行編譯優化：

    ~/.cargo/config.toml

    [target.x86_64-unknown-linux-gnu]
    rustflags = ["-C", "target-cpu=native"]

### sccache

使用 sccache（sccache包）可以大大減少編譯時間。這將在本地維護編譯器的工作緩存，從而無需重新編譯自上次編譯以來不變的代碼。

為啟用 sccache，可使用 `RUSTC_WRAPPER` 環境變量：

    $ export RUSTC_WRAPPER=sccache
    $ cargo build

或者

    $ RUSTC_WRAPPER=sccache cargo build

或者也可以將以下內容添加到 `~/.cargo/config.toml`：

    ~/.cargo/config.toml

    [build]
    rustc-wrapper = "sccache"

## IDE 支持

### 工具

Rust 項目的推薦工具請參閱 https://www.rust-lang.org/zh-CN/tools 。

#### rust-analyzer

rust-analyzer 是官方的 Rust 語言伺服器協議（LSP）實現，已取代 RLS。

安裝 rust-analyzer包 軟體包即可使用，最新 Git 版本可通過安裝 rust-analyzer-gitAUR 獲取。另外，如果已安裝 rustup包，可使用以下命令安裝 rust-analyzer：

    $ rustup component add rust-analyzer

rust-analyzer 需要標準庫的原始碼。如果原始碼不存在，rust-analyzer 將嘗試使用 rustup 自動安裝。要使用 rustup 手動安裝原始碼，請執行以下命令：

    $ rustup component add rust-src

#### Clippy

Clippy 藉助編譯器插件支持實現了許多額外提示，能檢測出更多錯誤和非慣用的 Rust 語法。rust包 軟體包中包含了 Clippy。

使用 rustup 安裝 Clippy：

    $ rustup component add clippy

#### Rustfmt

Rustfmt 是一個根據官方代碼風格規範來格式化 Rust 代碼的工具。

rust包 軟體包中包含了 Rustfmt。執行以下命令，用 rustup 來安裝 Rustfmt：

    $ rustup component add rustfmt

### 編輯器

#### Emacs

Emacs 對 Rust 的支持可通過官方的 rust-mode 插件獲取。

Emacs 支持使用 EglotGNU 文檔 、lsp-bridge 等包連接 rust-analyzer。

#### GNOME Builder

GNOME Builder 對 Rust 的支持通過語言伺服器協議（LSP）實現。默認使用 rust-analyzer，需要同時安裝 Rust 原始碼。

#### Helix

Helix 編輯器使用 Rust 編寫，包含了 Rust 語言伺服器協議（LSP）。Helix 的靈感來自 Neovim 和 Kakoune。

#### Kate

Kate 對 Rust 的支持通過語言伺服器協議（LSP）實現。默認使用 rust-analyzer，需要同時安裝 Rust 原始碼。

#### IntelliJ IDEA

IntelliJ IDEA 有 Rust 插件。此插件同樣適用於 CLion。

如果使用 rustup，請使用 rustup 下載原始碼（`rustup component add rust-src`），然後將工具鏈所在位置指定為 `~/.rustup/toolchains/<your toolchain>/bin`。

如果使用 Arch Linux 官方軟體庫中的 Rust，請將工具鏈所在位置指定為 `/usr/bin`，將標準庫所在位置指定為 `/usr/lib/rustlib/src/rust/library/`。

#### Jetbrains RustRover

Jetbrains 也正在開發一款專為 Rust 設計的編輯器。可以在其官方網站或 AUR （rustroverAUR 和 rustrover-eapAUR） 中找到並下載。

#### Visual Studio Code

Visual Studio Code 對 Rust 的支持可通過 rust-analyzer 與 rust-lang.rust-analyzer 擴展獲取。

#### Vim

Vim 對 Rust 的支持可通過官方的 rust.vim 插件獲取，支持文件檢測、語法高亮、格式化和 Syntastic 語法檢查插件。許多代碼補全引擎都支持 Rust，例如 coc（通過 coc-rust-analyzer 插件）和 YouCompleteMe。

## 另見

- Rust 程式語言官網
- Rust 文檔
- 標準庫 API
- Rust 官方文檔中文教程
- 《Rust 程序設計語言》
- 《通過例子學 Rust》
- 《Rust 參考手冊》
- Rust 維基百科詞條
- Rust 語言術語中英文對照表
- Rust Telegram 中文討論群

- 帶少量注釋的 Rust 示例（英文）
- Cargo 可用的庫（單元包/crate）（英文）
- Rust 本周動態（英文）
- Rust 程式語言博客（英文）
- Rust 用戶論壇（英文）
- Rust 內部人員論壇（英文）

分類：​

- 程式語言

Rust
新增話題