4

来自C++ 中的思考 - 卷。1

口译员有很多优点。从编写代码到执行代码的转换几乎是立即的,并且源代码始终可用,因此当发生错误时解释器可以更加具体。

粗线是什么意思?
这是否意味着除非整个程序都在内存中,否则解释器无法工作?这意味着我们不能将程序划分为模块,然后在需要时解释模块(就像我们对编译器所做的那样)?

如果是,那么这背后的原因是什么?


更新:

来自C++ 中的思考 - 卷。1

大多数解释器要求将完整的源代码一次全部带入解释器。

那么,这是否表明我在上面写的内容?

在此处输入图像描述

4

2 回答 2

2

对于编译语言,当你运行程序时,你没有源代码——你已经编译了机器/字节码,它在机器上执行(或者在 Java 的情况下是 VM)。

解释器处理源代码并立即解释它并使用某种内部机制执行它。由于他们的工作数据是源代码本身,因此他们始终可以使用。

于 2012-12-26T07:05:16.487 回答
2

这是否意味着除非整个程序都在内存中,否则解释器无法工作?

不,整个程序不需要在内存中。零件在需要时被加载到内存中。

意味着我们不能将程序分成模块,然后在需要时解释模块(就像我们对编译器所做的那样)?

你可以很好地模块化你的程序。但是当解释器需要时,所需的模块应该可用。

和粗线:源代码始终可用

这意味着它是运行的源代码,即在运行时转换为机器特定指令。逐行转换,而无需转换为不同的(中间)格式。(由编译器完成)

来自维基百科:

解释器可以是使用以下策略之一执行程序的程序:

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

效率

解释器的主要缺点是,当程序被解释时,它的运行速度通常比编译时慢。速度差异可能很小或很大;通常是一个数量级,有时甚至更多。在解释器下运行程序通常比运行已编译的代码需要更长的时间,但解释它所花费的时间可能比编译和运行它所需的总时间要少。当编辑-解释-调试周期通常比编辑-编译-运行-调试周期短得多时,这在原型设计和测试代码时尤其重要。

于 2012-12-26T07:07:24.963 回答