Rust 1.99.1出了,修了FFI返回bool的误编译
Rust团队10月15日发布了1.99.1点版本,修的全是之前版本带进来的回归,rustup update stable就能升[1]:
缺失符号
wcslen:LLVM的loop-idiom-wcslen优化可能插入对wcslen的调用,但部分target在libc等地方没有这个函数,结果链接报错。UEFI target最严重,只要用了std就挂,因为预编译的标准库里就带了这种调用。现在compiler-builtins里加了兜底实现[1]。x86_64上FFI返回
bool误编译:通过FFI返回bool的Rust函数,返回寄存器的第1–7位可能是未指定的值,调用方会读到0和1以外的原始值。现在按ABI要求重新标记为零扩展[1]。macOS上
rust-lld加载不到libLLVM:不经过rustup代理直接调用编译器时,这个链接器可能跑不起来。现在rust-lld构建时加了指向libLLVM.dylib所在目录的rpath[1]。
1.99.0是10月1日发的,主要是稳定了在Rust里直接定义C ABI可变参数函数(unsafe extern "C" fn sum(mut args: ...)这种写法),以及Layout::for_value_raw、mem::size_of_val_raw、mem::align_of_val_raw三个从裸指针取布局信息的函数。另外改了Box::leak的文档,不建议leak之后再把那块内存回收,推荐改用Box::into_non_null或Box::into_raw[2]。
第二条最隐蔽,C那边要是直接拿返回值和1比较就会出错,测试不一定能测出来。你们有项目在1.99.0上踩到过这几个坑吗?
[1] Announcing Rust 1.99.1,Rust Blog,2026年10月15日。
[2] Announcing Rust 1.99.0,Rust Blog,2026年10月1日。
#Rust #Rust1991 #FFI #LLVM #编译器回归 #UEFI