1.4.2 Hello,World程序
打开“Hello”项目下src/main.rs文件。Cargo已经自动编写了必要的程序源代码,以在终端上显示出“Hello, World”。
接下来,请逐行仔细阅读这个程序:
InstallingRust/HelloWorld/src/main.rs
❶ fn main() { ❷ println!("Hello, world!"); }
❶ main函数。main是一个特殊的函数,标记了整个程序的入口点。
定义main函数的语法如图1-3所示。
图1-3
❷ println!宏和字符串字面量,相关内容参见下文的“打印文本”。
Rust代码中有很多花括号({..}),这些花括号代表了作用域。作用域表示具有紧密联系的一组代码。在某个作用域中创建的变量只能存在于这个作用域内——它们不会逃逸到作用域外,而且当作用域结束时,这些变量会被自动清除掉。在这个例子中,打印“Hello, World”是在main函数的作用域中发生的。
main函数是一个比较特殊的函数,扮演着Rust程序入口点的角色。无论程序中各个函数的排列顺序是什么样的,main函数总是第一个运行。
打印文本
main函数的函数体包含了如下一行代码:
println!("Hello,world!");
感叹号标记代表了println!是一个宏(macro)。Rust的宏系统非常强大——它允许使用一些在常规函数中不能使用的语法。这会使得宏的用法与众不同——因此,Rust在宏的名称里面加入了一个感叹号,用来提示当前正在调用的是一个宏。println!是一个非常灵活的宏,支持很多不同的显示格式。当前的这个例子并不涉及这些灵活的扩展功能选项,只需要打印出一些文字即可。
“Hello,world!”是一个字符串字面量(string literal)。之所以称之为“字面量”,是因为它表示的是写在双引号之间的原始文字,而且被存储到程序中[5]。你可以在这里写入任何其他的文本来替换掉默认的“Hello,world!”。它还支持Unicode。“Привет, мир”和“こんにちは世界”都是可以显示在屏幕上的合法的字符串字面量,甚至emoji表情也是可以在这里使用的。
[5] C++涉及较多的字面量,可以查阅相关资料进行了解。“存储到程序中”指的是在编译后位于二进制文件的静态段中,而不是在数据段中。——译者注
慎用难以输入的符号
能够随意使用各种符号是很好的一件事,但是注意不要做过头。笔者参加过一个项目,其中很多地方使用了美妙的数学符号,阅读起来令人愉悦,letθ=π*Δ这样的写法是对底层数学公式很自然的表述。但是当需要对代码进行修改时,修改符号就变得很棘手了,因为很多符号在键盘上都找不到。正是出于这个原因,Rust对函数名和变量名中可以使用的符号做了限制。