我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。
我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以具有交互实现,对吗?
最佳答案
编译语言是一种程序,一旦编译,该程序就会在目标计算机的指令中表示出来。例如,源代码中的加号“+”操作可以直接转换为机器代码中的“ADD”指令。
解释语言是指指令不是由目标机器直接执行,而是由其他程序(通常以 native 机器的语言编写)读取和执行的一种语言。例如,解释器将在运行时识别相同的“+”操作,然后使用适当的参数调用其自己的“add(a,b)”函数,然后执行机器代码“ADD”指令。
您可以使用解释语言或编译语言来做任何事情,反之亦然-它们都是图灵完整的。然而,两者在实现和使用上都有优点和缺点。
我将完全概括(纯粹主义者请原谅!),但是,粗略地讲,这是编译语言的优点:
以下是解释语言的优点:
请注意,诸如字节码编译之类的现代技术增加了一些额外的复杂性-此处发生的是,编译器针对的是与底层硬件不同的“虚拟机”。然后可以在稍后的阶段再次编译这些虚拟机指令以获取 native 代码(例如,由Java JVM JIT编译器完成)。