编程语言的速度是否取决于编译器



我正在尝试学习计算机程序的工作原理并提出这个问题。我经常读到诸如"C/C++比Java更快"或"Java和C#:速度比较"之类的文章。在所有情况下,用任何语言编写的程序都会被翻译成汇编语言。那么,这些语言的速度差异的原因是什么。这是否意味着,一种语言的编译器生成更好更快的汇编代码?

有点。

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

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

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

语言被设计成做不同的事情。

例如,PHP被设计为在Web服务器上使用,没有人会尝试使用它来创建顶级fps游戏。不同的语言更适合不同的任务,并且在某些领域会比其他领域更快。

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

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

此外,C/C++ 甚至不必编译为汇编。例如,enscriptem最终会将C/C++编译为Javascript,以便它可以在Web浏览器上运行。

编译器不是魔法。

它们是程序,

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

编译器/解释器优化是一个正在进行的研究和研究领域。

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


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

编译器和解释器不是所有编程语言之间恒定的单一神奇过程 - 它们都是不同的,有不同的优点和缺点,并且一直处于不断变化的状态。

最新更新