编译语言与口译语言

编译语言与口译语言

我正在努力更好地理解这种差异。我在网上找到了很多解释,但它们倾向于抽象的差异而不是实际的含义。

我的大部分编程经验都是CPython(动态,解释)和Java(静态,编译)。但是,据我所知,还有其他类型的解释和编译语言。除了可执行文件可以从编译语言编写的程序中分发之外,每种类型都有任何优点/缺点吗?通常,我听到有人认为解释性语言可以交互使用,但我相信编译语言也可以有交互式实现,对吗?


慕沐林林
浏览 503回答 3
3回答

慕村225694

编译语言是程序一旦编译就在目标机器的指令中表达的语言。例如,源代码中的附加“+”操作可以直接转换为机器代码中的“ADD”指令。一种解释语言是其中所述指令不被目标机器直接执行,而是读取和执行通过一些其它方案(其通常被写入本机机器的语言)。例如,解释器在运行时将识别相同的“+”操作,然后将使用适当的参数调用其自己的“add(a,b)”函数,然后执行机器代码“ADD”指令。您可以使用编译语言以解释语言执行任何操作,反之亦然 - 它们都是图灵完备的。然而,两者都具有实施和使用的优点和缺点。我将完全概括(纯粹主义者原谅我!)但是,粗略地说,以下是编译语言的优点:通过直接使用目标计算机的本机代码来提高性能有机会在编译阶段应用非常强大的优化以下是解释语言的优点:更容易实现(编写好的编译器非常困难!!)无需运行编译阶段:可以“动态”直接执行代码动态语言可以更方便请注意,现代技术(如字节码编译)会增加一些额外的复杂性 - 这里发生的是编译器针对的是与底层硬件不同的“虚拟机”。然后可以在稍后阶段再次编译这些虚拟机指令以获得本机代码(例如,由Java JVM JIT编译器完成)。

明月笑刀无情

从过去开始思考:爆炸曾几何时,很久很久以前,那里住着计算机翻译和编译器。随着一个人的优点,各种各样的烦恼随之而来。普遍的观点在当时是沿着线的东西:口译员:快速开发(编辑和运行)。执行起来很慢,因为每次执行时都必须将每个语句解释为机器代码(想想这对循环执行数千次的意义)。编译器:开发缓慢(编辑,编译,链接和运行。编译/链接步骤可能需要很长时间)。快速执行。整个程序已经在本机机器代码中。解释程序和编译程序之间存在一个或两个数量级的运行时性能差异。其他区别点,例如代码的运行时可变性,也有一些兴趣,但主要区别在于运行时性能问题。今天,景观已发展到如此程度,以至于编译/解释的区别几乎无关紧要。许多编译语言都会调用不完全基于机器代码的运行时服务。此外,大多数解释语言在执行之前被“编译”为字节码。字节码解释器可以非常高效,并且从执行速度的角度来看,它可以与一些编译器生成的代码相媲美。经典的区别在于编译器使用某种运行时系统生成本机机器代码,解释器读取源代码并生成机器代码。今天很少有经典的解释器 - 几乎所有解释器都编译成字节码(或其他一些半编译状态),然后在虚拟“机器”上运行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Python