我正在努力学习计算机程序是如何工作的并且有这个问题。我经常阅读“C / C ++比java更快”或“Java和C#:速度比较”等文章。在任何情况下,用任何语言编写的程序都会转换为汇编语言。那么,这些语言速度差异的原因是什么呢?这是否意味着,一种语言的编译器会生成更好,更快的汇编代码?
答案 0 :(得分:3)
排序。
编译器/解释器/编程语言的速度差异有几个原因,其中一些与编译器有关,有些与语言本身有关。
如果您的语言水平很高,那么与C相比,它会有更多的开销,这是非常低的水平。 (垃圾收集就是一个很好的例子)。它成为一种权衡。我想要快速的二进制文件,还是希望能够轻松编写程序?
例如,PHP旨在用于Web服务器,没有人会考虑使用它来创建顶级fps游戏。不同的语言更适合不同的任务,在某些领域比其他领域更快。
虽然C / C ++可以编译为汇编,但是出于互操作性的原因,Java等语言会编译为字节码并针对java虚拟机运行。再一次,这是一个权衡 - 你以牺牲开销为代价获得可移植性。
此外,C / C ++甚至没有来编译成程序集。例如,enscriptem最终会将C / C ++编译为Javascript,因此它可以在Web浏览器上运行。
它们是程序,并且像所有程序一样,都会出现错误,并会随着时间的推移而改善(或降级)。我可以尝试在周末编写一个C编译器,而且我敢打赌一百万美元,它会比你能想到的最慢语言的编译器/解释器差几个数量级。
每年,研究人员都在编写和发表论文,以一种新的方式编译并使程序运行得更快。如果某种语言较新,则可能还没有时间完全应用所有可用的优化。 (往上看)。某些优化可能仅适用于一种编译器/解释器。
因此,总而言之,语言的速度是语言本身的内在特征以及所使用的编译器/解释器/平台的成熟度的混合。
编译器和解释器并不是所有编程语言之间不变的单一神奇过程 - 它们各不相同,有不同的利弊,并且一直处于不断变化的状态。