Merge pull request #238 from xiaohulu/master

update ch01-01-installation.md and delete ch01-00-introduction.md
This commit is contained in:
KaiserY 2018-08-20 10:11:15 +08:00 committed by GitHub
commit 02e342764b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 82 deletions

View File

@ -1,25 +0,0 @@
# 介绍
> [ch01-00-introduction.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch01-00-introduction.md)
> <br>
> commit d06a6a181fd61704cbf7feb55bc61d518c6469f9
欢迎阅读 “Rust 程序设计语言”,一本介绍 Rust 的书。Rust 是一门着眼于安全、速度和并发的编程语言。其程序设计兼顾底层语言的性能与控制,并不失高级语言强大的抽象能力。其特性适合那些有类 C 语言经验,正在寻找更安全的替代品的开发者;同样适合有着类 Python 语言背景,寻求在不牺牲表现力的前提下,编写更高性能代码的开发者。
Rust 编译时执行绝大部分的安全检查和内存管理决策对运行时性能的影响微不足道。这使其在其他语言不擅长的应用场景中得以大显身手可预测时间和空间需求的程序嵌入到其他语言中以及编写如设备驱动和操作系统这样的底层代码。Rust 也很擅长 web 程序:它驱动着 Rust 包登记网站package
registry site[crates.io]!我们由衷期待**你**使用 Rust 进行创作。
[crates.io]: https://crates.io/
本书的目标读者至少应了解一门其它编程语言。阅读本书之后,你应该能自如的编写 Rust 程序。我们将通过短小精干、前后呼应的例子来学习 Rust并展示其多样功能的使用方法同时了解它们幕后如何运行。
## 为本书做出贡献
本书是开源的。如果你发现任何错误,不要犹豫,[在 GitHub 上][on GitHub]发起 issue 或提交 pull request。请查看 [CONTRIBUTING.md] 获取更多信息。
[on GitHub]: https://github.com/rust-lang/book
[CONTRIBUTING.md]: https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md
> 译者注:本译本的 [GitHub 仓库][trpl-zh-cn],同样欢迎 Issue 和 PR :)
[trpl-zh-cn]: https://github.com/KaiserY/trpl-zh-cn

View File

