【发布时间】:2021-08-04 10:01:47
【问题描述】:
我有代码:
const DEBUG_MODE: bool = false;
fn main() {
if DEBUG_MODE {
println!("In debug mode!");
}
println!("Normal code");
}
Rust 编译器是否会删除分支,使其与以下内容相同:
fn main() {
println!("Normal code");
}
编译出来的程序集输出会有什么不同吗?
在DEBUG_MODE 是true 的情况下,它是内联分支还是实际进行汇编检查?
如果我们有这样的函数:
fn debug_fn() {
if !DEBUG_MODE {
return;
}
println!("Some debug function");
}
如果DEBUG_MODE 是false,对它的所有调用会被优化掉还是仍然会有某种形式的开销?
【问题讨论】:
-
无论如何,我建议使用#[cfg] 属性:doc.rust-lang.org/rust-by-example/attribute/cfg.html
-
即使没有 MIR 级别的 const 传播,这也是 LLVM 很乐意做的事情。 MIR 级 const 传播主要是关于编译时性能,而不是运行时性能。
-
请注意,像这样使用
DEBUG常量并不是惯用的方式。#[cfg]是。使用常量强制代码必须在调试和发布模式下编译,即使它在发布模式下将不使用。
标签: rust