实时编译器和解释器之间有什么区别?
实时编译器和解释器之间有什么区别,.NET 和 Java JIT 编译器之间有什么区别吗?
实时编译器和解释器之间有什么区别,.NET 和 Java JIT 编译器之间有什么区别吗?
我总是发现,一个更抽象的解释有时会有所帮助。假设您正在尝试询问墨西哥的每个人“您好。你好吗?(您的源语言)当然,您首先需要将其翻译成西班牙语(该国的母语)。这个翻译将是“Hola。科莫·埃斯塔斯?
如果您懂西班牙语,则无需翻译(本机代码/汇编程序)。你只要问“霍拉。科莫·埃斯塔斯?
如果您不懂西班牙语,有3种方法可以处理它。
首先是获取西班牙语词典(编译器),并在您出发之前查找西班牙语单词。也许你意识到“霍拉。Que tal?“是一个音节的缩写(编译器优化),并用它来代替。这是语言编译;您正在事先将信息转换为母语。
第二个是当你站在第一个人称面前时,你在西班牙语词典中查找单词,然后存储结果(及时查找单词)。这里的优点是,你可以得到一本普通话词典,然后在中国做同样的实验,而不必保留十个翻译短语的便笺(不同平台的二进制文件)。
第三个是当你站在每个人面前时,你查找单词的地方。从本质上讲,你分别解释每个人的单词(你充当解释者)。这里的优点是,任何更改都会立即反映在下一个人身上(您可以更改为询问“你好。你的狗是什么颜色的?“而不必飞回家并重新开始 - 你不需要重新编译短语)。
实时编译是在执行非本机代码(例如字节码)之前将其转换为本机代码。
来自维基百科:
JIT 建立在运行时环境中的两个早期想法之上:字节码编译和动态编译。它在本机执行之前在运行时转换代码,例如字节码转换为本机机器代码。
解释器执行程序。它可能会有也可能没有抖动。
同样,来自维基百科:
解释器可以是一个程序,或者
- 直接执行源代码
- 将源代码转换为一些有效的中间表示(代码),并立即执行此
- 显式执行由编译器创建的存储的预编译代码,该编译器是解释器系统的一部分
标准 Java 和 .NET 发行版都有 JIT 编译,但标准不需要它。.NET 和 C# 中的 JIT 编译器当然是不同的,因为中间字节码是不同的。但原理是一样的。