hkk*_*hkk 4 optimization performance program-entry-point rust
在Rust中,看起来你基本上可以放任何东西.特征,实现块,函数,静态变量......
例如,这编译:
fn main() {
trait Foo {
fn foo();
}
impl Foo for f64 {
fn foo() {}
}
struct MyStruct;
enum RustIsCool {
MyStruct,
};
fn bar() {
trait Baz {
fn baz();
}
impl Baz for f64 {
fn baz() {}
}
}
static x: f64 = 10.0;
println!("This compiles!");
}
Run Code Online (Sandbox Code Playgroud)
如您所见,您甚至可以将这些内容嵌套在其他块中.
显然,从风格的角度来看这样做很糟糕; 它很丑陋,难以重构,并且使代码重用更加困难.
但我很好奇:这样做有任何性能开销吗?或者Rust编译器是否优化了差异?
简短的回答:没有什么重要的会有所不同.
如果您在操场上查看LLVM-IR 代码并将其与您所有定义都在其中的代码main()进行比较,您会发现"调试"模式下没有差异(除了命名).在"发布"模式下,根本没有任何差异.
但是,测试代码的位置肯定可能会影响代码生成.但这些都是次要影响.没有什么基础可以影响代码生成(例如,如果定义main将隐含引用main的变量).
可能影响代码生成的一些原因:
main()不能在外部使用main()定义,因此如果可能的话,这可能是内联函数调用这些内容并删除原始定义的强烈提示.这通常会提高性能.rustc 生成略有不同的LLVM-IR,因此LLVM理论上可以生成不同的代码(蝴蝶效应)