【问题标题】:Compiler and Interpreter on memory efficiency内存效率的编译器和解释器
【发布时间】:2017-05-02 07:12:05
【问题描述】:

我正在理解编译器和解释器的概念。我在互联网上对其进行了研究,但发现有两种说法趋于矛盾: 有人说——解释器不涉及中间代码,因此内存效率高。

https://www.programiz.com/article/difference-compiler-interpreter

other 是说:解释器从输入中读取一条语句,将其转换为中间代码,执行它,然后按顺序获取下一条语句。 https://www.tutorialspoint.com/compiler_design/compiler_design_overview.htm

谁能告诉我哪个是正确的,哪个是内存效率高的?

【问题讨论】:

    标签: interpreter


    【解决方案1】:

    编写解释器的方法有很多种。提到的两个选项都是可能的,但有不同的权衡。

    【讨论】:

      【解决方案2】:

      简短的回答是,这两篇文章都不对。对于解释器是什么,两者都有一个非常狭隘的(老式的?)概念,对应于我们可能称之为“命令处理器”的东西。此外,这两篇文章都不是自洽的,因此试图解决他们的分歧可能是浪费时间。

      也就是说,当 programiz 引用说“没有生成中间目标代码,因此内存效率很高”时,我认为它的意思(使用它的术语)是解释器确实翻译了一个语句转换成中间代码(注意“图:解释器”包括一个标有“中间代码”的框),但是:

      1. 该代码不是 object 代码。
      2. 执行该代码后,它会丢弃它,因此它在内存中一次不会有多个语句的代码。
      3. 解释器不生成目标代码作为输出。

      鉴于这样的阅读,两篇文章或多或少是一致的。

      但即使考虑到“解释器”的狭义定义,仅仅因为它一次在内存中最多保存一个语句的中间代码而说它是“内存高效”的,也会忽略解释器本身占用的所有内存。

      此外,请注意,这只能谈论解释器本身的内存效率,而谈论它运行的任何程序的内存效率。

      简而言之:忘记那些文章。 Wikipedia's article 似乎是一个不错的起点。

      【讨论】:

      • 是的,你是对的。我没有注意到那个翻译的身影。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多