当前位置 : 主页 > 网络安全 > 测试自动化 >

将所有东西都放在主要位置有任何性能劣势吗?

来源:互联网 收集:自由互联 发布时间:2021-06-22
在Rust中,看起来你基本上可以放任何东西.特征,实现块,函数,静态变量…… 例如,这编译: fn main() { trait Foo { fn foo(); } impl Foo for f64 { fn foo() {} } struct MyStruct; enum RustIsCool { MyStruct, }; fn bar
在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!");
}

如您所见,您甚至可以将这些内容嵌套在其他块中.

显然,从风格的角度来看这样做很糟糕;它很丑陋,难以重构,并且使代码重用更加困难.

但我很好奇:这样做有任何性能开销吗?或者Rust编译器是否优化了差异?

简短的回答:没有什么重要的会有所不同.

如果您查看your code on playground的LLVM-IR并将其与code where all of your definitions are outside of main()进行比较,您会发现在“调试”模式下没有差异(除了命名).在“发布”模式下,根本没有任何差异.

但是,测试代码的位置肯定可能会影响代码生成.但这些都是次要影响.没有什么基础可以影响代码生成(例如,如果main中的定义将隐含引用main的变量).

可能影响代码生成的一些原因:

>由于main()中的定义不能在main()之外使用,因此如果可能的话,这可能是对内联函数调用的强烈提示并删除原始定义.这通常会提高性能.> rustc生成略有不同的LLVM-IR,因此LLVM理论上可以生成不同的代码(蝴蝶效应)> ……

网友评论