兼容性与限制
运算溢出
i32 的四则运算默认自动溢出,也就是直接映射到原生的运算节点,不做溢出检查。i32::MAX + 1回绕成i32::MIN,不 panic- 就算你把溢出检查打开也没用 —— 溢出对应的
assert在编译期被后端直接丢掉了(编译时会看到Ignored assert提示)
checked_* / saturating_* 的地方要自己判。整数除法
- 除数为
0时触发错误,结果得到0 i32::MIN / -1等于0(在普通 Rust 里这会溢出 panic)
扁平化局部变量
fn 返回 (f32, f32),在图上就是两个输出引脚,而不是一个「元组」类型的引脚。内部可变性
Cell 等内部可变性。将来可能会支持 RcRefCell 和 RcUnsafeCell,目前没有。&mut 借用(见下)。可变借用
&mut 只支持两种目标:整体借一个标量局部变量(i32、句柄之类),或者借元组的某个元素。Only local singleton can be ref mut。结构体字段的可变借用(&mut p.a)也还没实现。let mut i = 1;
let r = &mut i; // 可以
let mut v = (1, 2);
let r = &mut v.0; // 可以:借元素
let r = &mut v; // 不行:借整个元组let mut pair = (1, 2);
pair.0 = 10;&mut 消掉,让整体借用元组「侥幸」编过 —— 换了写法就会崩,别依赖。)