|
| 1 | +# 为什么学习 Rust |
| 2 | + |
| 3 | +我们已经进入 JavaScript 的第三阶段,越来越多的 JavaScript 工具将使用编译型语言进行编写。 |
| 4 | + |
| 5 | +得益于 Rust WebAssembly 工作组的不懈努力,Rust 编译为 WebAssembly 已成为可能。 |
| 6 | + |
| 7 | +## 编译型与解释型语言 |
| 8 | + |
| 9 | +### 编译型语言 |
| 10 | +编译型语言需要使用编译器,不同平台需要生成不同的机器语言。例如,Rust、C、C++ 等。 |
| 11 | + |
| 12 | +### 解释型语言 |
| 13 | +解释型语言通过解释器(如 V8)来生成机器语言,因此没有跨平台的问题。例如,JavaScript。 |
| 14 | + |
1 | 15 | --- |
2 | | -outline: deep |
| 16 | + |
| 17 | +## Cargo:Rust 的构建系统和包管理器 |
| 18 | + |
| 19 | +- **创建项目**: |
| 20 | + 使用 `cargo new` 创建一个新项目。 |
| 21 | + |
| 22 | +- **构建项目**: |
| 23 | + 使用 `cargo build` 来构建一个项目。 |
| 24 | + |
| 25 | +- **构建并运行项目**: |
| 26 | + 使用 `cargo run` 一步构建并运行一个项目。 |
| 27 | + |
| 28 | +- **检查代码错误**: |
| 29 | + 使用 `cargo check` 构建项目而无需生成二进制文件,以便检查代码中的错误。 |
| 30 | + |
| 31 | +- **构建结果的存储**: |
| 32 | + Cargo 不会将构建结果保存在与代码相同的目录中,而是将其存储在 `target/debug` 目录中。 |
| 33 | + |
| 34 | +- **发布优化**: |
| 35 | + 当项目准备好发布时,可以使用 `cargo build --release` 来进行优化构建。 |
| 36 | + |
3 | 37 | --- |
4 | | -为什么学习rust |
5 | 38 |
|
6 | | -我们已经进入javaScript第三阶段,越来越多的js工具将使用编译型语言进行编写 |
| 39 | +## Rust 函数返回值 |
| 40 | + |
| 41 | +在 Rust 中,如果一个函数体以没有尾随分号的表达式结尾,那么该表达式会成为函数的返回值。实际上,花括号包起来的任意代码块都可以用作表达式。 |
| 42 | + |
| 43 | +--- |
7 | 44 |
|
8 | | -并且得益于Rust WebAssembly工作组的不懈努力,使得rust编译为WebAssembly成为可能 |
| 45 | +## 单元测试 |
9 | 46 |
|
10 | | -## 编译型/解释型语言 |
11 | | -编译型:需要使用编译器,不同平台需要生成不同的机器语言 |
12 | | -解释性: 例如js,通过js解释器(v8)来生成机器语言,没有跨平台的问题 |
| 47 | +Rust 提供了强大的单元测试功能。在代码中,我们可以使用 `#[test]` 属性来标记测试函数。以下是一个示例: |
13 | 48 |
|
14 | | -Cargo 是 Rust 的构建系统和包管理器 |
| 49 | +```rust |
| 50 | +#[test] |
| 51 | +fn test_gcd() { |
| 52 | + assert_eq!(gcd(14, 15), 1); |
| 53 | + assert_eq!(gcd(2 * 3 * 5 * 11 * 17, |
| 54 | + 3 * 7 * 11 * 13 * 19), |
| 55 | + 3 * 11); |
| 56 | +} |
15 | 57 |
|
16 | | -* 我们可以使用创建一个项目cargo new。 |
17 | | -* 我们可以使用 来构建一个项目cargo build。 |
18 | | -* 我们可以使用 一步构建并运行一个项目cargo run。 |
19 | | -* 我们可以构建一个项目,而无需生成二进制文件来检查错误 cargo check。 |
20 | | -* Cargo 不会将构建结果保存在与代码相同的目录中,而是将其存储在target/debug目录中。 |
21 | 58 |
|
22 | | -当您的项目最终准备好发布时,您可以使用cargo build --release优化来编译它 |
| 59 | +``` |
| 60 | +* #[test]:标记 test_gcd 为测试函数,在正常编译时会跳过它。 |
| 61 | +* 但是,当我们使用 cargo test 命令运行程序时,Cargo 会自动包含并运行所有标记为测试的函数。 |
| 62 | +* 测试函数可以分散在源代码树中的任何位置,紧跟着它们所测试的代码。cargo test 会自动收集并运行这些测试函数。 |
0 commit comments