Hello, world!
现在,你已经安装好了 Rust,让我们开始写第一个 Rust 程序。任何新的语言,按照惯例,让你写的第一个程序就是打印文本“Hello,world!“到屏幕上。从这样一个简单的程序开始的好处是,你可以验证你的编译器不只是安装好了,而且其工作也是正常的。打印信息到屏幕上是一个很常见的事情。
首先,我们需要做的就是创建一个能让我们写入代码的文件。我喜欢在我的主目录里创建一个 projects 目录,并把我所有的项目放在这里。Rust 是不在乎你的代码放在哪里的。
这实际上会导致另一个我们应该提到的问题:本教程假设你对命令行基本熟悉。Rust 本身对你的编辑工具或者代码所在的位置并没有特别要求。如果你更喜欢 IDE 而不是命令行,你可以试试 SolidOak,或者你最喜欢的 IDE 的其他插件。社区中有很多不同质量的扩展开发的组件。Rust 团队还为各种编辑器编写插件。配置编辑器或 IDE 超出了本教程的范围,所以如果需要,请查看你的安装的文档。
按照以上所说,让我们在项目目录中创建一个目录。
$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
如果你使用的是 Windows,而不是使用 PowerShell, ~ 可能起作用。详细内容,请参阅您的 shell 文档。
让我们创建一个新的源文件。我们将新文件命名为 main.rs。Rust 文件总是以 .rs 扩展名结束。如果你的文件名使用超过了一个单词,使用下划线分开:是 hello_world.rs,而不是 helloworld.rs.
现在,打开你的文件,输入以下内容:
fnmain() {
println!("Hello, world!");
}
保存文件,然后在终端窗口输入:
$ rustc main.rs
$ ./main # or main.exe on Windows
Hello, world!
成功啦!让我们详细看一遍刚刚发生了什么事。
fnmain() {
}
在 Rust 中,这些行定义了一个函数。这个 main 函数是特殊的:它是每个 Rust 程序的开始。第一行表示说,“我声明了一个函数,名叫 main。它不需要任何参数,也不返回任何数据。” 如果有参数,他们会在括号((和))中,因为从这个函数中,我们不返回任何东西,所以我们可以完全省略返回类型。以后我们添加上。
你还会注意到,函数是用花括号括起来的({和 })。Rust 需要这些花括号包裹起函数体。把左花括号和函数声明放在在同一行,并用空格隔开,被认为是一种良好的编程风格。
接下来是这一行:
println!("Hello, world!");
在我们的小程序中,这一行做了所有的工作。有很多细节是非常重要的。首先,它有四个空格的缩进,没有标签。请配置你的编辑器,选择 tab 键插入四个空格。我们提供了一些各种编辑器的示例配置.
第二点是 println!() 部分。这里调用了一个 Rust 宏。宏是元程序编程在 Rust 中的实现。如果这里它是一个函数,它应该是这样的: println()。对于我们来说,我们不需要担心这其中的差异。我们仅仅只需知道,有时候,你会看到一个 !,这意味着你调用了宏而不是一般的函数。Rust 作为一个宏实现 println! ,而不是一个函数,其有很好的理由,但这是一个高级话题了。最后需要说明的一件事:如果你使用过宏,Rust 的宏是明显不同于 C 的宏。不要害怕使用宏。我们最终会了解到宏的细节,现在你必须相信我们。
接下来, "Hello, world!"是一个‘字符串’。在系统编程语言里,字符串是一个令人惊奇的复杂主题。这里是一个‘静态分配’的字符串。如果你想进一步了解分配,请查看“栈和堆”章节,但如果你不想了解的话,其实现在也并不需要了解。我们将这个字符串作为参数传递给 println!,将字符串打印到屏幕上。很容易!
最后,这一行以分号(;)结束。Rust 是一种面向表达式的语言,这意味着大多数代码是表达式,而不是语句。这个;用于表明这个表达式的结束,并准备开始下一个。大多数 Rust 代码行以 ;
结尾。
最终,编译和运行我们的程序。我们可以用我们的编译器编译,通过向命令 rustc 后面传递我们的源文件的名称:
$ rustc main.rs
如果你有 C 或 C++ 的背景,那么这就类似于 gcc 或者 clang。Rust 将输出一个二进制可执行文件。你可以用命令 ls 来查看它:
$ ls
main main.rs
或者在 Windows 平台上:
$ dir
main.exe main.rs
现在有两个文件:我们带有扩展名 .rs 的源代码文件和可执行文件(在Windows上,main.exe ,其他地方, mian)。
$ ./main # or main.exe on Windows
这将在我们的终端打印出 Hello,world!.
如果你有动态语言像 Ruby,Python,或者 JavaScript 的背景,你可能不习惯这两个步骤是分开的。Rust 是一个预编译语言,这意味着你可以编译一个程序,把它给别人,他们并不需要安装了 Rust。如果你给别人 .rb
、
.py
或者 .js
文件,他们需要有一个 Ruby/Python/JavaScript
的实现安装,但是你只需要一个命令来编译和运行你的程序。一切都是语言设计的权衡,Rust 已做出了自己的选择。
恭喜你!你已经正式书写了一个 Rust 程序。这让你成为了一个 Rust 程序员!欢迎你!
接下来,我想介绍你认识另一个工具,Cargo。它用于编写真实的 Rust 程序。对于简单的代码,只是用 rustc 就很好了,但随着项目的增长,你会想拥有帮助你管理的所有选项的工具,并使它能容易与他人分享你的代码和项目。