2015年rust1.0刚出来的时候,接触过一段时间的rust,并用rust重写过公司的场景模块管理(octree)。时隔三年rust日臻成熟,重拾rust。本文就当重新温习rust。
rustc
rust自带的编译工具。
rustfmt 自动格式化工具
!表示宏调用而不是普通函数
cargo
rust构建系统和包管理器
cargo.tml [dependencies] 添加 依赖库,格式:
xxx= "0.3.14"
cargo.lock 确保构建是可以重现的
cargo常用命令
cargo new 新建项目
cargo build 编译项目
cargo run 运行项目
cargo check 检查代码
cargo update 升级
cargo build --release 来优化编译项目
变量
let 绑定,默认不可变,允许用一个新的变量来隐藏旧的同名变量
变量名前加mut,表示可变
常量与变量的区别:
常量不光默认不能变,它总是不能变。
声明常量使用 const
关键字而不是 let
,并且 必须 注明值的类型。
常量可以在任何作用域中声明,包括全局作用域
最后一个区别是,常量只能被设置为常量表达式,而不能是函数调用的结果,或任何其他只能在运行时计算出的值。
数据类型
两类数据类型子集:标量(scalar)和符合(compound)
标量类型
Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。
Rust 中的整型:
8-bit | i8 | u8 |
16-bit | i16 | u16 |
32-bit | i32 | u32 |
64-bit | i64 | u64 |
arch | isize | usize |
isize
和 usize
类型依赖运行程序的计算机架构:64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的
注意除 byte 以外的所有数字字面值允许使用类型后缀,例如 57u8
,同时也允许使用 _
做为分隔符以方便读数,例如1_000
debug会检查整形溢出,release 不会
Rust 也有两个原生的 浮点数(floating-point numbers)类型,它们是带小数点的数字。Rust 的浮点数类型是 f32
和 f64
,分别占 32 位和 64 位。
Rust 中的所有数字类型都支持基本数学运算:加法、减法、乘法、除法和取余。
Rust 中的布尔类型有两个可能的值:true
和 false
符合类型
复合类型(Compound types)可以将多个值组合成一个类型。Rust 有两个原生的复合类型:元组(tuple)和数组(array)
函数
fn
关键字,它用来声明新函数。
Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中,所有字母都是小写并使用下划线分隔单词。
函数可以向调用它的代码返回值。我们并不对返回值命名,但要在箭头(->
)后声明它的类型。在 Rust 中,函数的返回值等同于函数体最后一个表达式的值。使用 return
关键字和指定值,可从函数中提前返回;但大部分函数隐式的返回最后的表达式。
控制流
if else
Rust 有三种循环:loop
、while
和 for
。
loop continue break
for
循环的安全性和简洁性使得它成为 Rust 中使用最多的循环结构。