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