mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2026-08-19 12:43:28 +08:00
Updated src/getting_started/hello_world.md'.
This commit is contained in:
@@ -12,8 +12,6 @@
|
||||
|
||||
首先,咱们将创建一个存储咱们 Rust 代码的目录。对于 Rust 来说,代码存放在哪里并不重要,但对于本书中的练习和项目,我们建议在咱们的主目录下,创建一个 `projects` 目录,并将咱们的所有项目,都放在那里。
|
||||
|
||||
这里是以构造一个保存 Rust 代码的目录开始的。对于 Rust 来说,代码位居何处并不重要,不过对于本书中的练习与项目,是建议在主目录下构造一个 `projects` 目录,并把全部项目放在那里的。
|
||||
|
||||
请打开某个终端,并输入以下命令,创建 `projects` 目录,并在 `projects` 目录下,创建出这个 "Hello, world!" 的项目目录。
|
||||
|
||||
对于 Linux、macOS 和 Windows 上的 `PowerShell`, 请输入:
|
||||
@@ -39,7 +37,7 @@ $ cd hello_world
|
||||
|
||||
接下来,请创建一个新的源文件,并将其命名为 `main.rs`。Rust 文件总是以 `.rs` 扩展名结尾。如果咱们在文件名中,使用了多个单词,惯例是要使用下划线,分隔这些单词。例如,请使用 `hello_world.rs`,而不是 `helloworld.rs`。
|
||||
|
||||
现在请打开咱们刚刚创建的 `main.rs` 文件,输入下面清单 1-1 中的代码。
|
||||
现在打开咱们刚创建的 `main.rs` 文件,输入下面清单 1-1 中的代码。
|
||||
|
||||
文件名:`main.rs`
|
||||
|
||||
@@ -49,9 +47,9 @@ fn main() {
|
||||
}
|
||||
```
|
||||
|
||||
*清单 1-1:打印出`Hello, World!` 的一个程序*
|
||||
*清单 1-1:打印 `Hello, World!` 的一个程序*
|
||||
|
||||
请保存该文件,并返回到 `~/projects/hello_world` 目录下,咱们的终端窗口。在 Linux 或 macOS 上,请输入以下命令,编译并运行该文件:
|
||||
请保存该文件,并返回到 `~/projects/hello_world` 目录下,咱们的终端窗口。在 Linux 或 macOS 上输入以下命令,编译并运行该文件:
|
||||
|
||||
```console
|
||||
$ rustc main.rs
|
||||
@@ -95,11 +93,11 @@ fn main() {
|
||||
}
|
||||
```
|
||||
|
||||
这些行定义了一个名为 `main` 的函数。`main` 函数很特别:他总是每个可执行 Rust 程序中,运行的第一段代码。这里,其中第一行,声明了一个没有参数,也不返回任何内容的名为 `main` 的函数。如果有参数,则会放在括号 `()` 内。
|
||||
这些代码行定义了个名为 `main` 的函数。`main` 函数很特别:他总是每个可执行 Rust 程序中,运行的第一段代码。这里,其中第一行声明了个没有参数,也不返回任何内容的名为 `main` 的函数。如果有参数,则会放在括号 `()` 内。
|
||||
|
||||
函数体被包裹在 `{}` 中。Rust 要求,在所有函数体周围使用大括号。将开头的大括号,与函数声明放在同一行,在二者之间添加一个空格,是一种良好的编码风格。
|
||||
函数体被包裹在 `{}` 中。Rust 要求,在所有函数体外部使用大括号。将开头的大括号,与函数声明放在同一行,在二者之间添加一个空格,是一种良好的编码风格。
|
||||
|
||||
> **注意**:如果咱们想在不同的 Rust 项目间,坚持使用某种标准的风格,咱们可以使用一个名为 `rustfmt` 的自动格式化工具,以某种特定风格,格式化咱们的代码(关于 `rustfmt` 的更多信息,请参见 [附录 D](../appendix/dev_tools.md))。如同 `rustc` 一样,Rust 团队已将这个工具,包含在了标准 Rust 发布中,因此他应该已安装在咱们的电脑上了!
|
||||
> **注意**:若咱们打算在不同 Rust 项目间,坚持使用标准风格,咱们可以使用一个名为 `rustfmt` 的自动格式化工具,以特定风格格式化咱们的代码(关于 `rustfmt` 的更多信息,请参见 [附录 D](../appendix/dev_tools.md))。如同 `rustc` 一样,Rust 团队已将这个工具,包含在了标准 Rust 发布中,因此他应已安装在咱们的电脑上了!
|
||||
|
||||
`main` 函数的主体,包含以下代码:
|
||||
|
||||
@@ -111,28 +109,27 @@ println!("Hello, World!");
|
||||
|
||||
首先,Rust 的编码风格,是缩进四个空格,而非一个制表符;
|
||||
|
||||
其次,`println!` 调用了个 Rust 宏。若他调用的是个函数,就会以 `println` 的形式输入(不带 `!`)。所谓 Rust 宏,属于一种编写代码的方式,用于生成代码以扩展 Rust 语法,我们将在 [第 20 章](../advanced_features/macros.md) 详细讨论 Rust 的宏。现在,咱们只需知道,使用 `!` 表示咱们调用的是宏,而不是普通函数,而且宏并不总会遵循与函数相同的规则;
|
||||
|
||||
其次,`println!` 调用了一个 Rust 宏。如果他调用的是个函数,就会以 `println` 的形式输入(不带 `!`)。 我们将在第 19 章,详细讨论 Rust 的宏。现在,咱们只需知道,使用 `!` 表示咱们调用的是宏,而不是普通函数,而且宏并不总会遵循,与函数相同的规则。
|
||||
第三,咱们会看到那个 "Hello, world!" 字符串。我们将该字符串作为参数传递给 `println!`,而这个字符串会被打印到屏幕;
|
||||
|
||||
第三,咱们会看到那个 "Hello, world!" 字符串。我们将该字符串作为参数,传递给了 `println!`;
|
||||
|
||||
最后,我们以表示此表达式结束,下个表达式准备开始的分号(`;`),结束了这行。Rust 代码的大多数行,都会以分号结束。
|
||||
最后,我们以表示这个表达式结束,下一表达式准备开始的分号(`;`)结束这行。Rust 代码的大多数行都以分号结束。
|
||||
|
||||
|
||||
## 编译和运行是两个独立的步骤
|
||||
## 编译和运行(执行)是两个独立的步骤
|
||||
|
||||
**Compiling and Running Are Separate Steps**
|
||||
**Compiling and Running(Execution) Are Separate Steps**
|
||||
|
||||
|
||||
咱们刚刚运行了一个新进创建出的程序,那么就来监视一下,这个过程的每个步骤。
|
||||
咱们刚刚运行了一个新近创建出的程序,那么我们来检视一下,这一过程的每个步骤。
|
||||
|
||||
运行某个 Rust 程序之前,咱们必须通过输入 `rustc` 命令,并将源文件的名字传给他,而使用 Rust 的编译器编译他,就像这样:
|
||||
运行某个 Rust 程序前,咱们必须通过输入 `rustc` 命令,并将源文件的名字传给他,而使用 Rust 的编译器编译他,就像这样:
|
||||
|
||||
```console
|
||||
$ rustc main.rs
|
||||
```
|
||||
|
||||
如果你有 C 或 C++ 背景,就会发现这与 `gcc` 或 `clang` 类似。编译成功后,Rust 会输出二进制可执行文件。
|
||||
若咱们有 C 或 C++ 背景,就会发现这与 `gcc` 或 `clang` 类似。编译成功后,Rust 会输出二进制可执行文件。
|
||||
|
||||
在 Linux、macOS 以及 Windows 的 PowerShell 中,咱们可以在咱们的 shell 中,输入 `ls` 命令看到这个可执行文件:
|
||||
|
||||
@@ -159,9 +156,9 @@ $ ./main # 或在 Windows 上的 .\main.exe
|
||||
```
|
||||
如果咱们的 `main.rs`,是那个 "Hello, world!" 程序,那么这行就会将 `Hello, world!` 打印到终端。
|
||||
|
||||
如果咱们更熟悉 Ruby、Python 或 JavaScript 等某门动态语言,则可能不习惯于将编译和运行某个程序,作为单独的步骤。Rust 属于一门 *提前编译,ahead-of-time compiled* 语言,这意味着,你能够编译某个程序,并把可执行文件交给其他人,而即使他们没有安装 Rust,也可以运行这个可执行程序。而如果咱们给别人某个 `.rb`、`.py` 或 `.js` 文件,他们就需要分别安装 Ruby、Python 或 JavaScript 的某种实现。不过在这些语言中,咱们只需要一条命令,来编译并运行咱们的程序。在语言设计中,一切都需要权衡利弊,everything is a trade-off in language design。
|
||||
若咱们更熟悉 Ruby、Python 或 JavaScript 等某门动态语言,则可能不习惯于将编译和运行某个程序,作为单独的步骤。Rust 属于一门 *提前编译,ahead-of-time compiled* 语言,这意味着,咱们能够编译某个程序,并把可执行文件交给其他人,而即使他们没有安装 Rust,也可以运行这个可执行程序。而若咱们给某人一个 `.rb`、`.py` 或 `.js` 文件,他们就需要分别安装 Ruby、Python 或 JavaScript 的某种实现。不过在这些语言中,咱们只需要一条命令编译并运行咱们的程序。在语言设计中,一切都需要权衡利弊,everything is a trade-off in language design。
|
||||
|
||||
对于简单程序,使用 `rustc` 编译就可以了,但随着项目的发展,咱们会希望管理所有选项,以及并方便共用咱们的代码。接下来,我们将介绍,将会帮助咱们编写真实世界 Rust 程序的 Cargo 工具。
|
||||
对于简单程序,使用 `rustc` 编译就很好,但随着项目的发展,咱们会希望管理所有选项,及使分享咱们的代码更容易。接下来,我们将介绍,将帮助咱们编写真实世界 Rust 程序的 Cargo 工具。
|
||||
|
||||
|
||||
(End)
|
||||
|
||||
Reference in New Issue
Block a user