学习资料:Rust程序设计语言 简体中文在线版。
入门指南
安装
1 | curl https://sh.rustup.rs -sSf | sh | 
2 | |
3 | source $HOME/.cargo/env | 
4 | |
5 | vim ~/.bash_profile | 
6 | export PATH="$HOME/.cargo/bin:$PATH" | 
7 | |
8 | 	mkdir ~/rust_projects | 
1 | /* main.rs */ | 
2 | fn main(){ | 
3 |     println!("Hello, world!"); /* println!是宏 */ | 
4 | } | 
1 | rustfmt main.rs /* 格式化 */ | 
2 | rustc main.rs | 
Hello,Cargo!
Cargo是Rust的构建系统和包管理器。大多数Rustacean们使用Cargo来管理他们的Rust项目,因为它可以为你处理很多任务,比如构建代码,下载依赖并编译这些库。
1 | cargo --version | 
2 | |
3 | cargo new hello_cargo | 
4 | cd hello_cargo | 
Cargo生成两个文件和一个目录:一个Cargo.toml文件,一个src目录,以及位于src目录中的main.rs文件。同时也生成了git仓库,以及一个.gitignore文件。
1 | [package] | 
2 | name = "hello_cargo" | 
3 | version = "0.1.0" | 
4 | authors = ["your name"] | 
5 | edition = "2018" | 
6 | |
7 | [dependencies] | 
在hello_cargo目录下,输入cargo build命令来构建项目,该命令生成可执行文件target/debug/hell_cargo。也可以使用cargo run在一个命令中同时编译并运行生成可执行文件。
Cargo还提供了一个叫cargo check的命令。该命令快速检查代码确保其可以编译,但并不产生可执行文件。
当项目最终准备好发布时,可以使用cargo build --release来优化编译项目。该命令会在target/release而不是target/debug下生成可执行文件。
基本编程概念
变量与可变性
rust变量默认是不可改变的(immutable)。
变量和常量的区别
常量(constants),不允许对常量使用mut。常量不止默认不可变,它总是不能变的。声明常量使用const关键字而不是let,并且必须注明值的类型。常量可以在任何作用域中声明,包括全局作用域。
1 | const MAX_POINTS: u32 = 100_000; | 
隐藏(Shadowing)
定义一个与之前变量同名的新变量,新变量会隐藏之前的变量。可以用同名变量来隐藏一个变量,以及重复使用let关键字来多次隐藏。
隐藏与将变量标记为mut不同,当尝试对变量重新赋值时,如果没有使用let关键字,就会导致编译时错误。通过使用let,可以用这个值进行一些计算,但是计算完后变量仍然是不变的。
1 | fn main() { | 
2 | 	let x = 5; | 
3 | |
4 | 	let x = x + 1; | 
5 | |
6 | 	let x = x * 2; | 
7 | 	println!("The value of x is: {}", x); | 
8 | } | 
mut与隐藏的另一个区别:当再次使用let时,实际上创建了一个新变量,可以改变值的类型,同时复用这个名字。
1 | let spaces = " ";  //字符串 | 
2 | let spaces = spaces.len();  //整型 | 
数据类型
标量类型
整型是没有小数部分的数字。Rust的默认类型数字类型是i32。
| 长度 | 有符号 | 无符号 | 
|---|---|---|
| 8-bit | i8 | u8 | 
| 16-bit | i16 | u16 | 
| 32-bit | i32 | u32 | 
| 64-bit | i64 | u64 | 
| 128-bit | i128 | u128 | 
| arch | isize | usize | 
isize与usize类型依赖与运行程序的计算机架构:64位架构上它们是64位的,32位架构上它们是32位的。
在debug模式下,出现整型溢出的问题时,rust使程序panic,而在release构建中,rust不检查溢出,进行二进制补码包装的操作。
浮点型分为f32和f64。布尔型分为true和false。字符类型char的大小为四个字节。
1 | fn main(){ | 
2 | 	let x = 2.0; | 
3 | 	let y: f32 = 3.0; | 
4 | 	let t = true; | 
5 | 	let f: bool = false; //显示指定类型注解 | 
6 | 	let c = 'z'; | 
7 | } | 
复合类型
元组类型
元组是一个将多个其它类型的值组合进一个复合类型的主要方式。元组长度固定,一旦声明,其长度不会增大或缩小。