词汇表

构件

一个 构件 是编译过程产生的文件或文件集。这包括可链接的库、可执行二进制文件以及生成的文档。

Cargo

Cargo 是 Rust 的 包管理器,也是本书主要讨论的主题。

Cargo.lock

参见 lock 文件

Cargo.toml

参见 清单

Crate

Rust 的一个 crate 是一个库或一个可执行程序,分别称为 库 crate二进制 crate

为 Cargo 定义的每个 目标 都是一个 crate

广义上讲,术语 crate 可以指目标源代码,也可以指目标生成的编译构件。它还可以指从 注册表 获取的压缩包。

给定 crate 的源代码可以细分为 模块

版本

Rust 版本 是 Rust 语言的一个开发里程碑。包的版本Cargo.toml 清单 中指定,并且单独的目标可以指定它们使用的版本。有关更多信息,请参阅 版本指南

特性

特性 的含义取决于上下文:

  • 一个 特性 是一个命名标志,它允许条件编译。特性可以指可选依赖,也可以指在 Cargo.toml 清单 中定义的、可以在源代码中检查的任意名称。

  • Cargo 具有 不稳定特性标志,可用于启用 Cargo 本身的实验性行为。

  • Rust 编译器和 Rustdoc 有它们自己的不稳定特性标志(参见 《不稳定手册》《Rustdoc 手册》)。

  • CPU 目标具有 目标特性,用于指定 CPU 的能力。

索引

索引注册表 中可搜索的 crate 列表。

Lock 文件

Cargo.lock lock 文件 是一个文件,它记录了 工作区 中使用的每个依赖项的确切版本。它由 Cargo 自动生成。参见 Cargo.toml 与 Cargo.lock 的区别

清单

一个 清单 是在名为 Cargo.toml 的文件中描述 工作区 的信息。

一个 虚拟清单 是一个 Cargo.toml 文件,它只描述一个工作区,不包含任何包。

成员

一个 成员 是属于 工作区

模块

Rust 的模块系统用于将代码组织成称为 模块 的逻辑单元,这些模块在代码中提供隔离的命名空间。

给定 crate 的源代码可以细分为一个或多个单独的模块。这通常是为了按相关功能领域组织代码,或控制源代码中符号(结构体、函数等)的可见范围(公共/私有)。

一个 Cargo.toml 文件主要关注其定义的 、其 crate,以及这些 crate 依赖的包。然而,在使用 Rust 时,您会经常看到“模块”这个术语,因此您应该理解它与给定 crate 的关系。

一个 是源代码文件和一个描述包的 Cargo.toml 清单 文件的集合。包具有名称和版本,用于指定包之间的依赖关系。

一个包包含多个 目标,每个目标都是一个 crateCargo.toml 文件描述了包内 crate 的类型(二进制或库),以及关于每个 crate 的一些元数据——如何构建、直接依赖项是什么等等,正如本书中描述的那样。

包根目录 是包的 Cargo.toml 清单文件所在的目录。(与 工作区根目录 对比。)

一个 包 ID 规范,简称 SPEC,是一个字符串,用于唯一引用来自特定来源的特定版本的包。

中小型 Rust 项目通常只需要一个包,尽管它们通常会有多个 crate。

大型项目可能涉及多个包,在这种情况下,可以使用 Cargo 工作区 来管理包之间的公共依赖项和其他相关元数据。

包管理器

广义上讲,包管理器 是软件生态系统中的一个程序(或相关程序的集合),它自动化获取、安装和升级构件的过程。在编程语言生态系统中,包管理器是一个面向开发人员的工具,其主要功能是从某个中心仓库下载库构件及其依赖项;此功能通常与执行软件构建(通过调用特定语言的编译器)的能力相结合。

Cargo 是 Rust 生态系统中的包管理器。Cargo 下载您的 Rust 的依赖项(称为 crate构件),编译您的包,制作可分发的包,并(可选地)将它们上传到 crates.io,即 Rust 社区的 包注册表

包注册表

参见 注册表

项目

的另一个名称。

注册表

一个 注册表 是一个服务,其中包含可供下载的 crate 集合,这些 crate 可以被安装或用作 的依赖项。Rust 生态系统中的默认注册表是 crates.io。注册表有一个 索引,其中包含所有 crate 的列表,并告诉 Cargo 如何下载所需的 crate。

一个 是一个提供者,它包含可能作为 的依赖项包含的 crate。有几种类型的源:

  • 注册表源 — 参见 注册表
  • 本地注册表源 — 一组以压缩文件形式存储在文件系统上的 crate。参见 本地注册表源
  • 目录源 — 一组以未压缩文件形式存储在文件系统上的 crate。参见 目录源
  • 路径源 — 位于文件系统上的单个包(例如 路径依赖)或多个包的集合(例如 路径覆盖)。
  • 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 子架构,例如 armv7, 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 lock 文件)、输出目录以及各种设置(例如 profile)。

一个 虚拟工作区 是一个工作区,其根目录下的 Cargo.toml 清单 不定义包,只列出工作区 成员

工作区根目录 是工作区的 Cargo.toml 清单文件所在的目录。(与 包根目录 对比。)