每种语言最终都编译成低级计算机语言?

nev*_*ame 7 compiler-construction performance interpreter

是不是每种语言都编译成低级计算机语言?

如果是这样,所有语言都不应该具有相同的性能吗?

就是想...

Nor*_*sey 15

正如其他人所指出的,并非每种语言都被翻译成机器语言; 一些被翻译成某种形式(字节码,反向波兰语,AST)被解释.

但即使在翻译成机器代码的语言中,

  • 有些翻译比其他翻译好
  • 某些语言功能比其他语言功能更易于转换为高性能代码

GCC C编译器是一个比其他翻译器更好的翻译器的例子.它拥有多年的工作投入产生良好的代码,它的翻译胜过那些简单的编译器lcctcc等.

很难转换为高性能代码的功能的一个例子是C能够进行指针运算和解引用指针:当程序通过指针存储时,编译器很难知道哪些内存位置受到影响.类似地,当调用未知函数时,编译器必须对堆上分配的对象内容可能发生的情况做出非常悲观的假设.在像Java这样的语言中,编译器可以更好地完成转换,因为类型系统强制在不同类型的指针之间进行更大的分离.在像ML或Haskell这样的语言中,编译器可以做得更好,因为在这些语言中,大多数在内存分配的数据都不能通过函数调用进行更改.但是,面向对象的语言和功能语言当然会带来自己的翻译挑战.

最后,图灵完备语言的翻译本身就是一个难题:一般来说,找到程序的最佳翻译是NP难问题,这意味着已知的唯一解决方案可能需要时间指数的程序大小.这在编译器中是不可接受的(不能永远等待编译几千行),因此编译器使用启发式算法.这些启发式方法总有改进的余地.


Omn*_*ous 14

将某些语言映射到机器语言比其他语言更容易和更有效.对于这一点我没有简单的比喻.我最接近的是将意大利语翻译成西班牙语,将Khoisan语言翻译成夏威夷语.

另一个类比是说"嗯,物理定律决定了每只动物的运动方式,那么为什么有些动物比其他动物移动得更快?它们不应该只以相同的速度移动吗?"