【发布时间】:2016-05-21 11:59:13
【问题描述】:
跟进Rust minimal compiled program size。
rustc hello.rs
> 600 ms
为什么rustc 编译一个简单的 Hello World 比 gcc/clang 慢 5-10 倍?
Rust 使用 LLVM,因此它应该与 clang 相当。无论如何,我们谈论的是一个只有三行代码的程序。
rustc hello.rs -C opt-level=0 -C prefer-dynamic
> 400 ms
gcc hello.c
> 60 ms
clang hello.c
> 110 ms
【问题讨论】:
-
我猜是类型检查和借用检查。另请注意,
println!会扩展为一些非常复杂的代码,这与 C 的printf不同,后者是一个简单的函数调用。 -
@kennytm, 500 ms 对一行代码进行类型检查?
-
查看this 讨论并查看此compilation times 移植到Rust 的C++ 程序。
-
您可以通过将
-Z time-passes传递给编译器来检查编译器的每次传递需要多长时间。经验表明你会发现大部分时间都花在了后端(翻译到 LLVM IR、LLVM 的优化和代码生成、链接)。 -
单个数据点几乎无关紧要,尤其是考虑到很少有实际程序只有一行代码。对多个同类项目执行相同的分析。一个 10KLOC 程序在两者中编译需要多长时间?然后,您可以开始讨论编译时的开销(如果有的话)是否会妨碍程序员在其他地方的时间,例如在调试中(请参阅之前所有关于“编写和运行测试的时间太长”的讨论以获取类似的论点)。
标签: rust