Rust编程第一课

Rust的官方网站是https://www.rust-lang.org, 它是一门赋予每个人构建可靠且高效软件能力的语言. 按官方介绍,选择Rust的原因主要为:

  • 高性能:Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。
  • 可靠性:Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
  • 生产力:Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具——包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。

学习Rust语言,本博客提供以下几个途径:

本博客决定边学习边记录,以期完成一篇入门级的简洁实用教程。第一课当然是编写Hello World程序,其源码为:

hello_world.rs
1
2
3
4
5
// hello_world.rs
fn main() {
let s = "hello world!";
println!("{}", s);
}

由于其没有复杂的依赖关系,直接使用rustc编译即可,其他所有选项使用默认值:

编译hello_world.rs
1
rustc hello_world.rs

编译完成后,在本地文件夹中生成了可执行程序:hello_world, 执行程序./hello_world, 控制台上输出了hello world!字符串, 第一个Rust程序已经成功! 根据这个最简单的例子,我们得到一些基本的规则:

  • 一般Rust源代码的后缀名使用.rs表示。源码一定要注意使用utf-8编码。

  • 第一行是注释语句,Rust的注释是C语言系列风格的,行注释采用//开头,块注释使用/**/包围。它还支持更高级的文档注释,将在后文中详细展开说明。

  • fn是一个关键字(key word),函数定义必须以这个关键字开头。函数体使用大括号来包含。fn是单词function的缩写,在Rust中,设计者比较偏向使用单词缩写,即使是关键字也不例外。在代码风格上,某些读者可能开始会有点不习惯。但总体而言,这只是个审美偏好而已,不必过于纠结,习惯就好。

  • 默认情况下,main函数是可执行程序的入口点,它是一个无参数,无返回值的函数。如果我们要定义的函数有参数和返回值,可以使用以下语法(参数列表使用逗号分开,冒号后面是类型,返回值类型使用->符号分隔):

    1
    2
    3
    fn Foo( input1 : i32, input2 : u32) -> i32 {
    ...
    }

  • 局部变量声明使用let关键字开头,用双引号包含起来的部分是字符串常量。Rust是静态强类型语言,所有的变量都有严格的编译期语法检查。关于Rust的变量和类型系统将在后文详细说明。

  • 每条语句使用分号结尾。语句块使用大括号。空格、换行和缩进不是语法规则的一部分。这都是明显的C语言系列的风格。

最简单的标准输出是使用println!宏来完成。请大家一定注意println后面的感叹号,它代表这是一个宏,而不是一个函数。Rust中的宏与C/C++中的宏是完全不一样的东西。简单点说,可以把它理解为一种安全版的编译期语法扩展。这里之所以使用宏,而不是函数,是因为标准输出宏可以完成编译期格式检查,更加安全。