0. Rust的源文件
像c语言的源文件我们以".c"为后缀,c++以".cpp"为后缀,java以".java"为后缀。Rust的源文件也不例外,它们总是以".rs"为后缀名。和Java的多个单词用驼峰命名规则不同,Rust语言多个单词我们通常用下划线进行连接(hello_world.rs)。
1. Hello world!
我们学习任何语言,都是从Hello world开始的。当然我们学习Rust也不例外。
首先执行以下命令:
$ cd ~
$ mkdir hello_world
$ cd hello_world
我们在用户跟目录下创建了 hello_world 文件夹,紧接着我们进入到我们创建的文件夹目录中,接下来我们来创建一个 main.rs 源文件,内容为:
fn main() {
println!("Hello world!");
}
保存文件,只需要输入如下命令:
$ rustc main.rs
$ ./main
Hello world!
我们就可以在命令行窗口内看到我们输出的 Hello world!字符串了。
2.来看看我们具体都做了哪些事情
fn main() {
}
这几行代码定义了一个Rust函数。和其他语言一样,Rust也是以main函数为程序的入口。
在main函数中:
println!("Hello world!");
这里和我在学习c语言和Java编程语言时不太一样,在c语言中,我们的hello world程序首先要引入相关的头文件。
#include <stdio.h>
之后,我们在程序中调用:
printf("Hello world!\n");
但是在我们刚才编写的Rust代码中,细心的同学可以发现,在 "println"之后有一个 "!"。这其实是一个Rust宏,现在我们只需要记住,在Rust代码中我们见到"!"的时候,就代表调用了一个宏而不是一个普通函数。
和Java、c语言一样,Rust代码以 ";"作为语句结束。
3. 编译和运行
在运行一个Rust程序之前,我们必须编译它。可以输入 rustc 命令来使用Rust编译器
$ rustc main.rs
在执行完这一步后,我们用 ls 命令可以发现:
$ ls
main main.rs
其中main文件就是我们编译后的可执行文件了。这个时候,我们使用命令:
$ ./main
就可以让我们的程序运行起来。
Rust 是一种 预编译语言(ahead-of-time compiled language),程序编译好后,把它给任何人,他们都不需要安装 Rust 就可运行。
4. Cargo
Cargo 是 Rust 的构建系统和包管理工具,它负责三个工作:
- 构建代码
- 下载依赖库
- 编译代码
绝大部分 Rust 项目使用 Cargo,我们可以使用命令:
$ cargo --version
来检查Cargo的安装配置情况,如果你是使用Rust官方安装包的话,Rust自带了Cargo。
使用Cargo构建一个项目通常需要做三件事:
- 将源文件放到正确的目录
- 删除旧的可执行文件
- 创建一个Cargo配置文件
回到我们的 hello_world 目录
$ mkdir src
$ mv main.rs src/main.rs
$ rm main
在 hello_world 目录下创建一个 Cargo.toml 文件(大小写敏感,否则Cargo识别不到)。这个文件使用TOML(Tom's Obvious, Minimal Language)格式。 TOML 类似于 INI,不过有一些额外的改进之处,并且被用作 Cargo 的配置文件。配置内容如下:
[package]
name = "hello world"
version = "0.0.1"
authors = ["your name"]
第一行的[package]表明下面的语句用来配置一个包。随着我们在这个文件增加更多的信息,我们会增加其他部分,不过现在,我们只有包配置。
另外三行设置了 Cargo 编译你的程序所需要知道的三个配置:包的名字,版本,和作者。
Ok,保存完成后,我们执行以下命令:
$ cargo build
Compiling hello_world v0.0.1 (file:///Users/zhaoliangtai/rust_projects/hello_world)
$ ./target/debug/hello_world
Hello world!
执行完成后我们可以看到,我们程序已经运行起来了。和Android开发者在使用gradle的时候类似,默认为我们生成了debug程序。当然我们也可以使用命令:
$ cargo run
来直接构建、编译、运行我们的程序。
Cargo 检查任何项目文件是否被修改,并且只会在你上次构建后修改了他们才重新构建。
我们也可以使用:
$ cargo build --release
来优化编译项目,这些优化可以让 Rust 代码运行的更快,不过启用他们会让程序花更长的时间编译。这也是为何这是两种不同的配置,一个为了开发,另一个构建提供给用户的最终程序(和gradle很像)。
5. Cargo.lock是什么?
细心的同学可能发现了,在我们配置完配置文件并执行Cargo命令后,在我们的项目根目录下多了一个 "Cargo.lock" 文件
[[package]]
name = "hello_world"
version = "0.0.1"
Cargo 用Cargo.lock文件跟踪你程序的依赖。这里是 Hello World 项目的Cargo.lock文件。这个项目并没有依赖,所以内容有一点稀少。
6. 创建新Cargo项目的简单方法
$ cargo new hello_world --bin
这个命令传递了--bin参数因为我们的目标是直接创建一个可执行程序,而不是一个库。可执行文件通常叫做二进制文件(因为它们位于/usr/bin,如果你使用 Unix 系统的话)。