来自C++ 中的思考 - 卷。1:
口译员有很多优点。从编写代码到执行代码的转换几乎是立即的,并且源代码始终可用,因此当发生错误时解释器可以更加具体。
粗线是什么意思?
这是否意味着除非整个程序都在内存中,否则解释器无法工作?这意味着我们不能将程序划分为模块,然后在需要时解释模块(就像我们对编译器所做的那样)?
如果是,那么这背后的原因是什么?
更新:
来自C++ 中的思考 - 卷。1:
大多数解释器要求将完整的源代码一次全部带入解释器。
那么,这是否表明我在上面写的内容?
来自C++ 中的思考 - 卷。1:
口译员有很多优点。从编写代码到执行代码的转换几乎是立即的,并且源代码始终可用,因此当发生错误时解释器可以更加具体。
粗线是什么意思?
这是否意味着除非整个程序都在内存中,否则解释器无法工作?这意味着我们不能将程序划分为模块,然后在需要时解释模块(就像我们对编译器所做的那样)?
如果是,那么这背后的原因是什么?
来自C++ 中的思考 - 卷。1:
大多数解释器要求将完整的源代码一次全部带入解释器。
那么,这是否表明我在上面写的内容?
对于编译语言,当你运行程序时,你没有源代码——你已经编译了机器/字节码,它在机器上执行(或者在 Java 的情况下是 VM)。
解释器处理源代码并立即解释它并使用某种内部机制执行它。由于他们的工作数据是源代码本身,因此他们始终可以使用。
这是否意味着除非整个程序都在内存中,否则解释器无法工作?
不,整个程序不需要在内存中。零件在需要时被加载到内存中。
意味着我们不能将程序分成模块,然后在需要时解释模块(就像我们对编译器所做的那样)?
你可以很好地模块化你的程序。但是当解释器需要时,所需的模块应该可用。
和粗线:源代码始终可用
这意味着它是运行的源代码,即在运行时转换为机器特定指令。逐行转换,而无需转换为不同的(中间)格式。(由编译器完成)
来自维基百科:
解释器可以是使用以下策略之一执行程序的程序:
- 直接执行源代码
- 将源代码转换为一些有效的中间表示(代码)并立即执行
- 显式执行由编译器生成的存储的预编译代码1,该编译器是解释器系统的一部分
效率
解释器的主要缺点是,当程序被解释时,它的运行速度通常比编译时慢。速度差异可能很小或很大;通常是一个数量级,有时甚至更多。在解释器下运行程序通常比运行已编译的代码需要更长的时间,但解释它所花费的时间可能比编译和运行它所需的总时间要少。当编辑-解释-调试周期通常比编辑-编译-运行-调试周期短得多时,这在原型设计和测试代码时尤其重要。