羊小圈

专注开发技术的圈子

编译器和中间语言实现平台兼容的区别

2020/09/30

一款编程语言兼容底层系统的方式大致可分为两种。

1、通过编译器实现兼容

例如C、C++等变成语言,技能运行于Linux操作系统,也能运行于Windows操作系统;技能运行于x86平台,也能运行于AMD平台。这种能力并不是编程语言本身所具有的,而是编译器所赋予的。针对不同的硬件平台和操作系统,开发特定的编译器,编译器能够将同样一段C/C++程序翻译成与目标平台匹配的机器指令,从而实现编程语言的兼容性。

2、通过中间语言实现兼容

Java、C#等语言,都属于这种兼容方式。

Java/C#程序被编译后,生成中间语言(IL),中间语言指令由虚拟机负责解释和运行。虚拟机在运行期将中间语言实时翻译成与特定底层平台匹配的机器指令并运行。无论程序最终运行在哪种底层平台上,源代码被翻译生成的中间语言指令都是相同的,中间语言的兼容性由虚拟机负责完成。

通过编译器实现兼容性,由于源代码被直接编译成了本地机器指令,因此其执行效率非常高。而这正是中间语言的软肋。Java语言刚问世那几年,就一致因为其性能低下而被嗤之以鼻。但是随着Java语言版本的不断更新,随着大家对改善其性能所做出的持之以恒的努力,如今Java性能已经相当高,甚至比C/C++程序性能还要高。这是因为Java虚拟机内部对寄存器进行了大量手工优化,在某些场景下,人工优化自然会比C/C++编译器所做的机器优化效果要好很多。

扫码关注艺术哲学经典

精彩热评

暂无评论

留下评论

发表评论

© 2020 羊小圈 · 京ICP备17012925号