Refining Ch01.

This commit is contained in:
rust-lang.xfoss.com 2023-12-01 16:21:21 +08:00
parent cbdf192b38
commit b5611aed65
3 changed files with 112 additions and 43 deletions

View File

@ -3,5 +3,7 @@
现在就开始 Rust 之旅!有很多要掌握的东西,不过千里之行,始于足下。本章将讨论:
- 在 Linux、macOS 及 Windows 上安装 Rust;
- 编写一个打印出 `Hello, world!` 的程序来;
- Rust 的包管理器和构建系统 Cargo 的使用。
- 编写一个打印出 `Hello, world!` 的程序;
- 使用 Rust 的包管理器与构建系统 Cargo 。

View File

@ -1,20 +1,26 @@
# `Hello, World!`
既然已经安装好了 Rust, 那么就来编写第一个 Rust 程序吧。在掌握一门新语言时,传统就是要编写一个小的、打印出文字 `Hello, World!` 到屏幕上的程序,因此这里也会干这同样的事情!
现在咱们已经安装了 Rust那么就是时候编写第一个 Rust 程序了。学习一门新语言的传统做法,是编写一个在屏幕上打印出 `Hello, world!` 的小程序,所以咱们在这里,也要做同样的事情。
> 注意本书假定读者对命令行有着基本的熟悉。Rust 对代码在何处编辑和使用何种工具编辑没有特别要求,因此若优先选择某种集成开发环境,而非命令行,那么使用喜好的 IDE 即可。许多 IDE 都有某种程度的 Rust 支持;请查看 IDE 文档了解有关细节信息。近来Rust 团队已着手启动良好的IDE支持且此方面已取得极大进展
> **注意**本书假定读者基本熟悉命令行。Rust 对编辑、工具或代码的存放位置没有特别的要求因此如果咱们喜欢使用集成开发环境IDE而不是命令行请随意使用咱们喜欢的集成开发环境。许多集成开发环境现在都在一定程度上有着 Rust 的支持详情请查看集成开发环境的文档。Rust 团队一直致力于通过 `rust-analyzer`,实现对集成开发环境的强大支持。详情请参见 [附录 D](../appendix/dev_tools.md)。
## 创建一个项目目录
## 创建项目的目录
**Creating a Project Directory**
首先,咱们将创建一个存储咱们 Rust 代码的目录。对于 Rust 来说,代码存放在哪里并不重要,但对于本书中的练习和项目,我们建议在咱们的主目录下,创建一个 `projects` 目录,并将咱们的所有项目,都放在那里。
这里是以构造一个保存 Rust 代码的目录开始的。对于 Rust 来说,代码位居何处并不重要,不过对于本书中的练习与项目,是建议在主目录下构造一个 `projects` 目录,并把全部项目放在那里的。
请打开一个终端,并输入下面的这些命令来构造一个 `projects` 的目录,和一个在 `projects` 下用于 "Hello, World!" 项目的目录。
请打开某个终端,并输入以下命令,创建 `projects` 目录,并在 `projects` 目录下,创建出这个 "Hello, world!" 的项目目录。
对于 Linux、macOS 和 Windows 上的 `PowerShell`, 请输入:
```console
$ mkdir ~/rust-lang/projects
$ cd ~/rust-lang/projects
$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
```
@ -22,17 +28,18 @@ $ cd hello_world
而对于 Windows 的 CMD 请输入:
```console
> mkdir "%USERPROFILE%\rust-lang\projects"
> cd /d "%USERPROFILE%\rust-lang\projects"
> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world
```
## 编写及运行 Rust 程序
## 编写并运行一个 Rust 程序
接下来,就要构造一个源代码文件,并命名为 `main.rs`。Rust 文件总是以 `.rs` 扩展名结束。若要在文件名中是一多个单词,那么请使用下划线来将这些单词隔开。比如,请使用 `hello_world.rs` 而不是 `helloworld.rs`
现在就要打开这个刚创建出的 `main.rs` 文件,并敲入清单 1-1 中的代码。
接下来,请创建一个新的源文件,并将其命名为 `main.rs`。Rust 文件总是以 `.rs` 扩展名结尾。如果咱们在文件名中,使用了多个单词,惯例是要使用下划线,分隔这些单词。例如,请使用 `hello_world.rs`,而不是 `helloworld.rs`
现在请打开咱们刚刚创建的 `main.rs` 文件,输入下面清单 1-1 中的代码。
文件名:`main.rs`
@ -42,9 +49,9 @@ fn main() {
}
```
*清单 1-1打印`Hello, World!` 的程序*
*清单 1-1打印`Hello, World!` 的一个程序*
保存这个文件并回到终端窗口。在 Linux 或 macOS 上,请输入下面的命令来编译和运行这个文件:
请保存该文件,并返回到 `~/projects/hello_world` 目录下,咱们的终端窗口。在 Linux 或 macOS 上,请输入以下命令,编译并运行该文件:
```console
$ rustc main.rs
@ -52,7 +59,7 @@ $ ./main
Hello, World!
```
在 Windows 上,就要输入命令 `.\main.exe` 而不是 `./main`
在 Windows 上,输入命令 `.\main.exe` 而不是 `./main`
```console
> rustc main.rs
@ -60,7 +67,18 @@ Hello, World!
Hello, World!
```
而不论所在操作系统为何,字符串 `Hello, World!` 都应打印到终端。而若没有看到这个输出,那么请回到安装小节的 [“问题排除”](#问题排除) 部分获取帮助。
> **注意**:在 Windows 上使用 ZSH 的 MSYS2 环境下,上述命令的输出:
```console
➜ hello_word rustc main.rs
➜ hello_word ls
main.exe main.pdb main.rs
➜ hello_word ./main.exe
Hello, World!
```
不论咱们的操作系统如何,`Hello, world!` 这个字符串都应打印到终端。如果咱们看不到此输出,请参阅安装部分的 [故障排除]() 部分,了解获得帮助的方法。
如确实打印出了 `Hello, World!`,那么恭喜你!你已正式编写除了一个 Rust 程序了。那就让你成为了一名 Rust 程序员了 -- 欢迎!
@ -135,4 +153,4 @@ $ ./main # 或在 Windows 上的 .\main.exe
若你对某门动态语言,诸如 Ruby、Python 或者 JavaScript 更为熟悉那么可能就不习惯于将编译和运行某个程序作为分开的步骤。Rust 是门 *提前编译* 语言an *ahead-of-time compiled* language这意味着可对程序进行编译而将可执行文件交给他人他们可在未安装 Rust 的情况下运行编译好的可执行文件。而若将某个 `.rb`、`.py`,或者 `.js` 文件交给某人时,他们就需要安装好相应的 Ruby、Python 或 JavaScript 实现。不过在这些语言中,仅需一个命令来编译和运行他们的程序。在编程语言设计中,每件事都有所取舍。
对于简单的程序来说,用 `rustc` 编译就足够了,但随着项目的成长,就希望对所有选项进行管理,并令到代码分享更为简便。接下来,就要介绍 Cargo 工具了,这工具将帮助我们编写出实用的 Rust 程序。
对于简单的程序来说,用 `rustc` 编译就足够了,但随着项目的成长,就希望对所有选项进行管理,并令到代码分享更为简便。接下来,就要介绍 Cargo 工具了,这工具将帮助我们编写出实用的 Rust 程序。

View File

@ -1,64 +1,70 @@
# 安装
第一步即是安装 Rust。这里将通过 `rustup` 这个用于管理 Rust 版本及相关工具的命令行工具,来下载 Rust。要下载 Rust需要互联网连接。
第一步是安装 Rust。我们将通过一个管理 Rust 版本与相关工具的命令行工具 `rustup`,下载 Rust。下载时咱们将需要互联网连接。
> 注意:若由于某些原因而不愿使用 `rustup`,那么请参考 [其他 Rust 安装方式页面](https://forge.rust-lang.org/infra/other-installation-methods.html) 了解更多选项。
接下来就是要按照最新的稳定版 Rust 编译器。Rust 的稳定性保证了本书中所有示例都将在较新的 Rust 版本下可持续编译。由于 Rust 经常会改进错误消息和告警,因此在不同版本之间,输出可能会略有不同。也就是说,任何使用以下步骤所安装的较新、稳定版 Rust都将如本书内容中所期望的那样工作
以下步骤将安装最新稳定版本的 Rust 编译器。Rust 的稳定性,保证了本书中所有编译成功的示例,都能继续在较新的 Rust 版本中编译。不同版本的输出,可能略有不同,因为 Rust 经常会改进错误信息和告警。换句话说,使用这些步骤安装的任何较新的、稳定的 Rust 版本,都应能与本书内容所预期的一样运行
> 关于**命令行注释**
> 在本章及全书中,都会给出一些在终端中用到的命令。他们是一些应在以 `$` 开始的终端中输入的行。至于这个 `$` 字符,是无需输入的;这个字符表示每条命令的开头。那些不以 `$` 开头的行,通常给出的是上一命令的输出。此外,那些特定于 `PowerShell` 的示例中,将使用 `>` 而不是 `$`
> 关于 **命令行注解**
>
> 在本章和全书中,我们将介绍一些在终端中使用的命令。咱们要敲入到某个终端中的那些行,都以 `$` 开头。咱们无需键入那个 `$`;他属于命令行提示符,用于表示每条命令的开始。不以 `$` 开头的行,通常会显示前一条命令的输出。此外,特定于 `PowerShell` 的示例,会使用 `>` 而不是 `$`
## 在 Linux 与 macOS 上安装 `rustup`
若使用的是 Linux 或 macOS那么请打开一个终端然后输入下面的命令
如果咱们使用的是 Linux 或 macOS请打开终端并输入以下命令
```console
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
```
此命令会下载一个脚本并开始 `rustup` 工具的安装,而 `rustup` 将安装最新的稳定版 Rust。可能会提示输入 `sudo` 密码。在安装成功后,就会出现下面这行!
这条命令会下载一个脚本,并启动 `rustup` 这个工具的安装,而 `rustup` 就会安装最新的 Rust 稳定版本。可能会提示输入密码。如果安装成功,会出现下面一行:
```console
Rust is isntalled now. Great!
```
这里还将需要一个连接器linker这是个Rust要用来将其编译好的输出组合起来形成一个文件的程序。似乎你的电脑上以及有了一个这样的连接器了。若收到连接器错误信息那么就应安装一个 C 语言编译器C 编译器通常会包含着连接器的。由于一些常用 Rust 包对 C 代码有依赖且需要 C 编译器,因此 C 编译器也是有用的。
咱们还需要一个 Rust 用于将其编译输出,连接为一个文件的 *链接器linker*a program that Rust uses to join its compiled outputs into one file。咱们很可能已经有了这个链接器。如果出现链接器错误那么咱们就应安装一个通常包含了某个链接器的 C 编译器。C 编译器也很有用,因为一些常见的 Rust 软件包,均依赖于 C 代码,而因此需要 C 编译器。
在 macOS 上,咱们可以通过运行:
在 macOS 上,可通过运行下面的命令,获取到一个 C 编译器:
```console
$ xcode-select --install
```
Linux 用户一般都会安装 GCC 或 Clang至于具体哪种 C 编译器,则是依据他们所用 Linux 分发版本的文档可以确定。比如若使用的是 Ubuntu那么就可以安装 `build-essential` 软件包。
获得一个 C 编译器。
Linux 用户一般应根据其发行版的文档,安装 GCC 或 Clang。例如如果咱们使用 Ubuntu则可以安装 `build-essential` 软件包。
## 在 Windows 上安装 `rustup`
在 Windows 上,请前往 [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install) 页面,并按照安装 Rust 的指令进行安装。在安装过程的某个时刻,将收到为何需要 Visual Studio 2013 或更新版本的 C++ 构建工具的说明。而最简单的获取到构建工具的方法,则是安装 [Visual Studio 2019 构建工具](https://visualstudio.microsoft.com/visual-cpp-build-tools/)。在询问将要安装何种工作负载workloads请确保 `C++ build tolls` 被选中,还要确保包含 Windows 10 SDK 及英语语言包。
本书接下来用到的命令,在 `cmd.exe``PowerShell` 中都可工作。若其中有特定区别,本书将会解释要用哪个。
在 Windows 上,请前往 https://www.rust-lang.org/tools/install 并按照说明安装 Rust。在安装过程中的某个时刻咱们会收到一条信息说明咱们还需要 Visual Studio 2013或更高版本的 MSVC 构建工具。
而要获得构建工具,咱们需要安装 Visual Studio 2022。当被问及要安装哪些工作负载时要包括下面这些
## 更新与卸载
- “使用 C++ 进行桌面开发”
在通过 `rustup` 安装了 Rust 后,更新到最新版本就容易了。在 `shell` 中运行下面的更新脚本:
- Windows 10 或 11 SDK
```console
$ rustup update
```
- 英语语言包组件,以及咱们所选的任何其他语言包
而要卸载 Rust 和 `rustup`,只需在 `shell` 中运行下面的卸载脚本:
```java
$ rustup self uninstall
```
本书的其余部分使用了,可同时在 *cmd.exe* 和 PowerShell 中运行的命令。如果存在某些具体差异,我们将解释要使用哪个。
## 问题排除
要检查当前是否安装了 Rust, 请开启一个 `shell` 并敲入这行命令:
要检查 Rust 安装是否正确,请打开 shell 并输入这一行:
```console
$ rustc --version
@ -70,11 +76,54 @@ $ rustc --version
rustc x.y.z (abcabcadc yyyy-mm-dd)
```
若看到这个信息,那么就已成功安装了 Rust若看不到这个信息且是在 Windows 上,那么就请在 `%PATH%` 系统变量中检查一下 Rust 在不在里面。若那一点问题都没有而 Rust 仍就不工作,那么可在数个地方需求帮助。其中最便利的就是 [Rust 官方 Discord](https://discord.gg/rust-lang) 上的 `#beginners` 频道了。在那里可与其他 Rust 公民(一种无厘头的自我称呼)聊天,他们可以帮助到你。其他不错的资源包括 [用户论坛](https://users.rust-lang.org/) 和 [Stack Overflow](https://stackoverflow.com/questions/tagged/rust)。
> 在 Windows 上的 MSYS2 环境下的输出为:
```console
~ rustc --version
rustc 1.74.0 (79e9716c9 2023-11-13)
```
如果看到此信息,说明咱们已成功安装 Rust如果没有看到此信息请检查 Rust 是否在咱们的 `%PATH%` 系统变量中,如下所示。
在 Windows 的 CMD 中,请使用:
```cmd
> echo %PATH%
```
在 PowerShell 中,请使用:
```powershell
> echo $env:Path
```
在 Linux 及 macOS 中,请使用:
```console
$echo $PATH
```
如果这些都正确无误,而 Rust 仍无法正常工作,那么有很多咱们可以寻求帮助的地方。请访问 [社区页面](https://www.rust-lang.org/community),了解如何与其他 Rustaceans我们给自己起的昵称取得联系。
## 更新与卸载
通过 `rustup` 安装 Rust 后,更新到新近发布的版本,就很容易了。请在 shell 中运行以下更新脚本:
```console
$ rustup update
```
要卸载 Rust 和 `rustup`,请在 shell 中运行以下卸载脚本:
```console
$ rustup self uninstall
```
## 本地文档
Rust 的安装,也包含了一份本地文档,因此可离线阅读到这本地文档。运行 `rustup doc` 即可在浏览器中打开这本地文档。
Rust 的安装,还包含了一份本地文档,以便咱们离线阅读。请运行 `rustup doc`,在咱们的浏览器中打开本地文档。
在任何时候遇到标准库所提供的类型或函数,而又确定他做些什么或该怎样使用这类型或函数时,就可以使用 API 文档来搞明白他是怎么回事!
如果咱们不确定某个标准库提供的类型或函数的作用或使用方法请使用应用程序编程接口API文档来搞清楚