保证一致性,保证安全.
基本数据类型
字符串
- 字面量
- 动态可增长字符串
- 从一段字符串截取的片段
- 字符串编码
- FFi中需要转换字符串到C或OS本地字符串
- 遵循特定格式的文件路径
指针类型
- 原始指针,mut T 和 const T 一般 用于 unsafe rust中 可以为空
- NonNull指针,他是Rust语言建议的*mut指针的代替指针.NonNull指针是非空指针,并且是遵循生命周期类型的协变规则.
- 函数指针 ,函数指针是指向代码的指针,而非数据,你可以使用它直接调用函数.
引用
- &T和&mut T 共享引用和独占引用
- 引用与指针的主要区别
- 拥有生命周期
- 引用不可能为空
- 受借用检查器保护 不发发生悬垂指针问题.
元组
唯一的异构序列
- 不同长度的元组是不同的类型
- 单元类型的唯一实列等价于空元组
- 当元组只有一个元素的时候,要在元素末尾加逗号分隔.这是为了方便和括号操作符区分开来.
Never类型
代表的是不可能返回值的计算类型
- 类型理论中,叫做底类型,底类型不包含任何值,但它可以合一到任何其他类型.
- Never类型用!叹号表示
自定义复合类型
结构体
- 具名结构体
- 元组结构体
- 单元结构体
struct Hello{//具名结构体
name:String,
age:u8,
}
struct Helo(i32,u8);//元组结构体
struct Hlo;//单元结构体
当元组结构体只包含一个成员的时候,这种模式就叫NewType
struct Score(u32);//NewType
impl Score {
fn pass(&self) -> bool {
self.0 >= 60
}
}
fn main() {
let s = Score(5);
assert_eq!(s.pass(), false)
}
编译器重排
是为了内存对齐,优化.
内存对齐:
重排是为了优化内寸大小.
容器类型
cell
RefCell
基于 unsafecell 实现
泛型
单态化
特定类型
是指专门有特殊用途的类型
- phantomData
幻影类型 一般用于UnsafeRust的安全抽象 - Pin
固定类型 为了支持异步开发而特意引进,防止被引用的值发生移动的类型