词汇表
制品
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本身的实验性特性。
-
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
目标
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
hasv7
,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)。