词汇表

制品

artifact "制品"是指编译进程最终创建的文件或文件集,包括可链接库、可执行的二进制文件和生成的文档。

Cargo

Cargo 是Rust的包管理器,也是本书涉及的主要内容。

Cargo.lock

参阅 lock 文件。

Cargo.toml

参阅 配置清单。

Crate

Rust crate 是指一个库或一个可执行程序,分别称为 library crate 或 binary crate 。

Cargo package定义的每个target都是crate。

广义来说,术语 crate 可以指目标源代码或目标产生的编译制品,也可以指从注册中心获取的压缩包。

指定crate源代码可以细分为modules "模块"。

版本

Rust版本 是Rust语言的发展标志。包的版本是在 Cargo.toml 配置清单中指定的,不同的目标可以指定对应版本来使用。更多信息请参阅版本指南。

特性

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

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

  • Cargo有不稳定特性标记,可以用来启用Cargo本身的实验性特性。

  • Rust编译器和Rustdoc有自己的不稳定特性标志 (参阅不稳定篇和Rustdoc篇)。

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

索引

index "索引" 是注册中心中 crates 的可搜索列表。

Lock 文件

Cargo.lock lock文件 记录 workspace或package中使用的每个依赖的确切版本。它是由Cargo自动生成的。参阅 Cargo.toml vs Cargo.lock 。

配置清单

其名为 Cargo.toml 的文件中,配置清单是对package或workspace的描述。

[虚拟配置清单][virtual manifest] Cargo.toml 文件,仅描述一个工作空间,不包含包。

成员

member "成员"是属于workspace 的 package。

模块

Rust的模块系统将代码组织成称为 modules "模块"的逻辑单元,在代码中提供独立的命名空间。

指定的 crate 的源代码可以被细分为一个或多个独立的模块。这样做通常是为了将代码组织在相关的功能区域,或者来控制源代码中的标识符(结构体、函数等)的可见性(public/private) "公共/私有"。

Cargo.toml文件主要关注它所定义的package、crates、它们所依赖的crates的包。尽管如此,在使用Rust时,你会经常注意到 "模块" 这个术语,所以你应该了解模块与crate的关系。

包

package "包" 是对源文件集合和 Cargo.toml manifest 文件的描述。包对应的名称和版本,用来指定包之间的依赖关系。

package "包" 包含多个target,每个都是一个crate。 Cargo.toml 文件描述了包内的crate的二进制或库的类型,以及每个crate的一些元数据--如何构建每个crate,它们的直接依赖是什么,等等,这正是本书所描述的。

package root "包的根" 是指包的 Cargo.toml 配置清单所在的目录。(相对于工作区根)。

package ID specification,或 SPEC ,是一个字符串,用来唯一地引用一个特定来源包的特定版本。

尽管多个crates是很常见的,但往往中小型的Rust项目只需要一个包。

较大的项目可能涉及多个软件包,在这种情况下,Cargo workspaces 可以用来管理软件包之间的共同依赖和其他相关元数据。

包管理

广义上讲,包管理器 是软件生态系统中的一个程序(或相关程序的集合),它可以自动获取、安装和升级制品。在编程语言的生态系统中,软件包管理器是以开发者为中心的工具,其主要功能是从一些中心存储库中下载库的制品和它们的依赖;这种功能通常与执行软件构建的功能相结合(通过调用特定语言的编译器)。

Cargo是Rust生态系统中的软件包管理器。Cargo下载 Rust package的依赖项(artifacts被称为crates)、编译包、制作可分享的包,并(可选择)将它们上传到Rust社区的 package 注册中心。

包注册中心

参阅 注册中心。

项目

package 的另一个名称。

注册中心

registry "注册中心" 服务,拥有可下载的crates集合,可以作为package的依赖而被安装使用。Rust生态系统中的默认注册中心是crates.io。 该注册中心有一个index,包含了所有crate的列表,并告知Cargo如何下载需要的crate。

源

一个source "源" 是拥有crates的提供者,它可以作为 package 的依赖项。源有以下几种类型:

  • 注册中心源 — 参阅 注册中心。
  • 本地注册源 — 一组以压缩文件形式存储在文件系统中的crates。参阅 本地注册源 。
  • 目录源 — 一组以压缩文件形式存储在文件系统中的crates。参阅 目录源.
  • 路径源 — 在文件系统是独立包(如路径依赖)或多个软件包的集合(比如[路径覆盖])。
  • Git源 — 位于git仓库中的包(比如git 依赖或git 源)。

详见 源替换。

Spec

参阅 package ID specification 。

目标

target "目标"术语的含义取决于上下文:

  • Cargo 目标 — Cargo packages targets ,对应于将要生成的 制品。包可以有库、二进制、示例、测试和性能测试目标。在 Cargo.toml manifest中配置目标列表,通常由源文件的目录层级自动推断。

  • 目标目录 — Cargo将所有构建的制品和中间文件放在 目标 目录中。默认情况下是一个名称为 target 的目录,位于 workspace 根目录下,如果不使用工作区,则为包的根目录。该目录可以通过 --target-dir 命令行选项、CARGO_TARGET_DIR环境变量或 build.target-dir 配置选项 来改变。

  • 目标架构 — 操作系统以及机器架构中所构建的制品通常被称为 目标 。

  • 目标三元组 — 三元组架构是指定目标体系结构的特定格式。三元组可以被称为 目标三元组 ,它是生成制品的体系结构,而 host triple 是编译器运行的体系结构。目标三元组可以通过命令行选项 --target 或 build.target 配置选项 指定。三元组的一般格式是 <arch><sub>-<vendor>-<sys>-<abi> :

    • arch = CPU基础架构, 例如 x86_64, i686, arm, thumb, mips 等。
    • sub = CPU子架构, 例如 arm has 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 manifest 中的 [[test]] table 指定。它的目的是只测试一个库的公共API,或执行一个二进制文件以验证操作。

工作空间

workspace 是一个或多个 packages 的集合,它们共享共同的依赖(拥有共享的Cargo.lock lock file)、输出目录,各项设置,如配置文件。

虚拟工作区 根 Cargo.toml manifest 没有定义包,只列出工作区 成员 。

工作区根 是工作区的 Cargo.toml 配置清单所在的目录。 (相对于package root)。