用途:提供 Rust 类型系统的基础概念地图,说明类型如何被识别、在内存中布局、被优化与组合。适合在决定使用 #[repr(C)]、PhantomData、NonZero* 或 never 类型 ! 之前阅读。
主要能力:涵盖名义类型(按名称而非形状区分,如 Meters(f64) 与 Seconds(f64) 不同)、零大小类型(()、PhantomData<T>、struct Unit; 占 0 字节,用于标记类型、类型状态、零运行时成本编码信息)、repr 属性(默认 repr(Rust) 由编译器选择布局;repr(C) 用于 FFI;repr(transparent) 用于单非 ZST 字段的 newtype;repr(packed(N)) 危险,禁用填充;repr(align(N)) 强制对齐;枚举 repr(u8) 等稳定判别值)、niche 优化(Option<NonZeroU32> 为 4 字节,Option<&T> 为指针大小)、never 类型 !(空类型,可强制转换为任意类型)、类型状态模式(PhantomData<State> 在编译期编码状态)、const 泛型(<const N: usize>)。
使用方式:资料给出决策树与代码模式,例如判断是否跨 FFI 边界选择 repr;判断结构体签名含未存储的泛型参数 T 时使用 PhantomData;判断内部类型是否有无效位模式以确定 niche 优化是否适用。示例包括名义类型单位安全、ZST 标记、repr(transparent) FFI newtype、niche 优化句柄、never 类型发散函数、类型状态构建器、const 泛型矩阵。
适用场景:纯 Rust 代码布局优化、FFI 边界结构体、网络/二进制协议、固定大小 API、编译期状态约束。
限制:repr(packed(N)) 危险,禁止对字段取引用;char 始终 4 字节,不可与 UTF-8 字节混淆;edition 2024 中 never 类型回退行为改变,需显式类型标注迁移;复杂 const 表达式如 N + M 需 generic_const_exprs 特性,仍不稳定。资料未提供收费、价格、平台或效果信息。