Hello, Rust

安装

1
2
# On Mac
$ curl https://sh.rustup.rs -sSf | sh

运行此命令,按其中的提示安装即可。

升级与卸载

1
2
3
$ rustup update

$ rustup self uninstall

确认

1
$ rustc --version

本地文档

1
2
# 使用此命令在浏览器中打开本地文档,其中包含 The Rust Programming Language.
$rustup doc

Hello, World!

假设把代码放在某个目录下,cd到它,创建一个main.rs文件(rs是Rust文件的扩展名):

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

然后,编译再运行之:

1
2
$ rustc main.rs
$ ./main

Rust程序的结构

fn定义一个函数,而main同时是特别的入口函数,与CC#之类语言类似。Rust中的函数需要花括号包含其函数体。

第二行println!("Hello, world!");,输出一行文本到屏幕。这里看起来有点特别的是println!,带有!在Rust中意味着调用宏而非函数。行末的;表示一个表达式的结束,大多数Rust代码行以;结束。

编译和执行的分离

作为静态语言,Rust程序执行之前需要先行编译,这类似于gccclang

对于简单的程序,可如上使用rustc,对于更为复杂的程序,你可能需要Cargo这个工具。

Cargo

Cargo是Rust的构建系统(Build System)和包管理器(Package Manager)。它可以生成代码、下载依赖库,生成库代码。

Cargo随Rust一起安装。

以Cargo创建一个项目

使用命令

1
$ cargo new hello_cargo --bin

创建一个项目,--bin表示所创建者为可执行文件(binaries)。Cargo生成了两个文件:

  • Cargo.toml(TOML格式的配置文件)
  • src/main.rs(与上面手工创建的一样)

Cargo.toml内容如下:

1
2
3
4
5
6
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["andersc <andersc@mail.com>"]

[dependencies]

[dependencies]列出了依赖的库,这些依赖在Rust中称为crate。Cargo创建了初始的目录结构,也是建议将代码放在src下,其它文件放在顶级目录。

Building and Running a Cargo Project

使用如下命令编译并运行程序:

1
2
$ cargo build
$ ./target/debug/hello_cargo

首次执行cargo build时,它会创建文件Cargo.lock,用于跟踪应用的依赖。一般不需要手工改动之。作为一种更快捷的方式,可以用cargo run来编译并运行程序。

发布程序

上面可见,编译的程序放在了debug下,如果要正式发布,则应使用cargo build --release选项,这会优化所生成的程序,代价是编译时间更长。

开发环境

Guessing Game

通过一个真实的程序来演示几个Rust的常见概念,如letmatch,方法,关联函数,使用外部库等。

猜数游戏是一个经典的编程初学者的问题。

建立项目

1
2
$ cargo new guessing_game --bin
$ cd guessing_game

感受一下

1
2
3
4
5
6
7
8
9
10
11
12
use std::io;

fn main() {
println!("Guess the number!");
println!("Please input your guess.");

let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("Failed to read line");

println!("You guessed: {}", guess);
}

这里面,use不用多说;let创建一个变量,不过在Rust中变量默认是不可修改的,如果希望修改,则需要使用mut;String:new()就是所谓关联函数(associated function),相当于其它语言中的静态方法

stdin是io的关联函数;read_line函数读取用户输入,将值赋给一个变量,&表示参数为引用(reference)