#### 1记号

#### 2 词法结构

##### 2.2关键字

可分为三类：

- strict：只能用在固定的上下文中
- reserved：保留以待将来使用
- weak：仅在某些上下文中有特定的意义

#### 3 宏

#### 4 Crates和源文件

#### 5 条件编译

#### 6 条目

##### 6.1模块

模块在一个crate的内部进行划分。其形式为`mod {}`。

没有正文的模块是从外部加载的。外部的模块如果没有`path`属性，则文件路径即等同于模块路径。

```rust
crate	// 模块路径crate，即文件路径lib.rs(对于库而言)
crate::util	// 模块路径crate::util，即文件路径./util.rs或util/mod.rs
	// 注：./util.rs或./util/mod.rs不允许同时存在
```



##### 6.3使用的声明(use)

##### 6.10静态条目

静态条目类似于常量，只不过它代表的是程序中精确的内存位置。所有对静态条目的引用都会指向内存中相同的位置。静态条目有静态的生命周期，即Rust程序中最长的生命周期。静态条目在程序结束的时候不会调用drop。

##### 6.13外部块

外部块是基本的Rust外部程序接口，提供了不存在于当前crate中的条目。

有两种外部块：函数和静态量。只能在`unsafe`的上下文使用外部块。

在语法上`unsafe`可以出现在`extern`之前，但在语义上又不行。这样在token流中删除它之前，宏就可以使用这样的语法从而使用`unsafe`了。

- 函数

- 静态量

- ABI

  ```rust
  extern "C"	// 即extern fn foo();C编译器支持的默认值。
  ```

  

- 可变参数函数

- 外部块上的属性

- 函数参数的属性

#### 7 属性

#### 8 语句与表达式

##### 8.1 语句

##### 8.2.4 操作符表达式

- 类型转换表达式

##### 8.2.5分组表达式

分组表达式是用圆括号括起来的表达式。应将分组表达式视为一个整体。

##### 8.2.15范围表达式

| 语法          | 类型                         | 含义                |
| ------------- | ---------------------------- | ------------------- |
| `start..end`  | `std::ops::Range`            | $start\le x\lt end$ |
| `start..`     | `std::ops::RangeFrom`        | $start\le x$        |
| `..end`       | `std::ops::RangeTo`          | $x\lt end$          |
| `..`          | `std::ops::RangeFull`        | -                   |
| `start..=end` | `std::ops::RangeInclusive`   | $start\le x\le end$ |
| `..=end`      | `std::ops::RangeToInclusive` | $x\le end$          |

```rust
// 在for循环中使用Range
for i in 1..11 {
    println!("{}", i);
}
```



#### 9 模式

#### 10 类型系统

#### 11 特殊类型、特性

#### 12 Names

#### 13 内存模型

#### 14 连接

#### 15 不安全性

#### 16 常量计算

#### 17 ABI

本节描述一些影响ABI的属性，这些ABI来自于编译生成的crate。关于外部函数，参考[6.4函数](#6.4函数)。关于外部库的ABI，参考[6.13外部块](#6.13外部块)。

#### 18 Rust的运行时

#### 19 附录