RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 671781
Accepted
bayah
bayah
Asked:2020-05-28 13:58:01 +0000 UTC2020-05-28 13:58:01 +0000 UTC 2020-05-28 13:58:01 +0000 UTC

编译器和解释器。有什么区别?

  • 772

是的是的。这是关于编译器和 PL 解释器之间区别的另一个问题。只有通常给出的答案不能让我满意。

通常他们说编译器将一些 PL 中的代码翻译成可执行代码,并且在执行时,代码立即由处理器直接执行。在解释器的情况下,在程序执行期间,一个特殊的程序,即解释器,逐行读取程序的源代码并执行它。一步步。同时,据说编译器还没有那么好写。

其实问题是这样的。如果结果执行了程序,那么当立即执行机器代码时本质上有什么区别,或者首先解释器对源代码执行某些操作,然后才执行它——结果,处理器执行相同的机器指令。那有什么区别呢?显然,不是编译器提前把机器码存到文件里,而是解释器没有)好吧,假设我理解用ifs解释程序时,有些部分永远无法执行,因此没有翻译成机器码代码。但是,同样,这可能不是问题所在,很难将所有 if-s 提前翻译成机器代码,即编译代码。

简而言之,与解释器相比,实现编译器的其他区别和复杂性是什么?

компилятор
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Arhadthedev
    2020-05-28T14:12:37Z2020-05-28T14:12:37Z

    有两个区别:

    1. 解释器不生成机器代码。相反,它为它解释的每个命令调用一个特殊函数(它是解释器代码的一部分),它完成所有工作。

      编译器(常规编译器和 JIT 编译器)首先生成机器代码,然后将其提供给处理器直接执行。

    2. 编译器一次完成所有工作(当程序被汇编时),而解释器每次读取下一条指令时都这样做。也就是说,在编译时,执行开销较小,因此最终代码的速度较高。

    现在关于编译器实现的复杂性。解释器简单地获取并执行下一个程序表达式;当它这样做时,它会立即忘记它(当然,在保存结果之后)。编译器被迫更全局地思考:有优化和实体的模块间导入/导出(毕竟,一个程序可以包含许多源代码文件)。此外,编译器必须遵守与其他工具(例如链接器)交互的某些约定和标准;解释器是一个“自成一体”的东西,它自己完成所有工作。

    • 3
  2. Pavel
    2020-05-28T14:25:46Z2020-05-28T14:25:46Z

    “编译器和解释器”不是一个正确的问题。事情完全不同了。编译器——将源代码转换为可执行文件(将由处理器执行的机器代码或将由虚拟执行环境执行的一些中间代码)。解释器执行源代码。看到不同?编译器转换(compiles),解释器执行(interprets)。也许您想以不同的方式提出问题:编译语言和解释语言之间的区别是什么。区别很明显:后者可以按原样执行,不需要额外的工具。好吧,总的来说,我会试着总结一下:最后,是的,最后我们改变了处理器的状态,一个真正的物理处理器,任何程序的执行都归结为这个。但也有区别:1)编译型语言需要特殊工具(编译器),最终产品受到部分保护,很难获得源代码,最终产品更紧凑,因为它由二进制指令组成,而不是人类可读的单词. 最终产品执行速度更快——因为它描述了目标平台直接支持的指令。2) 解释语言按原样执行——不需要额外的。用于达到最终状态的工具,不受保护-任何人都可以窃取和更改....我知道我写了显而易见的东西。我只是不明白你还想听什么。最终产品执行速度更快——因为它描述了目标平台直接支持的指令。2) 解释语言按原样执行——不需要额外的。用于达到最终状态的工具,不受保护-任何人都可以窃取和更改....我知道我写了显而易见的东西。我只是不明白你还想听什么。最终产品执行速度更快——因为它描述了目标平台直接支持的指令。2) 解释语言按原样执行——不需要额外的。用于达到最终状态的工具,不受保护-任何人都可以窃取和更改....我知道我写了显而易见的东西。我只是不明白你还想听什么。

    如果关于复杂性,那么编译器和解释器可能同样难以编写。如果语言很复杂,那么无论出于何种目的执行或编译,无论如何都很难将其解析为标记。好吧,只有在编译器总是有任务将指令转换为某种不是您发明的规范形式的那一刻

    • -1

相关问题

  • 解析树和抽象语法树有什么区别?

  • 编译器和解释器的区别

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5