跳转至内容

Rust

来自 ArchWiki

来自 维基百科

Rust 是一种多范式、通用的编程语言,强调性能、类型安全和并发性。它在没有垃圾回收机制的情况下强制执行内存安全(意味着所有引用都指向有效的内存)。为了在执行内存安全的同时防止数据竞争,它的“借用检查器”会在编译期间跟踪程序中所有引用的对象生命周期。Rust 受函数式编程思想的影响,包括不可变性、高阶函数和代数数据类型。它在系统编程中很受欢迎。

核心语言

Rust 核心库

Rust 核心库 (Rust Core Library) 是 Rust 标准库的无依赖基础。它直接与 LLVM 原语交互,使 Rust 能够与平台和硬件无关。正是这种与 LLVM 的集成使得 Rust 能够获得比使用 Clang 编译的等效 C 应用程序更高的性能,从而使设计使用 libcore 的 Rust 软件比 C 更底层。它仅包含基本的与平台无关的类型,如 OptionResultIterator。希望针对嵌入式平台开发软件的开发者可以使用 #![no_std] 放弃标准库,仅使用“不含电池”的核心库,从而获得更小的二进制文件大小和更高的性能。然而,使用 #![no_std] 会限制您可以从更广泛的 Rust 社区获得软件支持的数量,因为大多数库都需要标准库。

Rust 标准库

Rust 标准库 (Rust Standard Library) 提供了便捷的高级抽象,大多数可移植的 Rust 软件都是通过它创建的。它包括 VecString 类型;大量用于语言原语的方法;大量的标准宏;I/O 和多线程支持;使用 Box 的堆分配;以及许多核心库中不可用的高级功能。

发布周期

Rust 遵循定期的六周发布周期,类似于 Firefox 的发布周期。随着每次新版本的发布,核心库和标准库都会得到改进,以支持更多平台、提高性能,并为稳定版 Rust 稳定新功能。

安装

安装 Rust 的两种主要方式是

  • 原生安装,如果您仅使用 Rust 来构建或安装使用 Rust 制作的软件,则推荐此方式
  • rustup 安装,如果您打算使用 Rust 进行任何程序开发,则推荐此方式

原生安装

要从 Arch Linux 官方软件仓库安装最新的稳定版 Rust,请安装 rust 软件包。这将安装 rustc 编译器和 Cargo

rustup

为了开发软件而安装 Rust 的官方推荐方法是使用 rustup 工具链管理器,它是用 Rust 编写的。

