Home

Rust 2.2 Hello, world!

10 Jan 2015 by LelouchHe

原文链接

现在你已经安装了Rust,我们来写第一个Rust程序.按传统来说,第一个程序应该在屏幕上输出”Hello, world!”.编写这个简单程序,可以确定你的编译器不仅成功安装了,而且可以正常运行.而且,向屏幕打印些东西是一件非常通用的事情.

第一件事是新建代码文件.我喜欢在home下建一个”projects”目录,把所有的项目都放里面.Rust并不关心代码的位置.

实际上,有一点我们要强调下:这个教程假设你熟悉基本的命令行操作.Rust不需要你熟记所有的命令,但目前Rust还没有最终定稿,所以IDE的支持很烂(译者: 所以你还得使用命令行来操作Rust).Rust并不关心你的编辑命令,或者代码文件位置.

让我们先新建目录:

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

如果你使用Windows,而且不使用PowerShell,”~”符号可能无法使用.可以查询下对应的文档看看有没有类似的.

接下来,我们新建一个代码文件.我将使用editor filename来表示编辑文件的命令,但你可以使用任何合适的编辑命令.我们的文件名叫”main.rs”:

$ editor main.rs

Rust文件一般以”.rs”结尾.如果你的文件名包含了多于一个的单词,用”_“分隔,也就是”hello_world.rs”,而不是”helloworld.rs”

现在,打开文件,输入:

fn main() {
    println!("Hello, world!");
}

保存文件,输入以下命令:

$ rustc main.rs
$ ./main # 或者 main.exe (Windows平台)
Hello, world!

你可以在[play.rust-lang.org][play]上,点击代码右上的箭头(译者: 其实应该是”evaluate”按钮)来运行这些代码.

成功!让我们看看到底发生了什么.

fn main() {

}

这个定义了Rust中的function.main函数是特殊的,它是Rust的入口函数.第一行表示: 我定义了一个main函数,没有参数,也没有返回值.如果有参数的话,要放到小括号(“(“, “)”)里,而且因为我们不需要返回值,所以返回值这部分我们就忽略掉了.稍后我们会再讨论这个.

你也注意到,函数体被大括号(“{“, “}”)包裹,这个对Rust的函数体是必须的.另,把左括号(“{“)放到函数定义的同一行,并且和函数定义用空格隔开,是一种良好的代码风格,

接下来是这个:

println!("Hello, world!");

这行就是这个程序唯一的操作.有一些重要的细节.

首先,这行以4个空格缩进,而不是tab.请把你的编辑器配置成这样.我们提供了一些编辑器的配置

其次,是println!.这个是Rust的宏(macro),是Rust进行元编程(metaprogramming)的方式.如果是函数的话,应该是println.现在,我们不用关心二者的区别.只要知道,要是你看到”!”,就表明你调用的是宏,而不是函数.Rust把println!实现为宏是有原因的,但这个比较复杂.之后学到宏之后,你就会了解了.另外,Rust的宏和C语言的宏完全不一样.不要担心宏的使用.后面我们会详细介绍,现在就暂时相信我们吧.

然后,”Hello, world!”是字符串(string).字符串是系统编程语言里一个比较复杂的东西,此处是静态分配(statically allocated)的字符串.后面我们会介绍其他不同的分配方式.我们把这个字符串作为参数传给println!,println!就将该字符串输出到屏幕上.搞定!

最后,要编译和运行该程序.我们使用rustc和源文件名来编译程序

$ rustc main.rs

这和gccclang类似.Rust会输出一个二进制文件.使用ls看下:

$ ls
main main.rs

或者在Windows平台上:

$ dir
main.exe main.rs

这里有2个文件,源文件,以”.rs”结尾,可执行文件(Windows平台的”main.exe”,或者其他平台的”main”)

$ ./main # main.exe

这就将”Hello, world!”输出到屏幕上.

如果你学习过动态类型语言,比如Ruby, Python或JavaScript,你也许对这分离的2个步骤很陌生.Rust是一种提前编译(ahead-of-time compiled)的语言,这意味着,你编译好了程序,把它给了别人,别人不需要安装Rust就能运行.如果你给别人一个”.rb”, “.py”或”.js”文件,他们必须提前安装好Ruby/Python/JavaScript,但此时,你只需要一个命令就能同时编译/运行你的程序了.语言设计中各种权衡和折衷,Rust只是做了一种选择而已.

恭喜!你已经完成了一个Rust程序.你现在是Rust程序员了!欢迎.

接下来,我会介绍另一个工具,Cargo,是用来编写实际运行的Rust程序的.rustc对于简单的程序来说很好,但当你的项目扩大,你会需要一些工具来帮你管理项目,分享项目(译者: 这就是Cargo的功能).