mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-27 13:21:09 +08:00
Refining Ch01.
This commit is contained in:
parent
cbdf192b38
commit
b5611aed65
@ -3,5 +3,7 @@
|
|||||||
现在就开始 Rust 之旅!有很多要掌握的东西,不过千里之行,始于足下。本章将讨论:
|
现在就开始 Rust 之旅!有很多要掌握的东西,不过千里之行,始于足下。本章将讨论:
|
||||||
|
|
||||||
- 在 Linux、macOS 及 Windows 上安装 Rust;
|
- 在 Linux、macOS 及 Windows 上安装 Rust;
|
||||||
- 编写一个打印出 `Hello, world!` 的程序来;
|
|
||||||
- Rust 的包管理器和构建系统 Cargo 的使用。
|
- 编写一个打印出 `Hello, world!` 的程序;
|
||||||
|
|
||||||
|
- 使用 Rust 的包管理器与构建系统 Cargo 。
|
||||||
|
@ -1,20 +1,26 @@
|
|||||||
# `Hello, World!`
|
# `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` 目录,并把全部项目放在那里的。
|
这里是以构造一个保存 Rust 代码的目录开始的。对于 Rust 来说,代码位居何处并不重要,不过对于本书中的练习与项目,是建议在主目录下构造一个 `projects` 目录,并把全部项目放在那里的。
|
||||||
|
|
||||||
请打开一个终端,并输入下面的这些命令来构造一个 `projects` 的目录,和一个在 `projects` 下用于 "Hello, World!" 项目的目录。
|
请打开某个终端,并输入以下命令,创建 `projects` 目录,并在 `projects` 目录下,创建出这个 "Hello, world!" 的项目目录。
|
||||||
|
|
||||||
对于 Linux、macOS 和 Windows 上的 `PowerShell`, 请输入:
|
对于 Linux、macOS 和 Windows 上的 `PowerShell`, 请输入:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ mkdir ~/rust-lang/projects
|
$ mkdir ~/projects
|
||||||
$ cd ~/rust-lang/projects
|
$ cd ~/projects
|
||||||
$ mkdir hello_world
|
$ mkdir hello_world
|
||||||
$ cd hello_world
|
$ cd hello_world
|
||||||
```
|
```
|
||||||
@ -22,17 +28,18 @@ $ cd hello_world
|
|||||||
而对于 Windows 的 CMD, 请输入:
|
而对于 Windows 的 CMD, 请输入:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
> mkdir "%USERPROFILE%\rust-lang\projects"
|
> mkdir "%USERPROFILE%\projects"
|
||||||
> cd /d "%USERPROFILE%\rust-lang\projects"
|
> cd /d "%USERPROFILE%\projects"
|
||||||
> mkdir hello_world
|
> mkdir hello_world
|
||||||
> cd 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`
|
文件名:`main.rs`
|
||||||
|
|
||||||
@ -42,9 +49,9 @@ fn main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
*清单 1-1:打印`Hello, World!` 的程序*
|
*清单 1-1:打印出`Hello, World!` 的一个程序*
|
||||||
|
|
||||||
保存这个文件并回到终端窗口。在 Linux 或 macOS 上,请输入下面的命令来编译和运行这个文件:
|
请保存该文件,并返回到 `~/projects/hello_world` 目录下,咱们的终端窗口。在 Linux 或 macOS 上,请输入以下命令,编译并运行该文件:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ rustc main.rs
|
$ rustc main.rs
|
||||||
@ -52,7 +59,7 @@ $ ./main
|
|||||||
Hello, World!
|
Hello, World!
|
||||||
```
|
```
|
||||||
|
|
||||||
在 Windows 上,就要输入命令 `.\main.exe` 而不是 `./main`:
|
在 Windows 上,请输入命令 `.\main.exe` 而不是 `./main`:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
> rustc main.rs
|
> rustc main.rs
|
||||||
@ -60,7 +67,18 @@ Hello, World!
|
|||||||
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 程序员了 -- 欢迎!
|
如确实打印出了 `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 实现。不过在这些语言中,仅需一个命令来编译和运行他们的程序。在编程语言设计中,每件事都有所取舍。
|
若你对某门动态语言,诸如 Ruby、Python 或者 JavaScript 更为熟悉,那么可能就不习惯于将编译和运行某个程序作为分开的步骤。Rust 是门 *提前编译* 语言(an *ahead-of-time compiled* language),这意味着可对程序进行编译,而将可执行文件交给他人,他们可在未安装 Rust 的情况下运行编译好的可执行文件。而若将某个 `.rb`、`.py`,或者 `.js` 文件交给某人时,他们就需要安装好相应的 Ruby、Python 或 JavaScript 实现。不过在这些语言中,仅需一个命令来编译和运行他们的程序。在编程语言设计中,每件事都有所取舍。
|
||||||
|
|
||||||
对于简单的程序来说,用 `rustc` 编译就足够了,但随着项目的成长,就希望对所有选项进行管理,并令到代码分享更为简便。接下来,就要介绍 Cargo 工具了,这工具将帮助我们编写出实用的 Rust 程序。
|
对于简单的程序来说,用 `rustc` 编译就足够了,但随着项目的成长,就希望对所有选项进行管理,并令到代码分享更为简便。接下来,就要介绍 Cargo 工具了,这工具将帮助我们编写出实用的 Rust 程序。
|
||||||
|
@ -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) 了解更多选项。
|
> 注意:若由于某些原因而不愿使用 `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 上安装 `rustup`
|
||||||
|
|
||||||
若使用的是 Linux 或 macOS,那么请打开一个终端,然后输入下面的命令:
|
|
||||||
|
如果咱们使用的是 Linux 或 macOS,请打开终端并输入以下命令:
|
||||||
|
|
||||||
|
|
||||||
```console
|
```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
|
```console
|
||||||
Rust is isntalled now. Great!
|
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
|
```console
|
||||||
$ xcode-select --install
|
$ xcode-select --install
|
||||||
```
|
```
|
||||||
|
|
||||||
Linux 用户一般都会安装 GCC 或 Clang,至于具体哪种 C 编译器,则是依据他们所用 Linux 分发版本的文档可以确定。比如若使用的是 Ubuntu,那么就可以安装 `build-essential` 软件包。
|
获得一个 C 编译器。
|
||||||
|
|
||||||
|
Linux 用户一般应根据其发行版的文档,安装 GCC 或 Clang。例如,如果咱们使用 Ubuntu,则可以安装 `build-essential` 软件包。
|
||||||
|
|
||||||
|
|
||||||
## 在 Windows 上安装 `rustup`
|
## 在 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
|
本书的其余部分使用了,可同时在 *cmd.exe* 和 PowerShell 中运行的命令。如果存在某些具体差异,我们将解释要使用哪个。
|
||||||
$ rustup self uninstall
|
|
||||||
```
|
|
||||||
|
|
||||||
## 问题排除
|
## 问题排除
|
||||||
|
|
||||||
要检查当前是否安装了 Rust, 请开启一个 `shell` 并敲入这行命令:
|
要检查 Rust 安装是否正确,请打开 shell 并输入这一行:
|
||||||
|
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ rustc --version
|
$ rustc --version
|
||||||
@ -70,11 +76,54 @@ $ rustc --version
|
|||||||
rustc x.y.z (abcabcadc yyyy-mm-dd)
|
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)文档来搞清楚!
|
||||||
|
Loading…
Reference in New Issue
Block a user