使用 rustup 工具链管理器而不是软件仓库中独立的预打包 Rust 的好处是能够为多个目标(windows、mac、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 功能,例如用于更新 Rust 工具链的 rustup update

此软件包的优势在于各种 Rust 可执行文件位于 /usr/bin 中,而不是 ~/.cargo/bin 中,无需将另一个目录添加到您的 PATH 中。

注意 rustup 软件包默认不会安装工具链。它在 /usr/bin/rustup 和常见的二进制文件(如 /usr/bin/rustc/usr/bin/cargo)之间提供符号链接。如上所述,用户仍然需要手动安装工具链,这些 Rust 命令才能发挥作用。

为了安装工具链,您需要告诉 rustup 使用哪个版本,在 stablenightly 之间进行选择

$ rustup default stable

针对新版本 LLVM 构建 Rust

由于 Rust 使用引导策略进行构建,因此需要一个功能性的 Rust 软件包。在构建官方仓库中版本更新的 llvm 版本的情况下,用户将需要来自先前版本 llvm-libs(用于构建仓库版 Rust 的版本)的共享对象,以便针对更新版本的 LLVM 进行构建。

例如:官方仓库提供 llvm-18.1.8,目标是构建 llvm-19.1.6。

引导步骤需要来自 llvm-libs-18.1.8 的 /usr/lib/libLLVM.so.18.1。此文件可以手动放置在构建根目录中,或由诸如 llvm18-libs 的软件包放置。

上游安装脚本

rustup 也可通过 rustup 官方网页手动下载和安装。

使用 curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs -o rust.sh 下载文件,查看它:less ./rust.sh,并运行脚本 ./rust.sh 以开始 rustup 安装。该脚本仅对登录 shell 配置文件进行 PATH 更改。您需要 source ~/.cargo/env,直到您注销并重新登录系统。之后要更新 rustup,请运行 rustup self update

该脚本默认会安装并激活默认工具链(即 rust 软件包所使用的工具链),因此无需手动安装即可开始使用 Rust。

警告 如 Rust 文档建议的那样,运行 curl some-url | sh 被认为存在安全风险,因为它会执行未知的代码,这些代码甚至可能在下载过程中损坏。因此,建议在执行脚本之前先手动下载并检查它。
注意 请确保在运行 rustup~/.cargo/bin 位于您的 PATH 中。

用法

您可能需要手动安装一个工具链,例如 stablebetanightly1.58.0。如果您想使用/测试另一个工具链,也需要这样做。

$ rustup toolchain install toolchain

现在可以通过运行 rustup run toolchain command 来运行 Rust 命令。但是,要直接使用这些命令,您需要激活该工具链

$ rustup default toolchain
  • Rust 不直接调用链接器,而是默认通过 cc 调用(由其可选依赖 gcc 提供)。如果没有它,尝试构建二进制文件(例如 cargo build --bin foo)将产生错误 error: linker `cc` not found.
  • rustup 不会自动更新提供的工具链。如果用户希望使用最新版本的 Rust、crates 和其他相关软件包,他们可能偶尔需要使用 rustup update 来更新他们的工具链。有关更多信息,请参阅 官方 rustup 文档

测试安装

使用 rustc -V 查看已安装的 Rust 版本

$ rustc -V 
rustc 1.94.0 (4a4ef493e 2026-03-02)

通过构建一个简单的程序来检查 Rust 是否安装正确,如下所示

~/hello.rs
fn main() {
    println!("Hello, World!");
}

您可以使用 rustc 编译它,然后运行它

$ rustc hello.rs && ./hello
Hello, World!

交叉编译

设置

交叉编译 Rust 需要安装适当的标准库(不需要单独的编译器),但同时也需要下载适当的底层工具(通常是 C 编译器)。例如,对于交叉编译到 Windows,必须设置 i686-pc-windows-gnu (32位) 和/或 x86_64-pc-windows-gnu (64位) Rust 目标三元组并且必须安装 mingw-w64-gcc

注意 严格来说,mingw-w64-binutils 已经足够,因为它是提供链接器本身的软件包,但强烈建议使用 GCC 程序作为包装器,以自动向链接器传递一些必要的选项。

使用 rustup

rustup 是交叉编译 Rust 的推荐方式。文档解释了相关步骤、如何列出目标等。

正如文档中所解释的,rustup “仅安装给定目标的 Rust 标准库。通常还需要其他工具来交叉编译,特别是链接器。”

让我们以交叉编译到 64 位 Windows 为例

  1. 安装 mingw-w64-gcc 软件包
  2. 运行 rustup target add x86_64-pc-windows-gnu 为您的架构安装 Rust 标准库和编译器。
  3. 通过将以下内容添加到 其配置中,告诉 Cargo 到哪里寻找 MinGW 的 GCC
    [target.x86_64-pc-windows-gnu]
    linker = "/usr/bin/x86_64-w64-mingw32-gcc"
  4. 最后,您可以通过将 --target x86_64-pc-windows-gnu 标志传递给 cargo 来为 Windows 进行交叉编译
    cargo build --release --target x86_64-pc-windows-gnu
提示 交叉编译到 32 位 Windows 可以按照上述步骤设置,只需将 x86_64 替换为 i686

Arch 软件包

有些软件包可以安装在 Arch 提供的 rust 之上,例如 rust-aarch64-gnu;它们也会负责安装必要的编译器工具链。

非官方仓库 archlinuxcn 为某些目标提供 Rust 标准库作为 rust-std-nightly-* 软件包。其中一些对必要的编译器工具链有可选依赖,但其他一些则需要您自己寻找(例如 ARM 工具链)。

运行交叉编译的程序

cargo run 及其相关命令可以配置为使用运行器来执行构建的二进制文件。例如,要使用 Wine 运行 64 位 Windows 程序,请将以下内容添加到 Cargo 的配置

[target.x86_64-pc-windows-gnu]
runner = "wine"

Cargo

Cargo(Rust 的包管理器)是 rust 软件包的一部分。如果您使用 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 始终为您 CPU 平台编译最优代码,您可以通过向 ~/.cargo/config.toml 添加标志来实现。请注意,生成的二进制文件不能分发给其他计算机使用,如果您将来决定更换 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 支持

工具

请参阅 https://rust-lang.net.cn/tools 了解 Rust 项目的推荐工具。

rust-analyzer

rust-analyzer 是官方的 Rust 语言服务器协议实现,它已经取代了 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 利用编译器插件支持来提供大量额外的 lint,用于检测和警告更多种类的错误和非地道的 Rust 代码。

Clippy 包含在 rust 软件包中。要使用 rustup 安装它,请使用

$ rustup component add clippy

Rustfmt

Rustfmt 是一个根据官方样式指南格式化 Rust 代码的工具。

Rustfmt 包含在 rust 软件包中。要使用 rustup 安装它,请使用

$ rustup component add rustfmt

编辑器

Emacs

可以通过官方 rust-mode 插件获得 Emacs 对 Rust 的支持。

GNOME Builder

GNOME Builder 对 Rust 的支持是通过语言服务器协议实现的。它默认使用 rust-analyzer;您所需要做的就是将其与 Rust 源代码一起安装。

Helix

Helix 编辑器是用 Rust 编写的,并包含 Rust 语言服务器协议。Helix 受 Neovim 和 Kakoune 的启发。

Kate

Kate 对 Rust 的支持是通过语言服务器协议实现的。它默认使用 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/ 作为 stdlib 源代码位置。

Jetbrains RustRover

Jetbrains 也在专门为 Rust 开发一个编辑器。它可以在他们的官方 网站 上找到并下载,或者在 AUR 中作为 rustroverAURrustrover-eapAUR 提供。

Visual Studio Code

Visual Studio Code 对 Rust 的支持可以通过带有 rust-lang.rust-analyzer 扩展的 rust-analyzer 获得。

Vim

Vim 对 Rust 的支持可以通过官方 rust.vim 插件获得,它提供文件检测、语法高亮、格式化以及对 Syntastic 语法检查插件的支持。许多补全引擎都有 Rust 支持,例如 coc(通过 coc-rust-analyzer 插件)和 YouCompleteMe

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.