为了账号安全,请及时绑定邮箱和手机立即绑定

编译语言与口译语言

编译语言与口译语言

慕沐林林 2019-08-14 16:26:16
编译语言与口译语言我正在努力更好地理解这种差异。我在网上找到了很多解释,但它们倾向于抽象的差异而不是实际的含义。我的大部分编程经验都是CPython(动态,解释)和Java(静态,编译)。但是,据我所知,还有其他类型的解释和编译语言。除了可执行文件可以从编译语言编写的程序中分发之外,每种类型都有任何优点/缺点吗?通常,我听到有人认为解释性语言可以交互使用,但我相信编译语言也可以有交互式实现,对吗?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

编译语言是程序一旦编译就在目标机器的指令中表达的语言。例如,源代码中的附加“+”操作可以直接转换为机器代码中的“ADD”指令。

一种解释语言是其中所述指令不被目标机器直接执行,而是读取和执行通过一些其它方案(其通常写入本机机器的语言)。例如,解释器在运行时将识别相同的“+”操作,然后将使用适当的参数调用其自己的“add(a,b)”函数,然后执行机器代码“ADD”指令。

您可以使用编译语言以解释语言执行任何操作,反之亦然 - 它们都是图灵完备的。然而,两者都具有实施和使用的优点和缺点。

我将完全概括(纯粹主义者原谅我!)但是,粗略地说,以下是编译语言的优点:

  • 通过直接使用目标计算机的本机代码来提高性能

  • 有机会在编译阶段应用非常强大的优化

以下是解释语言的优点:

  • 更容易实现(编写好的编译器非常困难!!)

  • 无需运行编译阶段:可以“动态”直接执行代码

  • 动态语言可以更方便

请注意,现代技术(如字节码编译)会增加一些额外的复杂性 - 这里发生的是编译器针对的是与底层硬件不同的“虚拟机”。然后可以在稍后阶段再次编译这些虚拟机指令以获得本机代码(例如,由Java JVM JIT编译器完成)。


查看完整回答
反对 回复 2019-08-14
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

从过去开始思考:爆炸

曾几何时,很久很久以前,那里住着计算机翻译和编译器。随着一个人的优点,各种各样的烦恼随之而来。普遍的观点在当时是沿着线的东西:

  • 口译员:快速开发(编辑和运行)。执行起来很慢,因为每次执行时都必须将每个语句解释为机器代码(想想这对循环执行数千次的意义)。

  • 编译器:开发缓慢(编辑,编译,链接和运行。编译/链接步骤可能需要很长时间)。快速执行。整个程序已经在本机机器代码中。

解释程序和编译程序之间存在一个或两个数量级的运行时性能差异。其他区别点,例如代码的运行时可变性,也有一些兴趣,但主要区别在于运行时性能问题。

今天,景观已发展到如此程度,以至于编译/解释的区别几乎无关紧要。许多编译语言都会调用不完全基于机器代码的运行时服务。此外,大多数解释语言在执行之前被“编译”为字节码。字节码解释器可以非常高效,并且从执行速度的角度来看,它可以与一些编译器生成的代码相媲美。

经典的区别在于编译器使用某种运行时系统生成本机机器代码,解释器读取源代码并生成机器代码。今天很少有经典的解释器 - 几乎所有解释器都编译成字节码(或其他一些半编译状态),然后在虚拟“机器”上运行。


查看完整回答
反对 回复 2019-08-14
  • 3 回答
  • 0 关注
  • 502 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信