Eric J...
5
这是一个广泛的问题.
从根本上说,编译语言就像ASM一样被翻译成机器指令(操作码)(ASM也是一个抽象层).一个好的编译器实际上可能超出平均ASM编码器的结果,因为它可以检查大量代码并应用大多数程序员无法手动完成的优化规则(订购最佳执行指令等).
在这方面,所有编译语言都是"平等的".但是,有些人比其他人更平等.编译代码的执行情况从根本上取决于编译器的优异程度,更不用说特定语言了.某些功能(如虚拟方法)会导致性能下降(上次我检查虚拟方法是使用函数指针表实现的,尽管我的知识可能已在此处注明日期).
解释语言在程序执行时从根本上检查人类可读的语言,基本上需要在程序运行时期间等同于编译和执行阶段.因此,它们几乎总是比编译的对应物慢一些.智能实现将递增地解释执行的代码部分(以避免解释从未命中的分支),并缓存结果,以便给定的代码部分仅被解释一次.
还有一个中间立场,其中人类可读的语言被翻译成伪代码(有时称为P代码或字节代码).这样做的目的是使代码的紧凑表示能够快速解释,并且可以在许多操作系统中移植(您仍然需要一个程序来解释每个平台上的P代码).Java属于这一类.