@ -2,17 +2,19 @@
> [ch01-01-installation.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch01-01-installation.md)
> <br>
> commit d1448cef370442b51e69298fb734fe29a3d14577
> commit 7480e811ab5ad8d53a5b854d9b0c7a5a4f58499f
第一步是安装 Rust。我们通过 `rustup` 下载 Rust这是一个管理 Rust 版本和相关工具的命令行工具。你需要网络连接来进行下载
第一步是安装 Rust。我们通过 `rustup` 下载 Rust这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要联网
接下来的步骤会下载最新的稳定stable版 Rust 编译器。本书所有的示例和输出采用稳定版 Rust 1.21.0。Rust 的稳定性确保本书所有的例子在更新版本的 Rust 中能够继续编译。不同版本的输出可能有轻微的不同,因为 Rust 经常改进错误信息和警告。换句话说,任何通过这些步骤所安装的更新稳定版 Rust 预期能够使用本书的内容。
> 注意:如果出于某些理由你倾向于不使用 `rustup`,请到 [Rust 安装页面](https://www.rust-lang.org/install.html) 查看其它安装选项。
接下来的步骤会安装最新的稳定版 Rust 编译器。本书所有示例和输出采用稳定版 Rust 1.21.0。Rust 的稳定性确保本书所有示例在最新版本的 Rust 中能够继续编译。不同版本的输出可能略有不同,因为 Rust 经常改进错误信息和警告。也就是说,通过这些步骤安装的最新稳定版 Rust能正常运行本书中的内容。
> ### 命令行标记
>
> 本章和全书中我们展示了一些使用终端的命令。所有需要输入到终端的行都以 `$` 开头。无需输入`$`;它代表每行命令的起始。很多教程遵循 `$` 代表以常规用户身份运行命令,`#` 代表以管理员身份运行命令的惯例。不以 `$`(或 `#`起始的行通常展示之前命令的输出。另外PowerShell 特定的示例会采用 `>` 而不是 `$`
> 本章和全书中,我们会展示在终端中使用的命令。所有需要输入到终端的行都以 `$` 开头。但无需输入`$`;它代表每行命令的起点。不以 `$` 起始的行通常展示之前命令的输出。另外PowerShell 专用的示例会采用 `>` 而不是 `$`
### 在 Linux 或 macOS 上安装 Rustup
### 在 Linux 或 macOS 上安装 `rustup`
如果你使用 Linux 或 macOS打开终端并输入如下命令
@ -20,15 +22,15 @@
$ curl https://sh.rustup.rs -sSf | sh
```
这个命令下载一个脚本并开始 `rustup` 工具的安装,这会安装最新稳定版 Rust。过程中可能会提示你输入密码。如果安装成功将会出现如下内容
此命令下载一个脚本并开始安装 `rustup` 工具,这会安装最新稳定版 Rust。过程中可能会提示你输入密码。如果安装成功将会出现如下内容
```text
Rust is installed now. Great!
```
当然,如果你不信任采用 `curl URL | sh` 来安装软件,请随意下载、检查和运行这个脚本。
如果你愿意,可在运行前下载并检查该脚本。
此安装脚本自动将 Rust 加入系统 PATH 环境变量中,在下一次登时生效。如果你希望立刻就开始使用 Rust 而不重启终端,在 shell 中运行如下命令手动将 Rust 加入系统 PATH 变量:
此安装脚本自动将 Rust 加入系统 PATH 环境变量中,在下一次登时生效。如果你希望立刻就开始使用 Rust 而不重启终端,在 shell 中运行如下命令手动将 Rust 加入系统 PATH 变量
```text
$ source $HOME/.cargo/env
@ -40,25 +42,20 @@ $ source $HOME/.cargo/env
$ export PATH="$HOME/.cargo/bin:$PATH"
```
另外,你需要一个某种类型的连接器linker。可能他们已经安装了不过当尝试编译 Rust 程序并得到表明连接器无法执行的错误时,你需要自行安装一个。可以安装一个 C 编译器,因为它通常带有正确的连接器。查看对应平台的文档了解如何安装 C 编译器。一些常见的 Rust 包会依赖 C 代码并因此也会需要 C 编译器,所以目前无论如何安装它都是值得的。
另外,你需要一个某种类型的链接器linker。很有可能已经安装不过当你尝试编译 Rust 程序时却有错误指出无法执行链接器这意味着你的系统上没有安装链接器你需要自行安装一个。C 编译器通常带有正确的链接器。请查看你使用平台的文档,了解如何安装 C 编译器。并且,一些常用的 Rust 包依赖 C 代码,也需要安装 C 编译器。因此现在安装一个是值得的。
### 在 Windows 上安装 Rustup
### 在 Windows 上安装 `rustup`
在 Windows 上,前往 [https://www.rust-lang.org/en-US/install.html][install] 并按照其指示安装 Rust。在安装过程的某个步骤你会收到一个信息说明为什么你也需要 Visual Studio 2013 或之后版本的 C++ build tools。获取这些 build tools 最简单的方式是安装 [Build Tools for Visual Studio 2017][visualstudio]。这些工具位于其他工具和框架部分。
在 Windows 上,前往 [https://www.rust-lang.org/install.html][install] 并按照说明安装 Rust。在安装过程的某个步骤你会收到一个信息说明为什么需要安装 Visual Studio 2013 或之后版本的 C++ build tools。获取这些 build tools 最方便的方法是安装 [Build Tools for Visual Studio 2017][visualstudio]。这个工具在 “Other Tools and Frameworks” 部分。
[install]: https://www.rust-lang.org/en-US/install.html
[install]: https://www.rust-lang.org/install.html
[visualstudio]: https://www.visualstudio.com/downloads/
本书的余下部分使用能同时用于 *cmd.exe* 和 PowerShell 的命令。如果出现特定不同情况时,我们会说明如何使用。
### 不使用 Rustup 自定义安装
如果出于某些理由你倾向于不使用 `rustup`,请查看 [Rust 安装页面](https://www.rust-lang.org/install.html) 获取其他选项。
本书的余下部分,使用能同时运行于 *cmd.exe* 和 PowerShell 的命令。如果存在特定差异,我们会解释使用哪一个。
### 更新和卸载
通过 `rustup` 安装了 Rust 之后,,更新到最新版本是很简单的。在 shell 中运行如下更新脚本:
通过 `rustup` 安装了 Rust 之后,很容易更新到最新版本。在 shell 中运行如下更新脚本:
```text
$ rustup update
@ -72,33 +69,29 @@ $ rustup self uninstall
### 故障排除Troubleshooting
对于检查是否正确安装了 Rust打开 shell 并运行如下行:
检查是否正确安装了 Rust打开 shell 并运行如下行:
```text
$ rustc --version
```
应该能看到类似这样格式的版本号、提交哈希和提交日期,对应已发布的最新稳定版
你应能看到已发布的最新稳定版的版本号、提交哈希和提交日期,显示为如下格式
```text
rustc x.y.z (abcabcabc yyyy-mm-dd)
```
如果出现这些内容Rust 就安装成功了!如果并没有看到这些信息并且使用 Windows请检查 Rust 是否位于 `%PATH%` 系统变量中。如果一切正确但 Rust 仍不能使用,有许多地方可以求助。
恭喜入坑!(此处应该有掌声!)
如果在 Windows 中使用出现问题,检查 Rustrustccargo 等)是否在 `%PATH%` 环境变量所包含的路径中。最简单的是 [irc.mozilla.org 上的 #rust IRC 频道][irc]<!-- ignore --> ,可以使用 [Mibbit][mibbit] 来访问它。在这里你可以与其他能够帮助你的 RustaceanRust 用户的称号,有自嘲意味)聊天。其它给力的资源包括[用户论坛][users]和 [Stack Overflow][stackoverflow]。
如果还是不能解决,有许多地方可以求助。最简单的是 [irc.mozilla.org 上的 #rust IRC 频道][irc]<!-- ignore --> ,可以使用 [Mibbit][mibbit] 来访问它。然后就能和其他 RustaceanRust 用户的称号,有自嘲意味)聊天并寻求帮助。其它给力的资源包括[用户论坛][users]和 [Stack Overflow][stackoverflow]。
如果出现这些内容Rust 就安装成功了!如果并没有看到这些信息,并且使用的是 Windows请检查 Rust 是否位于 `%PATH%` 系统变量中。如果一切正确但 Rust 仍不能使用,有许多地方可以求助。最简单的是 [irc.mozilla.org 上的 #rust IRC 频道][irc]<!-- ignore --> ,可以使用 [Mibbit][mibbit] 来访问它。然后就能和其他 RustaceanRust 用户的称号,有自嘲意味)聊天并寻求帮助。其它给力的资源包括[用户论坛][users]和 [Stack Overflow][stackoverflow]。
[irc]: irc://irc.mozilla.org/#rust
[mibbit]: http://chat.mibbit.com/?server=irc.mozilla.org&channel=%23rust
[users]: https://users.rust-lang.org/
[stackoverflow]: http://stackoverflow.com/questions/tagged/rust
恭喜入坑!(此处应该有掌声!)
### 本地文档
安装程序也自带一份文档的本地拷贝,可以离线阅读。运行 `rustup doc` 在浏览器中查看本地文档。
任何时候,如果你拿不准标准库中的类型或函数如何工作请查看应用程序接口application programming interface API文档
任何时候,如果你拿不准标准库中的类型或函数的用途和用法请查看应用程序接口application programming interfaceAPI文档

View File

@ -2,17 +2,17 @@
> [ch01-02-hello-world.md](https://github.com/rust-lang/book/blob/master/second-edition/src/ch01-02-hello-world.md)
> <br>
> commit d1448cef370442b51e69298fb734fe29a3d14577
> commit 5dfa983aa8fca89f8b70cafe58ab8417491d2018
既然安装好了 Rust我们来编写第一个 Rust 程序。当学习一门新语言的时候,使用该语言在屏幕上打印 “Hello, world!” 是一项传统,这里我们将遵循这个传统!
既然安装好了 Rust我们来编写第一个 Rust 程序。当学习一门新语言的时候,使用该语言在屏幕上打印 `Hello, world!` 是一项传统,这里我们将沿用这个传统!
> 注意本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具,以及代码位于何处并没有特定的要求,如果相比命令行你更倾向于使用集成开发环境IDE请随意使用合意的 IDE。目前很多 IDE 拥有不同程度的 Rust 支持;查看 IDE 文档了解更多细节。目前 Rust 团队已经致力于提供强大的 IDE 支持,而且进展飞速!
> 注意本书假设你熟悉基本的命令行操作。Rust 对于你的编辑器、工具以及代码位于何处并没有特定的要求如果你更倾向于使用集成开发环境IDE而不是命令行,请尽管使用你喜欢的 IDE。目前很多 IDE 已经不同程度的支持 Rust查看 IDE 文档了解更多细节。最近,Rust 团队已经致力于提供强大的 IDE 支持,而且进展飞速!
### 创建项目目录
首先创建一个存放 Rust 代码的目录开始。Rust 并不关心代码的位置,不过对于本书的练习和项目来说,我们建议你在 home 目录中创建一个 *projects* 目录,并将你的所有项目置于此处
首先创建一个存放 Rust 代码的目录。Rust 并不关心代码的存放位置,不过对于本书的练习和项目来说,我们建议你在 home 目录中创建 *projects* 目录,并将你的所有项目存放在这里
打开终端并输入如下命令创建一个 *projects* 目录并在 *projects* 目录中为 Hello, world! 创建一个目录。
打开终端并输入如下命令创建 *projects* 目录并在 *projects* 目录中为 Hello, world! 项目创建一个目录。
对于 Linux 和 macOS输入
@ -43,9 +43,9 @@ $ cd hello_world
### 编写并运行 Rust 程序
接下来,新建一个叫做 *main.rs* 的源文件。Rust 源代码总是以 *.rs* 后缀结尾。如果文件名包含多个单词,使用下划线分隔它们。例如 *my_program.rs*,而不是 *myprogram.rs*。
接下来,新建一个源文件,命名为 *main.rs*。Rust 源文件总是以 *.rs* 扩展名结尾。如果文件名包含多个单词,使用下划线分隔它们。例如命名为 *hello_world.rs*,而不是 *helloworld.rs*。
现在打开刚创建的 *main.rs* 文件,输入如示例 1-1 所示的代码。
现在打开刚创建的 *main.rs* 文件,输入示例 1-1 中的代码。
<span class="filename">文件名: main.rs</span>
@ -55,9 +55,9 @@ fn main() {
}
```
<span class="caption">示例 1-1: 一个打印 “Hello, world!” 的程序</span>
<span class="caption">示例 1-1: 一个打印 `Hello, world!` 的程序</span>
保存文件,并回到终端窗口。在 Linux 或 macOS 上,输入如下命令编译并运行文件:
保存文件,并回到终端窗口。在 Linux 或 macOS 上,输入如下命令编译并运行文件:
```text
$ rustc main.rs
@ -65,7 +65,7 @@ $ ./main
Hello, world!
```
在 Windows 上,输入命令 `.\main.exe` 而不是 `./main`
在 Windows 上,输入命令 `.\main.exe`,而不是 `./main`
```powershell
> rustc main.rs
@ -73,13 +73,13 @@ Hello, world!
Hello, world!
```
不管使用何种系统,字符串 `Hello, world!` 应该打印到终端。如果没有看到这些输出,回到 “故障排除” 部分查找寻求帮助的方
不管使用何种操作系统,终端应该打印字符串 `Hello, world!`。如果没有看到这些输出,回到 “故障排除” 部分查找寻求帮助的方
如果 `Hello, world!` 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为了一名 Rust 程序员!欢迎!
如果 `Hello, world!` 出现了,恭喜你!你已经正式编写了一个 Rust 程序。现在你成为一名 Rust 程序员,欢迎!
### 分析 Rust 程序
现在,让我们回过头来仔细看看 Hello, world! 程序中到底发生了什么。这是拼图的第一片
现在,让我们回过头来仔细看看 Hello, world! 程序中到底发生了什么。这是第一块拼图:
```rust
fn main() {
@ -87,11 +87,11 @@ fn main() {
}
```
这几行定义了一个 Rust **函数**。`main` 函数是特殊的:它是每个可执行的 Rust 程序所首先执行的代码。第一行代码声明了一个叫做 `main` 的函数,它没有参数也没有返回值。如果有参数的话,它们的名称应该出现在括号中,位于 `(` 和 `)` 之间
这几行定义了一个 Rust 函数。`main` 函数是一个特殊的函数:在可执行的 Rust 程序中,它总是最先运行的代码。第一行代码声明了一个叫做 `main` 的函数,它没有参数也没有返回值。如果有参数的话,它们的名称应该出现在括号中,`()`。
还须注意函数体被包裹在花括号中,`{` 和 `}` 之间。Rust 要求所有函数体都要用花括号包裹起来(译者注:有些语言,当函数体只有一行时可以省略花括号,但在 Rust 中是不行的)。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
还须注意函数体被包裹在花括号中,`{}`。Rust 要求所有函数体都要用花括号包裹起来(译者注:有些语言,当函数体只有一行时可以省略花括号,但在 Rust 中是不行的)。一般来说,将左花括号与函数声明置于同一行并以空格分隔,是良好的代码风格。
在编写本书的时候,一个叫做 `rustfmt` 的自动格式化工具正在开发中。如果你希望在 Rust 项目中保持一种标准风格,`rustfmt` 会将代码格式化为特定的风格。Rust 团队计划最终将包含在标准 Rust 发行版中,就像 `rustc`。所以根据你阅读本书的时间,它可能已经安装到你的电脑中了!检查在线文档以了解更多细节。
在编写本书的时候,一个叫做 `rustfmt` 的自动格式化工具正在开发中。如果你希望在 Rust 项目中保持一种标准风格,`rustfmt` 会将代码格式化为特定的风格。Rust 团队计划最终将该工具包含在标准 Rust 发行版中,就像 `rustc`。所以根据你阅读本书的时间,它可能已经安装到你的电脑中了!检查在线文档以了解更多细节。
`main()` 函数中是如下代码:
@ -99,27 +99,27 @@ fn main() {
println!("Hello, world!");
```
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。首先 Rust 使用 4 个空格的缩进风格,而不是 1 个制表符tab
这行代码完成这个简单程序的所有工作:在屏幕上打印文本。这里有四个重要的细节需要注意。首先 Rust 的缩进风格使用 4 个空格,而不是 1 个制表符tab
第二,`println!` 调用了一个 Rust *****macro*)。如果是调用函数,则应输入 `println`(没有`!`)。我们将在附录 D 中更加详细讨论宏。现在你只需记住,当看到符号 `!` 的时候,就意味着调用的是宏而不是普通函数。
第二,`println!` 调用了一个 Rust 宏macro。如果是调用函数则应输入 `println`(没有`!`)。我们将在附录 D 中详细讨论宏。现在你只需记住,当看到符号 `!` 的时候,就意味着调用的是宏而不是普通函数。
第三,`"Hello, world!"` 是一个 **字符串**。我们把这个字符串作为一个参数传递给 `println!`,字符串将被打印到屏幕上。
第三,`"Hello, world!"` 是一个字符串。我们把这个字符串作为一个参数传递给 `println!`,字符串将被打印到屏幕上。
第四,该行以分号结尾(`;`),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以 `;` 结尾。
第四,该行以分号结尾(`;`),这代表一个表达式的结束和下一个表达式的开始。大部分 Rust 代码行以分号结尾。
### 编译和运行是彼此独立的步骤
你刚刚运行了一个新创建的程序,那么让我们检查过程中的每一个步骤。
你刚刚运行了一个新创建的程序,那么让我们检查过程中的每一个步骤。
在运行 Rust 程序之前,必须先通过 `rustc` 命令并传递源文件名称来使用 Rust 编译器来编译它,如下:
在运行 Rust 程序之前,必须先使用 Rust 编辑器编译它,即输入 `rustc` 命令并传入源文件名称,如下:
```text
$ rustc main.rs
```
如果你有 C 或 C++ 背景,就会发现这与 `gcc``clang` 类似。编译成功后Rust 应该会输出一个二进制可执行文件。
如果你有 C 或 C++ 背景,就会发现这与 `gcc``clang` 类似。编译成功后Rust 会输出一个二进制可执行文件。
在 Linux、macOS 或 Windows的 PowerShell 上在 shell 中可以通过 `ls` 命令看到如下内容
在 Linux、macOS 或 Windows 的 PowerShell 上,在 shell 中输入 `ls` 命令就可看见这个可执行文件,如下
```text
$ ls
@ -135,14 +135,14 @@ main.pdb
main.rs
```
这展示了 *.rs* 后缀的源文件、可执行文件(在 Windows下是 *main.exe*,其它平台是 *main*),以及当使用 CMD 时会有一个包含调试信息*.pdb* 后缀的文件。从这里开始运行 *main**main.exe* 文件,如下:
这展示了扩展名为 *.rs* 的源文件、可执行文件(在 Windows 下是 *main.exe*,其它平台是 *main*),以及当使用 CMD 时会有一个包含调试信息、扩展名为 *.pdb* 的文件。从这里开始运行 *main**main.exe* 文件,如下:
```text
$ ./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*)语言,这意味着你可以编译程序并将其交与他人,他们不需要安装 Rust 即可运行。如果你给他人一个 `.rb`、`.py` 或 `.js` 文件,他们需要先分别安装 RubyPythonJavaScript 实现运行时环境VM。不过在这些语言中只需要一句命令就可以编译和行程序。这一切都是语言设计上的权衡取舍。
如果你更熟悉动态语言,如 Ruby、Python 或 JavaScript则可能不习惯将编译和运行分为两个单独的步骤。Rust 是一种 **预编译静态类型***ahead-of-time compiled*)语言,这意味着你可以编译程序,并将可执行文件送给其他人,他们甚至不需要安装 Rust 就可以运行。如果你给他人一个 *.rb*、*.py* 或 *.js* 文件,他们需要先分别安装 RubyPythonJavaScript 实现运行时环境VM。不过在这些语言中只需要一句命令就可以编译和行程序。这一切都是语言设计上的权衡取舍。
仅仅使用 `rustc` 编译简单程序是没问题的,不过随着项目的增长,你可能需要控制你项目的方方面面,并且更容易地将代码分享给其它人或项目。接下来,我们要介绍一个叫做 Cargo 的工具,它会帮助你编写真实世界中的 Rust 程序。
仅仅使用 `rustc` 编译简单程序是没问题的,不过随着项目的增长,你可能需要管理你项目的方方面面,并让代码易于分享。接下来,我们要介绍一个叫做 Cargo 的工具,它会帮助你编写真实世界中的 Rust 程序。