世界您好!


现在您已经安装了 Rust,是时候编写您的第一个 Rust 程序了。传统上,在学习一门新语言时,会编写一个小程序,将文本 Hello, world!打印到屏幕上,因此我们在这里也会这样做!


注意:本书假定您对命令行有基本的了解。Rust 对您的编辑或工具或代码所在的位置没有特定要求,因此如果您更喜欢使用集成开发环境 (IDE) 而不是命令行,请随意使用您最喜欢的 IDE。许多 IDE 现在都有一定程度的 Rust 支持;有关详细信息,请查看 IDE 的文档。Rust 团队一直专注于通过 rust-analyzer 实现出色的 IDE 支持。看 附录 D 了解更多详情。


创建项目目录


首先,您将创建一个目录来存储 Rust 代码。你的代码在哪里对 Rust 来说并不重要,但对于本书中的练习和项目,我们建议在你的主目录中创建一个 projects 目录,并将所有项目都保留在那里。


打开终端并输入以下命令,在 projects 目录中为 “Hello, world!” 项目创建一个 projects 目录和一个目录。


对于 Linux、macOS 和 Windows 上的 PowerShell,请输入以下内容:

$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world


对于 Windows CMD,请输入以下内容:

> mkdir "%USERPROFILE%\projects"
> cd /d "%USERPROFILE%\projects"
> mkdir hello_world
> cd hello_world


编写和运行 Rust 程序


接下来,创建一个新的源文件并将其命名为 main.rs。Rust 文件总是以 .rs 扩展名结尾。如果您在文件名中使用了多个单词,则 惯例是使用下划线分隔它们。例如,使用 hello_world.rs 而不是 helloworld.rs


现在打开你刚刚创建的 main.rs 文件,并输入示例 1-1 中的代码。


文件名: main.rs
fn main() {
    println!("Hello, world!");
}

示例 1-1:一个打印 Hello, world!


保存文件并返回到 ~/projects/hello_world 目录中。在 Linux 或 macOS 上,输入以下命令编译并运行文件:

$ rustc main.rs
$ ./main
Hello, world!


在 Windows 上,输入命令 .\main.exe 而不是 ./main

> rustc main.rs
> .\main.exe
Hello, world!


无论您的作系统如何,字符串 Hello, world! 都应该打印到 终端。如果您没有看到此输出,请返回参阅 “Troubleshooting” 部分的 “Troubleshooting” 部分,了解获取帮助的方法。


如果 Hello, world!打印出来了,恭喜!您已经正式编写了一个 Rust 程序。这使您成为 Rust 程序员 — 欢迎!


Rust 程序剖析


让我们详细回顾一下这个 “Hello, world!” 程序。这是拼图的第一块:


fn main() { }


这些行定义一个名为 main 的函数。main 函数很特殊:它始终是每个可执行 Rust 程序中运行的第一个代码。在这里,第一行声明了一个名为 main 的函数,该函数没有参数,也不返回任何内容。如果有参数,它们将放在括号 () 内。


函数体包装在 {} 中。Rust 要求所有函数体周围都有大括号。将左大括号与函数声明放在同一行上是一种很好的样式,并在两者之间添加一个空格。


注意:如果你想在 Rust 项目中坚持使用标准样式,你可以使用一个名为 rustfmt 的自动格式化工具将代码格式化为特定样式(更多关于 rustfmt 的信息,请参阅 附录 D)。Rust 团队已将此工具包含在标准 Rust 发行版中,就像 rustc 一样,因此它应该已经安装在您的计算机上!


main 函数的主体包含以下代码:

#![allow(unused)]
fn main() {
    println!("Hello, world!");
}


这条线完成了这个小程序中的所有工作:它将文本打印到屏幕上。这里有四个重要的细节需要注意。


首先,Rust 风格是用四个空格缩进,而不是一个制表符。


其次,println! 调用 Rust 宏。如果它调用了一个函数,则将其输入为 println(不带 )。我们将在第 19 章更详细地讨论 Rust 宏。现在,你只需要知道使用 表示您调用的是宏而不是普通函数,并且 不要总是遵循与 Functions 相同的规则。


第三,您会看到 “Hello, world!” 字符串。我们将此字符串作为参数传递给 println!,然后将该字符串打印到屏幕上。


第四,我们用分号 (;) 结束这一行,这表示这个表达式已经结束,下一个表达式已经准备好开始。大多数 Rust 代码行都以分号结尾。


编译和运行是单独的步骤


您刚刚运行了一个新创建的程序,因此让我们检查一下该过程中的每个步骤。


在运行 Rust 程序之前,您必须使用 Rust 编译器编译它,方法是输入 rustc 命令并向其传递源文件的名称,如下所示:

$ rustc main.rs


如果你有 C 或 C++ 背景,你会注意到这类似于 gcc叮当声。编译成功后,Rust 会输出一个二进制可执行文件。


在 Linux、macOS 和 Windows 上的 PowerShell 上,您可以通过在 shell 中输入 ls 命令来查看可执行文件:


$ ls 主要 main.rs


在 Linux 和 macOS 上,您将看到两个文件。在 Windows 上使用 PowerShell,您将看到与使用 CMD 时相同的三个文件。在 Windows 上使用 CMD 时,您可以输入以下内容:

> dir /B %= the /B option says to only show the file names =%
main.exe
main.pdb
main.rs


这将显示扩展名为 .rs 的源代码文件、可执行文件(在 Windows 上为 main.exe,但在所有其他平台上为 main),以及在使用 Windows 时,包含扩展名为 .pdb 的调试信息的文件。从这里,您运行 mainmain.exe 文件,如下所示:

$ ./main # or .\main.exe on Windows


如果您的 main.rs 是 “Hello, world!”程序,则此行将 Hello, world!打印到您的终端。


如果您更熟悉动态语言(如 Ruby、Python 或 JavaScript),则可能不习惯将程序编译和运行作为单独的步骤。Rust 是一种预先编译的语言,这意味着您可以编译一个程序并将可执行文件提供给其他人,即使没有安装 Rust,他们也可以运行它。如果您为某人提供 .rb.py.js文件中,它们需要分别安装 Ruby、Python 或 JavaScript 实现。但是在这些语言中,您只需要一个命令来编译和运行您的程序。一切都是语言设计的权衡。


对于简单的程序来说,只用 rustc 编译就很好,但随着项目的发展,你会需要管理所有选项并让共享代码变得容易。接下来,我们将向你介绍 Cargo 工具,它将帮助您编写实际的 Rust 程序。