为什么Rust编译一个比gcc / clang慢5-10倍的简单程序?

时间:2016-05-21 11:59:13

标签: rust

Rust minimal compiled program size的后续行动。

rustc hello.rs
> 600 ms

为什么rustc编译一个比gcc / clang慢5-10倍的简单Hello World?

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

1 个答案:

答案 0 :(得分:34)

首先,我认为比较两个非常简单的程序的编译时间并且期望结果更能代表两种语言之间的编译时间,这并不是很有意义。

尽管如此,我确实认为Rust是一种语言,它为更高级别的语言提供了更为常见的抽象级别,几乎没有运行时性能成本,在编译时需要在某种程度上为此付出代价。 / p>

摘录摘自the Rust FAQ

  

Rust编译似乎很慢。为什么?

     

代码翻译和优化。 Rust提供高水平   编译成高效机器代码的抽象,以及那些   翻译需要时间来运行,尤其是在优化时。

     

但是Rust的编译时间并没有看起来那么糟糕,而且还有   有理由相信它会有所改善。比较相似的项目时   C ++和Rust之间的大小,整个项目的编译时间是   一般认为具有可比性。 Rust的常见看法   编译很慢很大程度上是由于差异所致   C ++和Rust之间的编译模型:C ++的编译单元是   文件,而Rust是由许多文件组成的包。因此,期间   开发,修改单个C ++文件可以导致更少   重新编译比在Rust中。正在进行一项重大努力   重构编译器以引入增量编译,这将是   为Rust提供了C ++模型的编译时间优势。

     

除编译模型外,还有其他几个方面   Rust的语言设计和编译器实现会影响   编译时性能。

     

首先,Rust有一个中等复杂的类型系统,必须花费一个   不可忽略的编译时间强制执行约束   在运行时使Rust安全。

     

其次,Rust编译器遭受长期技术债务的困扰,   并且特别是生成质量差的LLVM IR,LLVM必须花费时间   “定影”。希望未来基于MIR的优化和   翻译过程将减轻Rust编译器所带来的负担   LLVM。

     

第三,Rust使用LLVM进行代码生成是一个双刃剑   剑:虽然它使Rust具有世界级的运行时性能,   LLVM是一个不专注于编译时的大型框架   表现,特别是在使用质量差的投入时。

     

最后,虽然Rust的首选策略是单态化泛型   (ala C ++)生成快速代码,它需要更多的代码   生成比其他翻译策略。 Rust程序员可以   使用trait对象通过使用动态来换掉这个代码膨胀   而是派遣。