词汇表
抽象语法树(Abstract syntax tree)
“抽象语法树”,或称 “AST”,是编译器在编译程序时用于表示程序结构的中间表示形式。
对齐(Alignment)
值的对齐方式指定了值首选的起始地址。它总是 2 的幂。对值的引用必须对齐。更多。
元数(Arity)
元数指的是函数或运算符接受的参数数量。例如,f(2, 3) 和 g(4, 6) 的元数都是 2,而 h(8, 2, 6) 的元数是 3。运算符 ! 的元数是 1。
数组(Array)
数组,有时也称为固定大小数组或内联数组,是一种描述元素集合的值,每个元素都可以通过程序在运行时计算的索引来选取。它占据一段连续的内存区域。
关联项(Associated item)
关联项是与另一个项关联的项。关联项在实现(implementations)中定义,在trait中声明。只有函数、常量和类型别名可以被关联。与自由项(free item)形成对比。
全覆盖实现(Blanket implementation)
类型出现未覆盖(uncovered)的任何实现。impl<T> Foo for T、impl<T> Bar<T> for T、impl<T> Bar<Vec<T>> for T 和 impl<T> Bar<T> for Vec<T> 被认为是全覆盖实现。然而,impl<T> Bar<Vec<T>> for Vec<T> 不是全覆盖实现,因为此 impl 中出现的所有 T 实例都被 Vec 覆盖了。
约束(Bound)
约束是对类型或 trait 的限制。例如,如果对函数接受的参数施加约束,则传递给该函数的类型必须符合该约束。
组合子(Combinator)
组合子是高阶函数,它只应用函数和先前定义的组合子,以从其参数中提供结果。它们可以用于以模块化的方式管理控制流。
Crate
Crate 是编译和链接的单元。有不同类型的 crate,例如库或可执行文件。Crate 可以链接并引用其他库 crate,称为外部 crate。Crate 拥有一个自包含的模块树,从一个称为 crate 根的未命名根模块开始。项(Item)可以通过在 crate 根中将其标记为公共,包括通过公共模块的路径,使其对其他 crate 可见。更多。
分派(Dispatch)
分派是当涉及多态性时,确定实际运行的是特定版本的代码的机制。分派有两种主要形式:静态分派和动态分派。虽然 Rust 倾向于静态分派,但也通过一种称为“trait 对象”的机制支持动态分派。
动态大小类型(Dynamically sized type)
动态大小类型(DST)是一种没有静态已知大小或对齐方式的类型。
实体(Entity)
实体是一种可以在源代码程序中以某种方式引用的语言构造,通常通过路径引用。实体包括类型、项(item)、泛型参数、变量绑定、循环标签、生命周期、字段、属性和lint。
表达式(Expression)
表达式是值、常量、变量、运算符和函数的组合,它们求值得到一个单独的值,可能伴随副作用。
例如,2 + (3 * 4) 是一个返回值为 14 的表达式。
自由项(Free item)
不是实现成员的项,例如自由函数或自由常量。与关联项形成对比。
基础 trait(Fundamental traits)
基础 trait 是指为其现有类型添加 impl 是一个破坏性更改的 trait。Fn trait 和 Sized 是基础 trait。
基础类型构造器(Fundamental type constructors)
基础类型构造器是一种类型,为其实现全覆盖实现是一个破坏性更改。&、&mut、Box 和 Pin 是基础类型构造器。
任何时候,如果类型 T 被认为是本地的,那么 &T、&mut T、Box<T> 和 Pin<T> 也被认为是本地的。基础类型构造器不能覆盖其他类型。无论何时使用术语“被覆盖类型”,&T、&mut T、Box<T> 和 Pin<T> 中的 T 都不被视为被覆盖。
可实例化(Inhabited)
如果一个类型有构造器并且因此可以被实例化,那么它是可实例化的。可实例化类型不是“空的”,因为可以有该类型的值。与不可实例化(Uninhabited)相反。
固有实现(Inherent implementation)
固有方法(Inherent method)
已初始化(Initialized)
如果一个变量已经被赋值且之后没有被移动,那么它是已初始化的。所有其他内存位置都被假定为未初始化。只有不安全的 Rust 才能在不初始化的情况下创建内存位置。
本地 trait(Local trait)
在当前 crate 中定义的 trait。一个 trait 定义是否本地与应用的类型参数无关。给定 trait Foo<T, U>,Foo 始终是本地的,无论 T 和 U 用什么类型替代。
本地类型(Local type)
在当前 crate 中定义的 struct、enum 或 union。这不受应用的类型参数影响。struct Foo 被认为是本地的,但 Vec<Foo> 不是。LocalType<ForeignType> 是本地的。类型别名不影响本地性。
模块(Module)
模块是零个或多个项的容器。模块以树状结构组织,从称为 crate 根或根模块的未命名根模块开始。路径可用于引用其他模块中的项,这可能会受到可见性规则的限制。更多
名称(Name)
名称是用于引用实体的标识符或生命周期或循环标签。名称绑定是指实体声明引入与该实体关联的标识符或标签。路径、标识符和标签用于引用实体。
名称解析(Name resolution)
命名空间(Namespace)
命名空间是根据名称所引用的实体类型对已声明的名称进行的逻辑分组。命名空间允许在一个命名空间中出现的名称与在另一个命名空间中出现的同名不冲突。
在命名空间内,名称以层次结构组织,层次结构的每个级别都有自己的命名实体集合。
命名类型(Nominal types)
可以直接通过路径引用的类型。具体来说是枚举、结构体、联合体和trait 对象类型。
Dyn-兼容 trait(Dyn-compatible traits)
可以在trait 对象类型(dyn Trait)中使用的trait。只有遵循特定规则的 trait 才是 dyn 兼容的。
这些以前称为对象安全(object safe) trait。
路径(Path)
路径是用于引用当前作用域或命名空间层次结构的其他级别中的实体的由一个或多个路径段组成的序列。
Prelude
Prelude,或 Rust Prelude,是导入到每个 crate 的每个模块中的一小组项——主要是 trait。Prelude 中的 trait 是无处不在的。
作用域(Scope)
作用域是源代码文本区域,在该区域内可以使用特定名称引用命名实体。
待匹配值(Scrutinee)
待匹配值是在 match 表达式和类似的模式匹配构造中进行匹配的表达式。例如,在 match x { A => 1, B => 2 } 中,表达式 x 是待匹配值。
大小(Size)
值的大小有两个定义。
第一个是存储该值必须分配多少内存。
第二个是具有该项类型的数组中连续元素之间的字节偏移量。
它是对齐方式的倍数,包括零。大小可能会随编译器版本(随着新优化的出现)和目标平台(类似于 usize 因平台而异)而改变。
更多.
切片(Slice)
切片是对连续序列的动态大小视图,写为 [T]。
它通常以借用形式出现,无论是可变的还是共享的。共享切片类型是 &[T],而可变切片类型是 &mut [T],其中 T 表示元素类型。
语句(Statement)
语句是编程语言中命令计算机执行动作的最小独立元素。
字符串字面量(String literal)
字符串字面量是直接存储在最终二进制文件中的字符串,因此其生命周期为 'static。
其类型是具有 'static 生命周期的借用字符串切片,&'static str。
字符串切片(String slice)
字符串切片是 Rust 中最原始的字符串类型,写为 str。它通常以借用形式出现,无论是可变的还是共享的。共享字符串切片类型是 &str,而可变字符串切片类型是 &mut str。
字符串切片总是有效的 UTF-8。
Trait
Trait 是一种语言项,用于描述类型必须提供的功能。它允许类型对其行为做出某些承诺。
泛型函数和泛型结构体可以使用 trait 来约束或限定它们接受的类型。
涡轮鱼(Turbofish)
表达式中带有泛型参数的路径必须在尖括号前加上 ::。结合用于泛型的尖括号,这看起来像一条鱼 ::<>。因此,这种语法俗称涡轮鱼语法。
示例
#![allow(unused)] fn main() { let ok_num = Ok::<_, ()>(5); let vec = [1, 2, 3].iter().map(|n| n * 2).collect::<Vec<_>>(); }
需要此 :: 前缀是为了消除带逗号分隔列表中的多个比较的泛型路径的歧义。参见涡轮鱼的堡垒,其中提供了没有前缀会导致歧义的示例。
未覆盖类型(Uncovered type)
未作为另一类型参数出现的类型。例如,T 是未覆盖的,但 Vec<T> 中的 T 是被覆盖的。这仅与类型参数有关。
未定义行为(Undefined behavior)
未指定的编译时或运行时行为。这可能导致但不限于:进程终止或损坏;不当、不正确或意外的计算;或平台相关的结果。更多。
不可实例化(Uninhabited)
如果一个类型没有构造器因此永远不能被实例化,那么它是不可实例化的。不可实例化类型是“空的”,因为该类型没有值。不可实例化类型的典型例子是never 类型 !,或没有变体的枚举 enum Never { }。与可实例化(Inhabited)相反。