实时编译器和解释器之间有什么区别?

实时编译器和解释器之间有什么区别,.NET 和 Java JIT 编译器之间有什么区别吗?


答案 1

我总是发现,一个更抽象的解释有时会有所帮助。假设您正在尝试询问墨西哥的每个人“您好。你好吗?(您的源语言)当然,您首先需要将其翻译成西班牙语(该国的母语)。这个翻译将是“Hola。科莫·埃斯塔斯?

如果您懂西班牙语,则无需翻译(本机代码/汇编程序)。你只要问“霍拉。科莫·埃斯塔斯?

如果您不懂西班牙语,有3种方法可以处理它。

首先是获取西班牙语词典(编译器),并在您出发之前查找西班牙语单词。也许你意识到“霍拉。Que tal?“是一个音节的缩写(编译器优化),并用它来代替。这是语言编译;您正在事先将信息转换为母语。

第二个是当你站在第一个人称面前时,你在西班牙语词典中查找单词,然后存储结果(及时查找单词)。这里的优点是,你可以得到一本普通话词典,然后在中国做同样的实验,而不必保留十个翻译短语的便笺(不同平台的二进制文件)。

第三个是当你站在每个人面前时,你查找单词的地方。从本质上讲,你分别解释每个人的单词(你充当解释者)。这里的优点是,任何更改都会立即反映在下一个人身上(您可以更改为询问“你好。你的狗是什么颜色的?“而不必飞回家并重新开始 - 你不需要重新编译短语)。

  • 事先翻译意味着你可以最快地询问人们(预编译);您甚至不需要随身携带字典。
  • 当您在每个国家/地区看到第一个人时进行翻译几乎与事先翻译一样快,但仍然允许您前往多个国家/地区而无需回家获取字典,但意味着您需要随身携带几本字典(独立于平台的运行时)。
  • 按需翻译要慢得多,但允许您在不回家的情况下更改单词(源分布式语言)。

答案 2

实时编译是在执行非本机代码(例如字节码)之前将其转换为本机代码。

来自维基百科:

JIT 建立在运行时环境中的两个早期想法之上:字节码编译和动态编译。它在本机执行之前在运行时转换代码,例如字节码转换为本机机器代码。

解释器执行程序。它可能会有也可能没有抖动。

同样,来自维基百科:

解释器可以是一个程序,或者

  1. 直接执行源代码
  2. 将源代码转换为一些有效的中间表示(代码),并立即执行此
  3. 显式执行由编译器创建的存储的预编译代码,该编译器是解释器系统的一部分

标准 Java 和 .NET 发行版都有 JIT 编译,但标准不需要它。.NET 和 C# 中的 JIT 编译器当然是不同的,因为中间字节码是不同的。但原理是一样的。


推荐