词汇表

工件 (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 BookThe Rustdoc Book)。

  • CPU 目标具有 目标特性,指定了 CPU 的功能。

Index (索引)

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

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 清单 文件的集合。包具有用于指定包之间依赖关系 的名称和版本。

一个包包含多个 目标,每个目标都是一个 crateCargo.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_64i686armthumbmips 等。
    • sub = CPU 子架构,例如 arm 具有 v7v7sv5te 等。
    • vendor = 供应商,例如 unknownapplepcnvidia 等。
    • sys = 系统名称,例如 linuxwindowsdarwin 等。none 通常用于无操作系统的裸机。
    • abi = ABI,例如 gnuandroideabi 等。

    某些参数可以省略。运行 rustc --print target-list 获取受支持的目标列表。

Test Targets (测试目标)

Cargo 测试目标 生成二进制文件,有助于验证代码的正确操作和正确性。有两种类型的测试工件

  • 单元测试 - 单元测试 是直接从库或二进制目标编译的可执行二进制文件。它包含库或二进制代码的全部内容,并运行 #[test] 注解的函数,旨在验证各个代码单元。
  • 集成测试目标 - 集成测试目标 是从 测试目标 编译的可执行二进制文件,该目标是不同的 crate,其源位于 tests 目录中或由 Cargo.toml 清单 中的 [[test]] 指定。它仅旨在测试库的公共 API,或执行二进制文件以验证其操作。

Workspace (工作区)

一个 工作空间 是一个或多个 的集合,它们共享共同的依赖解析(使用共享的 Cargo.lock 锁文件)、输出目录以及各种设置,例如 profiles(配置文件)。

一个 虚拟工作空间 是一个根 Cargo.toml 清单文件 没有定义包,而只列出工作空间 成员 的工作空间。

工作空间根目录 是工作空间的 Cargo.toml 清单文件所在的目录。(与 包根目录 进行比较。)