变量是标识符(ID);
一切皆有类型。
Rust 语言是强类型语言,所有变量都对应存在一个类型值。
静态sized类型
对于 Rust 编译器而言,所有类型必须是静态sized类型。
- 实现
Sizedtrait的类型(编译时已知使用内存大小的类型);- Sized trait 是 std::marker 模块中的四大特殊 trait 之一;
动态sized类型(DST)
绝大多数情况下,Rust 编译器认为类型必须具有静态已知的Size大小,但是并不总是这样。
有一类特殊的类型:动态sized类型(DST),DST类型不是 Rust 一等公民类型,必须通过指针实例化。
- 动态sized类型:仅在运行时知道的sized大小的类型、简称DST (dynamically sized type);
- 动态sized类型有:
str、Slices 、 trait objects、最后一个字段是动态sized类型的结构体; - 指向动态sized类型的指针是胖指针(占用的内存大小是和常规指针的两倍);
- trait 对象是实现指定trait的类型,trait 对象必须通过胖指针标记,trait 对象的胖指针包含一个指向trait对象的常规指针和一个
vtable Pointer,vtable Pointer代表trait 对象的运行时sized;- 切片( slice ) 是数据视图,比如是某个数组或
Vec中的部分或全部数据的视图。切片( slice ) 同样需要胖指针,切片( slice )的胖指针包含切片指针(slice pointer)和辅助信息指针(视图中数据元素个数);