1
- # Rust 安装
1
+ # Rust 安装与配置
2
2
3
3
## 安装 Rust
4
4
rustup 既是一个 Rust 安装器又是一个 Rust 版本管理工具。
@@ -20,7 +20,7 @@ Rust还需要一个链接器(linker),将生成的所有机器代码以及
20
20
- Windows 10(或 11)SDK
21
21
- 英语语言包,以及其他你所需要的语言包
22
22
23
- ## 故障排除(Troubleshooting)
23
+ ### 故障排除(Troubleshooting)
24
24
25
25
要检查是否正确安装了 Rust,打开命令行并输入:` $ rustc --version `
26
26
@@ -37,46 +37,53 @@ Rust还需要一个链接器(linker),将生成的所有机器代码以及
37
37
38
38
在 Linux 和 macOS 中,请使用命令:` $ echo $PATH `
39
39
40
- ## Rustup常见命令
40
+ ## Rust 工具链(Toolchain)
41
+
42
+ Toolchain 指一组Rust工具,包括编译器(rustc)、构建工具(cargo)、文档生成工具(rustdoc)、工具链管理器(rustup)、代码格式化工具(rustfmt) 等等。
43
+ Toolchain 用于管理和构建 Rust 代码,并且可以包括一个特定版本的 Rust 编译器和标准库,还包含一个默认是编译到本机平台的target。 工具链的版本可以是 "stable"(稳定版)、"beta"(测试版)或 "nightly"(每日构建版),每个版本都对应着不同的 Rust 编译器和特性。
44
+ Toolchain 默认存储在` ~/.cargo/bin ` 这个目录下。
45
+
46
+ ### Rustup常见命令
41
47
42
48
``` shell
43
49
rustup install stable # 安装最新版本的 Rust,包括stable、 beta 和 nightly
44
50
rustup update # 更新脚本
45
51
rustup self uninstall # 卸载 Rust 和 rustup
52
+ rustup doc # 在浏览器中查看自带本地文档
53
+ rustup target list # 列出可用的 target
54
+ rustup target add x86_64-unknown-linux-gnu # # 安装一个新的 rustup target add <target>
46
55
```
47
- 更新与卸载
48
-
49
- 命令行中运行如下更新脚本:` $ rustup update `
50
-
51
- 若要卸载 Rust 和 rustup,请在命令行中运行如下卸载脚本:
52
- ` $ rustup self uninstall `
53
56
54
- ## Rust 自带本地文档
57
+ 任何时候,如果你拿不准标准库中的类型或函数的用途和用法,请查阅 API 文档!
55
58
56
- 安装程序也自带一份文档的本地拷贝,可以离线阅读。运行 ` rustup doc ` 在浏览器中查看本地文档。
59
+ ### Cargo 常见命令
57
60
58
- 任何时候,如果你拿不准标准库中的类型或函数的用途和用法,请查阅应用程序接口(application programming interface,API)文档!
59
-
60
- ## Rust 工具链(Toolchain)
61
-
62
- Toolchain 指一组Rust工具,包括编译器(rustc)、构建工具(cargo)、文档生成工具(rustdoc)以及其他与 Rust 相关的实用程序。Toolchain用于管理和构建 Rust 代码,并且可以包括一个特定版本的 Rust 编译器和标准库,还包含一个默认是编译到本机平台的target。 工具链的版本可以是 "stable"(稳定版)、"beta"(测试版)或 "nightly"(每日构建版),每个版本都对应着不同的 Rust 编译器和特性。
61
+ ``` shell
62
+ cargo new 项目名 # 支持中文项目名
63
+ cargo run 项目名 #
64
+ cargo build
65
+ cargo test
66
+ cargo --list # 查看 cargo 提供的所有命令
67
+ ```
63
68
64
69
## Rust 源代码编译过程
65
- Rust 是一种 AOT 静态类型语言。
70
+ Rust 是一门 AOT 静态类型语言。
66
71
也是跨平台语言,支持跨平台编译,Rust的标准库提供的对多种系统调用的统一抽象。
67
- Rust 的编译过程是相当复杂的,涉及多个阶段和子系统 。以下是一个简化的概述:
72
+ Rust 的编译过程是相当复杂的,涉及多个阶段与子系统 。以下是一个简化的概述:
68
73
69
74
1 . 编译器前端
70
75
1 . 词法分析:首先,Rust 源代码会被分解成一系列的标记,或称为 “tokens”(例如关键字、标识符、字面量、符号等)。这个阶段也被称为 “词法分析” 或 “tokenizing”。
71
76
2 . 语法分析:接着,这些标记会被解析成一棵 AST 。在这个阶段,编译器会检查代码的语法,并确定如何将代码组织为表达式和语句。
72
77
3 . 语义分析:然后,编译器会进行语义分析,包括类型检查、借用检查等,确保代码满足 Rust 的语言规则。
73
78
2 . 编译器后端(以LLVM+某一链接器为例)
74
- + MIR:接下来,编译器将 AST 转换为 MIR 。这是一个更简简洁、更低级的表示 ,它使得后续的优化和分析步骤更容易进行。
79
+ + MIR:接下来,编译器将 AST 转换为 MIR 。这是一个更简洁、更低级地表示 ,它使得后续的优化和分析步骤更容易进行。
75
80
+ 优化:在 MIR 阶段,编译器会执行一系列的优化,如移除死代码、简化表达式等。
76
81
+ 代码生成:然后,编译器将 MIR 转换为 LLVM IR 。这是一个一种介于C语言和汇编语言的表示,可以被 LLVM 的后端用来生成各种平台的机器代码。
77
82
+ 链接:最后,编译器使用链接器将生成的所有机器代码以及相关的库链接成一个可执行文件。
78
83
79
- Rustc编译器中,1-3阶段编译过程都是Rust实现,后端可选用LLVM、GCC、CUDA、cranelift(Rust实现)等。建议运用LLVM是于生产阶段,cranelift编译速度快,可用于测试阶段。Rustc 将Rust 源代码编译成机器代码,但是生成的这些机器代码通常是分散在多个对象文件中的。为了将这些对象文件以及所依赖的库文件合并成一个单一的可执行文件,我们需要一个链接器,也就是7阶段。 7阶段Rust选择调用外部的链接工具,可能是 GNU 或 MSVC ,具体取决于目标平台和环境。
84
+ Rustc编译器中,1-3阶段编译过程都是Rust实现,后端可选用LLVM、GCC、CUDA、cranelift(Rust实现)等。建议运用LLVM是于生产阶段,cranelift编译速度快,可用于测试阶段。
85
+ Rustc 将Rust 源代码编译成机器代码,但是生成的这些机器代码通常是分散在多个对象文件中的。为了将这些对象文件以及所依赖的库文件合并成一个单一的可执行文件,
86
+ 我们需要一个链接器,也就是7阶段。 7阶段Rust选择调用外部的链接工具,可能是 GNU 或 MSVC ,具体取决于目标平台和环境。
80
87
rustc为什么不自己实现第 7 阶段链接过程呢? 因为Rust编译器团队贯彻了"不重复造轮子"(Don’t reinvent the wheel)这一编程理念。
81
88
82
89
# Rust 配置
0 commit comments