- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
跟进 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
最佳答案
首先,我认为比较两个极其简单的程序的编译时间并期望结果更普遍地代表两种语言之间的编译时间没有多大意义。
也就是说,我确实希望 Rust 作为一种语言,它提供了更高级语言更常见的抽象级别,几乎没有运行时性能成本,在编译时必须在某种程度上为此付出代价。
此节选自the Rust FAQ :
Rust compilation seems slow. Why is that?
Code translation and optimizations. Rust provides high levelabstractions that compile down into efficient machine code, and thosetranslations take time to run, especially when optimizing.
But Rust’s compilation time is not as bad as it may seem, and there isreason to believe it will improve. When comparing projects of similarsize between C++ and Rust, compilation time of the entire project isgenerally believed to be comparable. The common perception that Rustcompilation is slow is in large part due to the differences in thecompilation model between C++ and Rust: C++’s compilation unit is thefile, while Rust’s is the crate, composed of many files. Thus, duringdevelopment, modifying a single C++ file can result in much lessrecompilation than in Rust. There is a major effort underway torefactor the compiler to introduce incremental compilation, which willprovide Rust the compile time benefits of C++’s model.
Aside from the compilation model, there are several other aspects ofRust’s language design and compiler implementation that affectcompile-time performance.
First, Rust has a moderately-complex type system, and must spend anon-negligible amount of compile time enforcing the constraints thatmake Rust safe at runtime.
Secondly, the Rust compiler suffers from long-standing technical debt,and notably generates poor-quality LLVM IR which LLVM must spend time“fixing”. There is hope that future MIR-based optimization andtranslation passes will ease the burden the Rust compiler places onLLVM.
Thirdly, Rust’s use of LLVM for code generation is a double-edgedsword: while it enables Rust to have world-class runtime performance,LLVM is a large framework that is not focused on compile-timeperformance, particularly when working with poor-quality inputs.
Finally, while Rust’s preferred strategy of monomorphising generics(ala C++) produces fast code, it demands that significantly more codebe generated than other translation strategies. Rust programmers canuse trait objects to trade away this code bloat by using dynamicdispatch instead.
关于rust - 为什么 Rust 编译一个简单的程序比 gcc/clang 慢 5-10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362640/
我有一个用 C 编写的多线程合并排序程序,以及一个使用 0、1、2 或 4 个线程对其进行基准测试的程序。我还用 Python 编写了一个程序来进行多项测试并汇总结果。 奇怪的是,当我运行 Pytho
这个问题在这里已经有了答案: Why is my Rust program slower than the equivalent Java program? (1 个回答) 关闭 5 年前。 我用
关于编译为 JavaScript 的语言的开发,我也在考虑以 C++ 为目标,以便在需要时生成更快的程序。我的计划是使用 std::vectors 来保存我的语言的动态数组。重复填充一个大数组将是一个
今天,我正在阅读一些用 FORTRAN 77 编写的非常流行的数值库中的代码,例如 QUADPACK ( last updated in 1987 ),我想知道除了大量的代码之外,是否有任何理由不在
我的 Java 程序目前遇到了一个奇怪的行为: 该程序是一个 JavaFX 桌面应用程序,它使用本地 Selenium 独立服务器打开 Web 应用程序,进行一些输入并下载 Excel 文件。它读取
我为我已经完成并提交的 OS 类作业写了这篇文章。我昨天发布了这个问题,但由于“学术诚信”规定,我在提交截止日期之后才将其取消。 目标是学习如何使用临界区。有一个 data 数组,其中包含 100 个
我查看了 Rust 程序使用了多少 RAM(top 命令的 RES 列),我想知道为什么它们使用这么多内存。 这是一个例子: use std::io; fn main() { println!
我是一名优秀的程序员,十分优秀!