编程语言的速度是否依赖于编译器?

时间:2013-09-17 16:56:16

标签: performance compiler-construction compilation programming-languages

我正在努力学习计算机程序是如何工作的并且有这个问题。我经常阅读“C / C ++比java更快”或“Java和C#:速度比较”等文章。在任何情况下,用任何语言编写的程序都会转换为汇编语言。那么,这些语言速度差异的原因是什么呢?这是否意味着,一种语言的编译器会生成更好,更快的汇编代码?

1 个答案:

答案 0 :(得分:3)

排序。

编译器/解释器/编程语言的速度差异有几个原因,其中一些与编译器有关,有些与语言本身有关。

某些编程语言需要更多开销。

如果您的语言水平很高,那么与C相比,它会有更多的开销,这是非常低的水平。 (垃圾收集就是一个很好的例子)。它成为一种权衡。我想要快速的二进制文件,还是希望能够轻松编写程序?

语言旨在做不同的事情。

例如,PHP旨在用于Web服务器,没有人会考虑使用它来创建顶级fps游戏。不同的语言更适合不同的任务,在某些领域比其他领域更快。

并非所有语言都编译为汇编。

虽然C / C ++可以编译为汇编,但是出于互操作性的原因,Java等语言会编译为字节码并针对java虚拟机运行。再一次,这是一个权衡 - 你以牺牲开销为代价获得可移植性。

此外,C / C ++甚至没有来编译成程序集。例如,enscriptem最终会将C / C ++编译为Javascript,因此它可以在Web浏览器上运行。

编译器并不神奇。

它们是程序,并且像所有程序一样,都会出现错误,并会随着时间的推移而改善(或降级)。我可以尝试在周末编写一个C编译器,而且我敢打赌一百万美元,它会比你能想到的最慢语言的编译器/解释器差几个数量级。

编译器/解释器优化是一个持续的研究和研究领域。

每年,研究人员都在编写和发表论文,以一种新的方式编译并使程序运行得更快。如果某种语言较新,则可能还没有时间完全应用所有可用的优化。 (往上看)。某些优化可能仅适用于一种编译器/解释器。


因此,总而言之,语言的速度是语言本身的内在特征以及所使用的编译器/解释器/平台的成熟度的混合。

编译器和解释器并不是所有编程语言之间不变的单一神奇过程 - 它们各不相同,有不同的利弊,并且一直处于不断变化的状态。