词汇表
工件 (Artifact)
工件 是指编译过程产生的文件或文件集。这包括可链接的库、可执行二进制文件和生成的文档。
Cargo
Cargo 是 Rust 的 包管理器,也是本书的主要主题。
Cargo.lock
请参阅 锁定文件。
Cargo.toml
请参阅 清单。
Crate (包)
Rust crate (包) 是指库或可执行程序,分别称为 库 crate 或 二进制 crate。
为 Cargo 包 定义的每个 目标 都是一个 crate。
广义上,术语 crate 可以指目标的源代码,也可以指目标生成的编译后的工件。它也可以指从 注册表 中获取的压缩包。
给定 crate 的源代码可以细分为 模块。
Edition (版本)
Rust 版本 是 Rust 语言开发中的一个里程碑。包的版本在 Cargo.toml
清单中指定,各个目标可以指定它们使用的版本。有关更多信息,请参阅 版本指南。
Feature (特性)
特性 的含义取决于上下文。
-
特性 是一个命名的标志,允许进行条件编译。特性可以指可选的依赖项,也可以指在
Cargo.toml
清单中定义的任意名称,可以在源代码中进行检查。 -
Cargo 具有 不稳定特性标志,可用于启用 Cargo 本身的实验性行为。
-
Rust 编译器和 Rustdoc 有它们自己的不稳定特性标志(请参阅 The Unstable Book 和 The Rustdoc Book)。
-
CPU 目标具有 目标特性,指定了 CPU 的功能。
Index (索引)
Lock file (锁定文件)
Cargo.lock
锁定文件是一个文件,它捕获 工作区 或 包 中使用的每个依赖项的确切版本。它由 Cargo 自动生成。请参阅 Cargo.toml vs Cargo.lock。
Manifest (清单)
清单 是对名为 Cargo.toml
的文件中 包 或 工作区 的描述。
虚拟清单 是一个仅描述工作区而不包含包的 Cargo.toml
文件。
Member (成员)
Module (模块)
Rust 的模块系统用于将代码组织成称为 模块 的逻辑单元,这些模块在代码中提供隔离的命名空间。
给定 crate 的源代码可以细分为一个或多个单独的模块。通常这样做是为了将代码组织成相关功能区域,或控制源代码中符号(结构、函数等)的可见范围(公共/私有)。
Cargo.toml
文件主要关注它定义的 包、其 crate 以及它们所依赖的 crate 的包。尽管如此,在处理 Rust 时您会经常看到术语“模块”,因此您应该理解它与给定 crate 的关系。
Package (包)
包 是源代码文件和描述该包的 Cargo.toml
清单 文件的集合。包具有用于指定包之间依赖关系 的名称和版本。
一个包包含多个 目标,每个目标都是一个 crate。Cargo.toml
文件描述包中 crate 的类型(二进制或库),以及有关每个 crate 的一些元数据,例如如何构建每个 crate,它们的直接依赖项是什么等等,如本书所述。
包根目录 是包的 Cargo.toml
清单所在的目录。(与 工作区根目录 进行比较。)
包 ID 规范 或 SPEC 是一个字符串,用于唯一引用来自特定来源的特定版本的包。
中小型 Rust 项目只需要一个包,尽管它们通常有多个 crate。
较大的项目可能涉及多个包,在这种情况下,可以使用 Cargo 工作区 来管理包之间的公共依赖关系和其他相关元数据。
Package manager (包管理器)
广义地说,包管理器 是软件生态系统中的一个程序(或相关程序的集合),它可以自动化获取、安装和升级工件的过程。在编程语言生态系统中,包管理器是一个以开发人员为中心的工具,其主要功能是从某个中央存储库下载库工件及其依赖项;此功能通常与执行软件构建(通过调用特定于语言的编译器)的能力相结合。
Cargo 是 Rust 生态系统中的包管理器。Cargo 下载 Rust 包 的依赖项(称为 crate 的 工件),编译您的包,制作可分发的包,并(可选)将它们上传到 crates.io,Rust 社区的 包注册表。
Package registry (包注册表)
请参阅 注册表。
Project (项目)
包 的另一个名称。
Registry (注册表)
注册表 是一项服务,其中包含可下载的 crate 的集合,这些 crate 可以安装或用作 包 的依赖项。Rust 生态系统中的默认注册表是 crates.io。注册表有一个 索引,其中包含所有 crate 的列表,并告诉 Cargo 如何下载所需的 crate。
Source (源)
源 是一个提供程序,其中包含可以作为 包 的依赖项包含的 crate。有几种类型的源。
- 注册表源 - 请参阅 注册表。
- 本地注册表源 - 一组作为压缩文件存储在文件系统上的 crate。请参阅 本地注册表源。
- 目录源 - 一组作为未压缩文件存储在文件系统上的 crate。请参阅 目录源。
- 路径源 - 位于文件系统上的单个包(例如 路径依赖项)或一组多个包(例如 路径覆盖)。
- Git 源 - 位于 git 存储库中的包(例如 git 依赖项 或 git 源)。
有关更多信息,请参阅 源替换。
Spec (规范)
请参阅 包 ID 规范。
Target (目标)
术语 目标 的含义取决于上下文。
-
Cargo 目标 - Cargo 包 由与将产生的 工件 相对应的 目标 组成。包可以具有库、二进制文件、示例、测试和基准测试目标。 目标列表 在
Cargo.toml
清单 中配置,通常由源代码的 目录布局 自动推断。 -
目标目录 - Cargo 将所有构建的工件和中间文件放在 target 目录中。默认情况下,这是在 工作区 根目录或未使用工作区时的包根目录下的名为
target
的目录。该目录可以使用--target-dir
命令行选项、CARGO_TARGET_DIR
环境变量 或build.target-dir
配置选项 进行更改。 -
目标架构 - 构建的工件的操作系统和机器架构通常称为 目标。
-
目标三元组 - 三元组是一种用于指定目标架构的特定格式。三元组可以称为 目标三元组,它是生成工件的架构,以及 主机三元组,它是编译器运行所在的架构。可以使用
--target
命令行选项或build.target
配置选项 来指定目标三元组。三元组的通用格式为<arch><sub>-<vendor>-<sys>-<abi>
,其中arch
= 基本 CPU 架构,例如x86_64
、i686
、arm
、thumb
、mips
等。sub
= CPU 子架构,例如arm
具有v7
、v7s
、v5te
等。vendor
= 供应商,例如unknown
、apple
、pc
、nvidia
等。sys
= 系统名称,例如linux
、windows
、darwin
等。none
通常用于无操作系统的裸机。abi
= ABI,例如gnu
、android
、eabi
等。
某些参数可以省略。运行
rustc --print target-list
获取受支持的目标列表。
Test Targets (测试目标)
Cargo 测试目标 生成二进制文件,有助于验证代码的正确操作和正确性。有两种类型的测试工件
- 单元测试 - 单元测试 是直接从库或二进制目标编译的可执行二进制文件。它包含库或二进制代码的全部内容,并运行
#[test]
注解的函数,旨在验证各个代码单元。 - 集成测试目标 - 集成测试目标 是从 测试目标 编译的可执行二进制文件,该目标是不同的 crate,其源位于
tests
目录中或由Cargo.toml
清单 中的[[test]]
表 指定。它仅旨在测试库的公共 API,或执行二进制文件以验证其操作。
Workspace (工作区)
一个 工作空间 是一个或多个 包 的集合,它们共享共同的依赖解析(使用共享的 Cargo.lock
锁文件)、输出目录以及各种设置,例如 profiles(配置文件)。
一个 虚拟工作空间 是一个根 Cargo.toml
清单文件 没有定义包,而只列出工作空间 成员 的工作空间。
工作空间根目录 是工作空间的 Cargo.toml
清单文件所在的目录。(与 包根目录 进行比较。)