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
这和gcc
或clang
类似.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的功能).