nev*_*ame 7 compiler-construction performance interpreter
是不是每种语言都编译成低级计算机语言?
如果是这样,所有语言都不应该具有相同的性能吗?
就是想...
Nor*_*sey 15
正如其他人所指出的,并非每种语言都被翻译成机器语言; 一些被翻译成某种形式(字节码,反向波兰语,AST)被解释.
但即使在翻译成机器代码的语言中,
GCC C编译器是一个比其他翻译器更好的翻译器的例子.它拥有多年的工作投入产生良好的代码,它的翻译胜过那些简单的编译器lcc和tcc等.
很难转换为高性能代码的功能的一个例子是C能够进行指针运算和解引用指针:当程序通过指针存储时,编译器很难知道哪些内存位置受到影响.类似地,当调用未知函数时,编译器必须对堆上分配的对象内容可能发生的情况做出非常悲观的假设.在像Java这样的语言中,编译器可以更好地完成转换,因为类型系统强制在不同类型的指针之间进行更大的分离.在像ML或Haskell这样的语言中,编译器可以做得更好,因为在这些语言中,大多数在内存中分配的数据都不能通过函数调用进行更改.但是,面向对象的语言和功能语言当然会带来自己的翻译挑战.
最后,图灵完备语言的翻译本身就是一个难题:一般来说,找到程序的最佳翻译是NP难问题,这意味着已知的唯一解决方案可能需要时间指数的程序大小.这在编译器中是不可接受的(不能永远等待编译几千行),因此编译器使用启发式算法.这些启发式方法总有改进的余地.
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |