既然你已经安装了Rust,我们开始写第一个Rust程序吧。在任何一种新语言中的第一个程序是在屏幕上输出“Hello,world!”是一个传统。以这样一个简单的程序开始的好处是,它不仅可以检验你已经安装了编译器,而且还能验证它是否正常工作。并且往屏幕上输出东西是一个很平常的事情。
第一件要做的事情是创建一个保存我们的代码的文件。我喜欢在我的home目录中创建一个projects目录,把我所有的工程都放在这个目录中。Rust并不关心你的代码放在哪。
这里我们有必要说明一点:我们假设你基本熟悉命令行的基本操作。Rust对编辑器没有特殊的要求,也不关系你的代码保存在何处。如果你选择一个IDE(集成开发环境)而不是命令行,可能需要查看SolidOak,或者你喜欢的IDE的插件所在之处。社区正在开发这些扩展。Rust团队也正在定制plugins
for various editors。配置你的编辑器或IDE并不是本文章的重点,所以请查阅文档,此处不做过多介绍。
首先,在我们的projects目录下创建一个目录
$ mkdir ~/projects $ cd ~/projects $ mkdir hello_world $ cd hello_world
如果你使用的是Windows并且没有使用PowerShell,~可能不对。请查阅你使用shell的文档。
下面,我们创建一个新的源文件。将文件命名为main.rs。Rust文件总是以.rs为扩展名。如果你使用多于一个单词作为文件名,所以用一个下划线:hello_world.rs而不是helloworld.rs。
现在,打开文件,并输入下面的代码:
fn main() { println!("Hello, world!"); }
保存文件,并在你的终端中输入:
$ rustc main.rs
$ ./main # or main.exe on Windows
Hello, world!
成功!让我们回顾一下细节。
fn main() {
}
上面这几行定义了一个Rust函数。main函数是特殊的函数:它是每个Rust程序的开始。第一行的意思是“我定义了一个名字为main的函数,该函数没有参数也没有返回值。”如果有参数,它们将会在括号()内,并且因为我们在这个函数中不返回任何东西,我们可以省略返回类型。稍后我们会讲解。
你会注意到函数被大括号{}包围。Rust的函数体需要用其包围。在函数的定义处的后面紧跟一个大括号被认为是好的编程风格,函数定义与大括号之间用一个空格隔开。
下面一行是:
println!("Hello, world!");
这一行是我们程序所做的所有工作。在这里有许多要注意的细节。第一个需要注意的是是以4个空格开头,并不是tab键。请配置你的编辑器,使用tab键的时候插入4个空格。对多种编辑器我们提供了简单的配置。
第一个要点是println!()部分。这被称作Rust宏,这是Rust元编程所作的。如果这是一个函数,看起来会是这样子的:println()。对我们的目的而言,我们不需要关心此处的不同。仅仅需要知道的是,有些时候你看到一个!,它意味着你正在调用一个宏而不是一个函数。Rust将println!实现为一个宏而不是一个函数是有许多原因的,但是这是一个高级话题。最后一件需要注意的事情:Rust的宏与C语言的宏是千差万别的。不要害怕使用宏。我们最终将会深入其细节,现在你需要做的仅仅是相信我们就可以啦。
“Hello, world!”是一个‘string’。字符串是系统编程语言中一个相当复杂的话题,并且这是一个‘静态分配’的字符串。如果你想进一步了解分配,请阅读堆和栈,如果你不想也不用立即去阅读。我们将这个字符串作为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,其它平台上是main)
$ ./main # or main.exe on Windows
终端会输出Hello, world!
如果你使用过动态语言如Ruby、Python或JavaScript,你可能不习惯将这两步分开。Rust是一个提前编译语言(ahead-of-time compiled language),这意味着你可以将编译过的可执行程序发送给任何人,他们不需要安装rust。如果你给某人.rb、.py或者.js文件,他们需要安装Ruby、Python或JavaScript运行环境,但是你只需一个命令即可编译、运行你的程序。在语言设计中,一切都要做出取舍折衷,Rust已经做出了它的选择。
恭喜!你已经正式编写了一个Rust程序。现在你已经是一名Rust程序员了!
接下来,我会介绍另一个工具Cargo,这是一个用于编写真实世界Rust程序的工具。小程序使用rustc还不错,但随着项目增长,就可能需要某种工具帮助管理所有选项,更方便与其他人和项目分享代码。