Rust 跟 C/C++ 一样都是编译语言,拥有解释型语言不可比拟的性能,但是同时 Rust 又让编程变得有趣。本节是 Rust 语言入门第一课,主要介绍安装和编译项目的基本技巧,如果你有过使用 C/Ruby 这些语言的经历,这里的内容会显得非常的简单,对于没有编程经验的朋友文中也给出了拓展学习材料。

安装

我这里使用的是 Mac 系统,下面来演示一下如何来进行 rust 编译环境的安装。其他平台可以参考官方文档的说明 https://doc.rust-lang.org/book/second-edition/ch01-01-installation.html 。

首先要安装 rustup 然后通过 rustup 来安装 rust 语言。rustup 是 rust 语言的 installer https://www.rust-lang.org/zh-CN/install.html 。

curl https://sh.rustup.rs -sSf | sh

如果遇到 linker 相关的问题,可以尝试安装 C 编译环境,例如 xcode 。

打开一个新命令行窗口。

$ rustc --version
rustc 1.30.1 (1433507eb 2018-11-07)

执行命令,如果看到版本号的输出,表示 rustc ,也就是 rust 语言的编译器就安装好了。

创建项目

接下来编译一个简单的 rust 项目。注意,文件名用下滑线来连接多个单词,例如要写成 hello_world.rs ,不要写成 helloworld.rs 。

创建一个 main.rs 。

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

定义了一个函数 main ,其他的地方跟 C 语言是非常像的,比较让人奇怪的是 println! 这里的 ! 。这里需要说明的是有叹号就是一个 Rust 的宏,macro 。没有叹号就是一个普通的函数调用了。关于这些语句的详细解释,可以参考这篇文档 https://doc.rust-lang.org/book/second-edition/ch01-02-hello-world.html 。

$ rustc main.rs

跟 Python/JS/Ruby 这些运行在解释器上的解释型语言不通,Rust 跟 C/C++ 类似,是编译型语言,所以需要先编译,得到二进制可执行文件然后才能执行。

$ ls
main main.rs

运行 ls 命令,可以看到多了一个文件 main 。

$ ./main
Hello, world!

命令行中执行一个可执行文件,需要添加明确的路径。例如 main 在当前位置,路径就是 ./ ,所以 ./ 后面跟上可执行文件的名字 main 就可以执行文件,看到输出了。

Cargo

对于单文件的小项目,直接用 rustc 编译即可。但是真实的 Rust 程序一般都是用 Cargo 来管理的。Cargo 既是 Rust 的编译工具也是包管理工具。通过 rustup 安装了 rust 之后,cargo 命令就自动安装好了。

cargo --version

运行命令,如果能正确输出版本号,证明 cargo 就安装好了。

cargo new hello_cargo --bin

创建一个名为 hello_cargo 的新项目。--bin 参数的作用是保证编译输出是一个可执行文件,而不是一个库。进入项目文件夹,发现 cargo 已经帮我们做好了基本的 git 配置。并且,新建了一个 Cargo.toml 文件来存放项目的配置信息,例如项目名,作者,依赖等。toml 是一种编程语言 https://github.com/toml-lang/toml 的名字,暂时不必关心。另外还创建了一个 rust 源码文件, src/main.rs 。

$ cd hello_cargo
$ cargo build

进入 hello_cargo 文件夹,要编译项目就执行 cargo build 命令。这个命令的最重要的输出是一个可执行文件 target/debug/hello_cargo

$ ./target/debug/hello_cargo
Hello, world!

输入完整路径就可以执行这个文件,看到输出了。

首次运行 cargo build 输出内容中包含一个 Cargo.lock 的文件,里面是项目依赖包的精确版本号,使用过包管理工具的同学对类似的文件并不陌生。

$ cargo run

除了 build 还有一个 run 子命令。可以同时完成编译和运行。

cargo build --release 

如果项目可以发布了,就可以在 build 的时候加上 --release 选项。这样输出是经过优化的,并且存放位置也变了,移动到了 target/release 之内。

关于 Cargo 的更多实用技巧,可以参考官方文档 https://doc.rust-lang.org/book/second-edition/ch01-03-hello-cargo.html 。

总结

本节内容就是这些了。总结起来要点有这么几个:第一,安装 rust ,最佳方式是使用 rustup 。第二,编译单个文件可以用 rustc 编译器。第三,真实的项目大家都用 Cargo 来管理依赖和进行编译。

参考: