作者解释了把 Rust 编译到 WebAssembly 时开启调试信息(debug info)会异常缓慢的根因:一个已知但修复不完整的 LLVM 缺陷。开启完整 DWARF 调试信息后,LLVM 会在中间表示中插入大量 DBG_VALUE 记录,而 WebAssembly 是栈式机器,指令需要大量搬运,每个移动的指令都必须同步移动或更新其调试记录。一个 40 行的复现程序在开启调试信息后要 50 秒才能编译完,而不开只要 1.5 秒,某些 crate(如 ed25519-compact)的差距可达约 40 倍。
DBG_VALUE 记录会大量膨胀,重内联函数可产生数十万条。ed25519-compact 等 crate 造成约 40 倍的编译变慢,且影响所有 Rust-to-WASM 代码。