一、类型系统
- 强类型or弱类型
- 多态
- 支持的基本数据类型,整型的设计(浮点型发挥空间不大)
- 字符串的设计,编码方式、字符遍历方式等
- 字符的编码方式,如何支持特殊字符
- 自定义类型、接口
- 泛型
- 反射
Rust是一门静态强类型语言,静态表示Rust代码需要经过先经过编译过程生成可执行文件,Rust官方提供的编译期叫rustc
,它是由rust编写的,包含在rust源码中,而强类型则表示rust不允许隐式类型转换,比如在Java中你可以把一个int值赋给long类型,因为Java允许隐式类型转换,而在rust中这样是不被允许的。
Rust支持参数化多态和Ad-hoc多态,也就是泛型和trait。
todo:trait
布尔类型
bool类型只有两个值:true和false,可以使用as将bool值转变成数字,但是反之则不行
fn main() {
let x = true;
let y : bool = true;
let w = x as i32;
let v = x as i64;
println!("x is :{}",x);
println!("y is :{}",y);
println!("w is :{}",w);
println!("v is :{}",v);
}
基本数据类型
Rust的整数可以分为有符号或无符号数,其中每一种按所占字节数可以分为1、2、4、8、16字节数,例如有符号数可分为:i8, i16, i32, i64和i128,无符号数分为:u8, u16, u32, u64和u128,此外还有根据系统动态配置大小的isize和usize类型
数字类型在创建的时候可以指定类型后缀,而如果没有指定类型时,整数默认是i32,浮点数默认是i64,此外,Rust中还可以使用字节字面量
fn main() {
let x = 128u32;
let y : u32 = 128;
let z = 128;
let k = b'*';//42
println!("x is :{}",x);
println!("y is :{}",y);
println!("z is :{}",z);
println!("k is :{}",k);
}
字符类型
数组类型
数组Array是Rust内建的类型,数组的类型签名为[T;N]
其中T表示类型,N表示长度,常用数组定义方式:
fn main(){
let arr : [i32; 3] = [1, 2, 3];
let mut mut_arr = [1, 2, 3];
let init_arr = [0;10];/*10个元素,初始值为0*/
}
对于原始固定长度的数组,只有实现Copy trait
的类型才能作为其元素,即只有在栈上存放的元素才能放到该类型的数组中。
数组的遍历:
Rust内置了Range
类型来支持遍历,可以左闭右开即全闭
fn main(){
let arr = [1,2,3];
for i in 0..arr.len(){
//...
}
for i in 0..=2{
//...
}
}
切片类型
切片类型是对数组的引用,与go类似,在Rust中数组当做参数传递的时候,会进行复制,使用切片后效果类似Java中的引用传递
fn main() {
let mut arr = [1,2,3] ;
let slice = &mut arr[1..];
}
二、流程控制
- 循环
- 分支
三、集合类型
- 数组、哈希表的创建和使用
- 支持的其余集合类型、集合的各种api、遍历方式
- 并发安全性
四、内存管理
- 内存管理方式,除堆栈外是否还有其余抽象
- 类型的内存分配方式,何时在堆何时在栈
- 内存回收,手动or自动or半自动
五、并发
- 并发模型,直接映射系统线程、绿色线程还是协程等
六、异常体系
其余
- 编程范式
- 语言哲学
- 语言特色
- 包管理