Rust
来自 维基百科
- Rust 是一种多范式、通用的编程语言,强调性能、类型安全和并发性。它在没有垃圾回收机制的情况下强制执行内存安全(意味着所有引用都指向有效的内存)。为了在执行内存安全的同时防止数据竞争,它的“借用检查器”会在编译期间跟踪程序中所有引用的对象生命周期。Rust 受函数式编程思想的影响,包括不可变性、高阶函数和代数数据类型。它在系统编程中很受欢迎。
核心语言
Rust 核心库
Rust 核心库 (Rust Core Library) 是 Rust 标准库的无依赖基础。它直接与 LLVM 原语交互,使 Rust 能够与平台和硬件无关。正是这种与 LLVM 的集成使得 Rust 能够获得比使用 Clang 编译的等效 C 应用程序更高的性能,从而使设计使用 libcore 的 Rust 软件比 C 更底层。它仅包含基本的与平台无关的类型,如 Option、Result 和 Iterator。希望针对嵌入式平台开发软件的开发者可以使用 #![no_std] 放弃标准库,仅使用“不含电池”的核心库,从而获得更小的二进制文件大小和更高的性能。然而,使用 #![no_std] 会限制您可以从更广泛的 Rust 社区获得软件支持的数量,因为大多数库都需要标准库。
Rust 标准库
Rust 标准库 (Rust Standard Library) 提供了便捷的高级抽象,大多数可移植的 Rust 软件都是通过它创建的。它包括 Vec 和 String 类型;大量用于语言原语的方法;大量的标准宏;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 中。
/usr/bin/rustup 和常见的二进制文件(如 /usr/bin/rustc 和 /usr/bin/cargo)之间提供符号链接。如上所述,用户仍然需要手动安装工具链,这些 Rust 命令才能发挥作用。为了安装工具链,您需要告诉 rustup 使用哪个版本,在 stable 和 nightly 之间进行选择
$ 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。
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
- 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。
使用 rustup
rustup 是交叉编译 Rust 的推荐方式。文档解释了相关步骤、如何列出目标等。
正如文档中所解释的,rustup “仅安装给定目标的 Rust 标准库。通常还需要其他工具来交叉编译,特别是链接器。”
让我们以交叉编译到 64 位 Windows 为例
- 安装 mingw-w64-gcc 软件包
- 运行
rustup target add x86_64-pc-windows-gnu为您的架构安装 Rust 标准库和编译器。 - 通过将以下内容添加到 其配置中,告诉 Cargo 到哪里寻找 MinGW 的 GCC
[target.x86_64-pc-windows-gnu] linker = "/usr/bin/x86_64-w64-mingw32-gcc"
- 最后,您可以通过将
--target x86_64-pc-windows-gnu标志传递给 cargo 来为 Windows 进行交叉编译cargo build --release --target x86_64-pc-windows-gnu
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.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 中作为 rustroverAUR 和 rustrover-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。