第一个Rust程序

本文大部分内容翻译自:The Rust Programming Language

1. 第一个Rust程序:Hello world

1.1. 创建工程路径

为Rust工程创建工程路径rust,在rust下创建hello_world路径:

1
2
3
mkdir rust
cd rust
mkdir hello_world

1.2. 编写Rust程序

创建文件main.rs(如果在文件名中使用多个单词,可以用下划线_将它们分隔开,如hello_world.rs)。

main.rs的内容为:

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

保存文件并返回Terminal,编译并运行main.rs

1
2
3
4
5
# 编译
rustc main.rs

# 运行(会在console打印出"Hello, world!")
./main

2. 程序分析

main.rs中,下面的代码定义了一个Rust中的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
fn main() {

}
```

- `main`函数是特殊的函数(function),在每个Rust的可执行程序中,它都是**第一个被执行的函数**
- 第一行的`main`定义了函数的名字,没有参数(parameters),没有返回值。如果有参数的话,会在`()`中列出
- 在Rust中,需要用大括号`{}`来包裹函数体(function body),一般将`{`放在与函数声明同一行,中间加一个空格
- 自动格式化Rust代码的工具:`rustfmt`,它会将代码格式化成一个标准的样式
- `rustfmt`像`rustc`一样是包含在安装的各种Rust工具中的,在安装Rust时应该已经被安装好了
- 使用方法:`rustfmt [source code path]`

在`main`函数内部是如下代码:
```rust
println!("Hello, world!");
```
这行代码将`Hello, world`打印到屏幕上。这里要注意4点:
- Rust使用4个空格来缩进,而不是tab
- `println!`调用的是一个Rust macro。如果调用的只是一个函数,会使用`println`,不会加`!`
- 使用`!`表示调用macro而非普通的函数。macros遵循的规则有时会与function不同
- `Hello, world!`这个字符串是被作为参数传给`println!`的,这个字符串被打印到了屏幕上
- 行末以分号`;`结尾,`;`代表一个表达式的结束,大部分Rust代码的行末都以分号结束

## 3. 编译和运行
编译和运行是两个不同的步骤,在运行一个Rust程序之前,必须先用`rustc`来编译这个程序:
```bash
rustc main.rs

在编译成功后,会生成一个二进制可执行文件(Windows上生成main.exe,其它平台上生成main)。

运行可执行文件:

1
./main  # Windows上使用:.\main.exe

对于一些动态语言,如Ruby、Python、JavaScript,编译和运行并不是分开的步骤。Rust是ahead-of-time compiled的语言,意味着你可以编译一个程序,然后将生成的可执行文件给其他人,他们不需要安装Rust就可以执行这个文件。但如果将.rb.py.js文件给其他人,他们需要安装Ruby、Python、JavaScript才能运行它们。

参考资料

[1] The Rust Programming Language:https://doc.rust-lang.org/stable/book/ch01-02-hello-world.html