|
|
@ -8,7 +8,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
> 注意:本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位于何处并没有特定的要求,如果相比命令行你更倾向于 IDE,请随意使用合意的 IDE。
|
|
|
|
> 注意:本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位于何处并没有特定的要求,如果相比命令行你更倾向于 IDE,请随意使用合意的 IDE。
|
|
|
|
|
|
|
|
|
|
|
|
### 创建项目文目录
|
|
|
|
### 创建项目目录
|
|
|
|
|
|
|
|
|
|
|
|
首先,创建一个存放 Rust 代码的目录。Rust 并不关心代码的位置,不过在本书中,我们建议你在 home 目录中创建一个 *projects* 目录,并把你的所有项目放在这。打开一个终端,输入如下命令为这个项目创建一个文件夹:
|
|
|
|
首先,创建一个存放 Rust 代码的目录。Rust 并不关心代码的位置,不过在本书中,我们建议你在 home 目录中创建一个 *projects* 目录,并把你的所有项目放在这。打开一个终端,输入如下命令为这个项目创建一个文件夹:
|
|
|
|
|
|
|
|
|
|
|
@ -75,7 +75,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
这几行定义了一个 Rust **函数**。`main` 函数是特殊的:它是每个可执行的 Rust 程序首先执行的。第一行代码表示 “我声明了一个叫做 `main` 的函数,它没有参数也没有返回值。” 如果有参数的话,他们的名称应该出现在括号中,`(`和`)`之间。
|
|
|
|
这几行定义了一个 Rust **函数**。`main` 函数是特殊的:它是每个可执行的 Rust 程序首先执行的。第一行代码表示 “我声明了一个叫做 `main` 的函数,它没有参数也没有返回值。” 如果有参数的话,他们的名称应该出现在括号中,`(`和`)`之间。
|
|
|
|
|
|
|
|
|
|
|
|
还须注意函数体被包裹在花括号中,`{`和`}` 之间。Rust 要求所有函数体都要用花括号包裹起来(译者注:有些语言,当函数体只有一行时可以省略花括号,但 Rust 中是不行的)。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
|
|
|
|
还须注意函数体被包裹在花括号中,`{`和`}` 之间。Rust 要求所有函数体都要用花括号包裹起来(译者注:有些语言,当函数体只有一行时可以省略花括号,但在 Rust 中是不行的)。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
|
|
|
|
|
|
|
|
|
|
|
|
在 `main()` 函数中:
|
|
|
|
在 `main()` 函数中:
|
|
|
|
|
|
|
|
|
|
|
@ -91,7 +91,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
该行以分号结尾(`;`)。`;` 代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以 `;` 结尾。
|
|
|
|
该行以分号结尾(`;`)。`;` 代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以 `;` 结尾。
|
|
|
|
|
|
|
|
|
|
|
|
### 编译和运行是两个步骤
|
|
|
|
### 编译和运行是彼此独立的步骤
|
|
|
|
|
|
|
|
|
|
|
|
“编写并运行 Rust 程序” 部分中展示了如何运行新创建的程序。现在我们将拆分并检查每一步操作。
|
|
|
|
“编写并运行 Rust 程序” 部分中展示了如何运行新创建的程序。现在我们将拆分并检查每一步操作。
|
|
|
|
|
|
|
|
|
|
|
@ -122,7 +122,7 @@ main.rs
|
|
|
|
$ ./main # or .\main.exe on Windows
|
|
|
|
$ ./main # or .\main.exe on Windows
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
如果 *main.rs* 是 “Hello, world!” 程序,它将会在终端上打印 `Hello, world!`。
|
|
|
|
如果 *main.rs* 是上文所述的 “Hello, world!” 程序,它将会在终端上打印 `Hello, world!`。
|
|
|
|
|
|
|
|
|
|
|
|
来自 Ruby、Python 或 JavaScript 这样的动态类型语言背景的同学,可能不太习惯将编译和执行分为两个单独的步骤。Rust 是一种 **预编译静态类型语言**(*ahead-of-time compiled language*),这意味着你可以编译程序并将其交与他人,他们不需要安装 Rust 即可运行。相反如果你给他们一个 `.rb`、`.py` 或 `.js` 文件,他们需要先分别安装 Ruby,Python,JavaScript 实现(运行时环境,VM),不过你只需要一句命令就可以编译和执行程序。这一切都是语言设计上的权衡取舍。
|
|
|
|
来自 Ruby、Python 或 JavaScript 这样的动态类型语言背景的同学,可能不太习惯将编译和执行分为两个单独的步骤。Rust 是一种 **预编译静态类型语言**(*ahead-of-time compiled language*),这意味着你可以编译程序并将其交与他人,他们不需要安装 Rust 即可运行。相反如果你给他们一个 `.rb`、`.py` 或 `.js` 文件,他们需要先分别安装 Ruby,Python,JavaScript 实现(运行时环境,VM),不过你只需要一句命令就可以编译和执行程序。这一切都是语言设计上的权衡取舍。
|
|
|
|
|
|
|
|
|
|
|
@ -267,7 +267,7 @@ Cargo 的另一个优点是,不管你使用什么操作系统其命令都是
|
|
|
|
|
|
|
|
|
|
|
|
### 发布(release)构建
|
|
|
|
### 发布(release)构建
|
|
|
|
|
|
|
|
|
|
|
|
当项目最终准备好发布了,可以使用 `cargo build --release` 来优化编译项目。这会在 *target/release* 而不是 *target/debug* 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过打开他们也需要更长的编译时间。这也就是为什么会有两种两种不同的配置:一种为了开发,你需要经常快速重新构建;另一种构建给用户的最终程序,他们不会重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 `cargo build --release` 并使用 *target/release* 下的可执行文件进行测试。
|
|
|
|
当项目最终准备好发布了,可以使用 `cargo build --release` 来优化编译项目。这会在 *target/release* 而不是 *target/debug* 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间。这也就是为什么会有两种不同的配置:一种为了开发,你需要经常快速重新构建;另一种为了构建给用户最终程序,他们不会重新构建,并且希望程序运行得越快越好。如果你在测试代码的运行时间,请确保运行 `cargo build --release` 并使用 *target/release* 下的可执行文件进行测试。
|
|
|
|
|
|
|
|
|
|
|
|
### 把 Cargo 当作习惯
|
|
|
|
### 把 Cargo 当作习惯
|
|
|
|
|
|
|
|
|
|
|
|