词汇表
制品
制品 是编译过程创建的文件或文件集。这包括可链接库、可执行二进制文件和生成的文档。
Cargo
Cargo 是 Rust 的 包管理器,也是本书的主要主题。
Cargo.lock
参见 锁定文件。
Cargo.toml
参见 清单。
包
Rust 包 是指库或可执行程序,分别称为库包 或 二进制包。
笼统地说,术语 包 可以指目标的源代码,也可以指目标生成的已编译制品。它还可以指从 注册源 获取的压缩包。
给定包的源代码可以细分为 模块。
版本
Rust 版本 是 Rust 语言发展的一个里程碑。包的版本 在 Cargo.toml
清单 中指定,并且各个目标可以指定它们使用的版本。有关更多信息,请参阅 版本指南。
功能
功能 的含义取决于上下文
-
功能 是一个命名标志,允许条件编译。功能可以指可选依赖项,也可以指在
Cargo.toml
清单 中定义的任意名称,可以在源代码中检查该名称。 -
Cargo 具有 不稳定功能标志,可用于启用 Cargo 本身的实验性行为。
-
Rust 编译器和 Rustdoc 都有自己的不稳定功能标志(请参阅 不稳定功能手册 和 Rustdoc 手册)。
-
CPU 目标具有 目标功能,用于指定 CPU 的功能。
索引
锁定文件
Cargo.lock
锁定文件 是一个文件,它捕获 工作空间 或 包 中使用的每个依赖项的确切版本。它由 Cargo 自动生成。参见 Cargo.toml 与 Cargo.lock。
清单
清单 是名为 Cargo.toml
的文件中对 包 或 工作空间 的描述。
虚拟清单 是一个 Cargo.toml
文件,它只描述一个工作空间,不包含包。
成员
模块
Rust 的模块系统用于将代码组织成称为模块 的逻辑单元,这些单元在代码中提供隔离的命名空间。
给定 包 的源代码可以细分为一个或多个独立的模块。这通常是为了将代码组织成相关功能的区域,或者控制源(结构体、函数等)中符号的可见范围(公共/私有)。
Cargo.toml
文件主要关注它定义的 包、它的包以及它们所依赖的包的包。但是,在使用 Rust 时,您会经常看到“模块”一词,因此您应该了解它与给定包的关系。
包
包 是源文件和描述包的 Cargo.toml
清单 文件的集合。包具有名称和版本,用于指定包之间的依赖关系。
一个包包含多个 目标,每个目标都是一个 包。Cargo.toml
文件描述了包中包的类型(二进制或库),以及关于每个包的一些元数据——如何构建每个包、它们的直接依赖项是什么等等,如本书所述。
包根目录 是包的 Cargo.toml
清单文件所在的目录。(与 工作空间根目录 进行比较。)
包 ID 规范,或 SPEC,是一个字符串,用于唯一引用来自特定源的特定版本的包。
小型到中型的 Rust 项目只需要一个包,尽管它们通常有多个包。
较大的项目可能涉及多个包,在这种情况下,可以使用 Cargo 工作空间 来管理包之间的公共依赖项和其他相关元数据。
包管理器
广义上讲,包管理器 是软件生态系统中的一个程序(或相关程序的集合),它可以自动执行获取、安装和升级制品的流程。在编程语言生态系统中,包管理器是一个面向开发人员的工具,其主要功能是从某个中央存储库下载库制品及其依赖项;此功能通常与执行软件构建的能力(通过调用特定于语言的编译器)相结合。
Cargo 是 Rust 生态系统中的包管理器。Cargo 下载您的 Rust 包 的依赖项(称为 包 的 制品)、编译您的包、制作可分发的包,并(可选)将它们上传到 crates.io,即 Rust 社区的 包注册源。
包注册源
参见 注册源。
项目
包 的另一个名称。
注册源
注册源 是一种服务,它包含可下载的 包 集合,这些包可以安装或用作 包 的依赖项。Rust 生态系统中的默认注册源是 crates.io。注册源有一个 索引,其中包含所有包的列表,并告诉 Cargo 如何下载所需的包。
源
源 是一个提供程序,它包含可以作为 包 的依赖项包含的 包。有几种类型的源:
- 注册源 — 参见 注册源。
- 本地注册源 — 一组存储为文件系统上压缩文件的包。参见 本地注册源。
- 目录源 — 一组存储为文件系统上未压缩文件的包。参见 目录源。
- 路径源 — 位于文件系统上的单个包(例如 路径依赖项)或一组多个包(例如 路径覆盖)。
- Git 源 — 位于 git 存储库中的包(例如 git 依赖项 或 git 源)。
更多信息请参见源代码替换。
规格
参见包 ID 规范。
目标
术语“目标”的含义取决于上下文
-
Cargo 目标 — Cargo 包 由与将要生成的 工件 相对应的 目标 组成。包可以包含库、二进制文件、示例、测试和基准测试目标。目标列表 在
Cargo.toml
清单 中配置,通常由源文件的 目录布局 自动推断。 -
目标目录 — Cargo 将所有构建的工件和中间文件放置在 目标 目录中。默认情况下,这是一个名为
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
以获取受支持目标的列表。
测试目标
Cargo 测试目标 生成二进制文件,帮助验证代码的正确操作和正确性。有两种类型的测试工件
- 单元测试 — 单元测试 是直接从库或二进制目标编译的可执行二进制文件。它包含库或二进制代码的全部内容,并运行
#[test]
注释的函数,旨在验证代码的各个单元。 - 集成测试目标 — 集成测试目标 是从 测试目标 编译的可执行二进制文件,该目标是一个独立的 crate,其源代码位于
tests
目录中,或由Cargo.toml
清单 中的[[test]]
表 指定。它旨在仅测试库的公共 API,或执行二进制文件以验证其操作。
工作区
工作区 是一个或多个共享公共依赖项解析(具有共享的 Cargo.lock
锁定文件)、输出目录和各种设置(例如配置文件)的 包 的集合。
虚拟工作区 是指根 Cargo.toml
清单 未定义包,而仅列出工作区 成员 的工作区。
工作区根目录 是工作区的 Cargo.toml
清单文件所在的目录。(与 包根目录 进行比较。)