2.2 Hello World
Page 17
现在你已经安装了Rust,让我们写下你的第一个Rust程序.用任何一种语言写下第一个程序的时候打印出"Hello World"是一个传统.这样做是为了确保你的编译器安装完成并且正确工作.打印一些东西到屏幕上是一个最平常不过的事了.
我们需要做的第一件事是创建一个文件用来保存我们的代码.我会在我的主目录里新建一个project目录,用来保存我所有的工程.Rust本身不关心你把代码放在那里.
这同时会牵出另一件我们需要实现声明的事情:在本指南中我们默认你有基本的命令行操作技能.Rust本身不会对你的代码编辑工具做任何要求,也不关心你把代码放在哪里.如果你倾向于IDE,而不是命令行,你可以考虑使用SolidOak,后者其他你熟悉的IDE上的插件.在开发者社区有很多出色的扩展.Rust开发团队本身也开发针对不同编辑器的插件.设置你的编辑器或者IDE超出了本指南的范围,你可以针对你的情况参考相应的文档.
如上所述,让我们创建一个自己的工程目录.
$ mkdir ~/projects
$ cd ~/projects
$ mkdir hello_world
$ cd hello_world
如果你在Windows系统中并且不使用PowerShell,~也许不会起作用.请参考你的环境的说明文档.
接下来我们新建一个源码文件.命名为main.rs.Rust文件总是以.rs作为扩展名.如果你的文件名使用多余1个的单词,使用下划线将它们链接:hello_world.rs.而不是helloworld.rs.
现在你有了文件,输入如下内容:
fn main() {
println!("Hello, world!");
}
Page 18
保存之后,在终端窗口敲出如下命令:
$ rustc main.rs
$ ./main # or main.exe on Windows
Hello, world!
成功了!让我们再回顾一下细节:
fn main() {
}
这几行代码定义了一个Rust的函数.main函数很特殊,它是所有Rust程序的开始.第一行可以读作:"我声明了一个名叫main的函数,它没有参数,返回值为空."如果有参数的话,他们必须被小括号包裹,同时因为我们没有返回任何值,我们可以完全忽略返回类型.我们稍后会提及.
你也许会注意到函数被一对大括号包裹.Rust要求所有的函数都这样声明.同时,在函数声明的同一行打印开始大括号,中间一个空格,是一个好的代码风格.
接下来的一行是:
println!("Hello, world!");
这样一行做了这个小程序的所有工作.这里有很多细节都很重要.首先就是有一个4空格的缩进,而不是制表符.你需要把你的编辑器设置成为制表符插入空格.我们提供了一些针对不同编辑器的配置样例.
第二点就是println!().在Rust语言中这被称为宏(marco),它是通过元编程(metaprogramming)实现的.如果这里使用函数的话,看起来会使这样的:println().目前我们不需要知道这两者的区别.你只需要知道当你看到!的时候,这就是一次宏调用而不是函数调用.Rust语言使用宏而不是函数调用来实现println有他自己的原因,这里先暂且不谈.最后一件事是:Rust语言的宏完全不同于C语言的宏.你不必害怕使用宏,我们后面会详细讨论,你现在只需要相信我们就可以了.
然后,就是"Hello, world!"字符串.字符串在一个系统级的编程语言中是一个非常复杂的话题.并且这是一个"静态存储(statically allocated)"字符串.如果你想阅读关于内存分配的更多内容,你可以转到"栈和堆"(4.1)这一节,如果你现在还不想的话你目前不必阅读那些内容.我们把这个字符串作为参数传给println!,后者将其打印在屏幕上.非常简单!
最后,这一行以一个分号结尾.Rust语言是一个面向表达式(expression oriented)的语言,也就是说大多是语句都是表达式(expressions),而不是陈述式(statements).分号用于指出一个表达式的结束,另一个表达式可以开始.大多数的Rust代码行都以分号结尾.
最后,编译并运行我们的程序.我们可以试用编译器rustc来编译,把源文件名作为参数传递给它.
$ rustc main.rs
如果你有C/C++背景的话,这和gcc或clang很像.Rust会输出一个二进制可执行文件.你可以通过ls看到它:
$ ls
main main.rs
在windows上:
$ dir
main.exe main.rs
这里现在有2个文件了,一个源文件以.rs作为扩展名,一个可执行文件.
$ ./main # or main.ext on Windows
它会把"Hello,world!"文本打印在终端上.
如果你熟悉Ruby, Python, JavaScripte这样的动态语言.你不需要将以上三步分开执行.Rust是一种"前期编译语言(ahead-of-time compiled language)",你不需要安装Rust就可以运行一个已经被别人编译好的程序.如果你给别人一个.rb,.py,.js文件,他们必须先安装Ruby/Python/javaScripte解释器才能运行.在Rust,你只需要一行命令就可以编译并运行你的程序.设计编程语言的时候每件事都有他的优缺点,看你怎么选择.
恭喜你!你已经正式编写了一个Rust程序.你现在是Rust程序员了!欢迎.
接下来,我要介绍给你另一个工具,Cargo,他用来写真实世界的Rust程序.只用rustc的话,对于简单的事情还好,但是随着你的工程的增长,你需要工具来帮助你管理你的工程,并且让你的代码和工程分享更容易.