kha*_*vah 3 compiler-construction performance programming-languages compilation
我正在尝试了解计算机程序如何工作并有这个问题。我经常阅读诸如“C/C++比java更快”或“Java和C#:速度比较”之类的文章。在所有情况下,用任何语言编写的程序都会翻译为汇编语言。那么,这些语言的速度差异的原因是什么?这是否意味着一种语言的编译器可以生成更好更快的汇编代码?
有点。
编译器/解释器/编程语言之间的速度不同有几个原因,其中一些与编译器有关,另一些与语言本身有关。
如果您的语言级别非常高,那么与级别非常低的 C 语言相比,它的开销会更大。(垃圾收集就是一个很好的例子)。这成为一种权衡。我想要速度极快的二进制文件,还是想要能够轻松编写程序?
例如,PHP 被设计用于 Web 服务器,没有一个头脑正常的人会尝试使用它来创建顶级 fps 游戏。不同的语言更适合不同的任务,并且在某些领域会比其他领域更快。
虽然 C/C++ 可以编译为汇编语言,但出于互操作性的原因,Java 等语言却编译为字节码并针对 java 虚拟机运行。这又是一个权衡——你以牺牲开销为代价获得了可移植性。
此外,C/C++ 甚至不需要编译为汇编。例如,enscriptem 最终会将 C/C++ 编译为 Javascript,以便它可以在 Web 浏览器上运行。
它们是程序,就像所有程序一样,也有错误,并且会随着时间的推移而改进(或降级)。我可以在周末尝试编写一个 C 编译器,我敢打赌一百万美元,它的性能会比你能想到的最慢语言的编译器/解释器差几个数量级。
每年,研究人员都在撰写和发表关于编译和使程序运行得更快的新方法的论文。如果一种语言较新,它可能还没有时间完全应用所有可用的优化。(往上看)。某些优化可能仅适用于一种编译器/解释器。
因此,总而言之,语言的速度是语言本身的内在特征以及所使用的编译器/解释器/平台的成熟度的混合体。
编译器和解释器并不是所有编程语言之间不变的单一神奇过程——它们都是不同的,有不同的优点和缺点,并且不断处于变化的状态。
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |