我正在努力更好地了解差异。我在网上找到了很多解释,但他们倾向于抽象的差异而不是实际的含义。
我的大部分编程经验都是使用 CPython(动态、解释)和 Java(静态、编译)。但是,我知道还有其他类型的解释和编译语言。除了可执行文件可以从用编译语言编写的程序中分发之外,每种类型有什么优点/缺点吗?我经常听到人们争辩说解释语言可以交互使用,但我相信编译语言也可以有交互实现,对吗?
编译型语言是一种程序,一旦编译,就会在目标机器的指令中表达。例如,源代码中的加法“+”操作可以直接转换为机器代码中的“ADD”指令。
解释语言是一种指令不直接由目标机器执行,而是由其他程序读取和执行的语言(通常是用 native 语言编写的)。例如,解释器会在运行时识别相同的“+”操作,然后使用适当的参数调用自己的“add(a,b)”函数,然后执行机器代码“ADD”指令.
你可以用编译语言做任何你可以用解释语言做的事情,反之亦然——它们都是图灵完备的。然而,两者在实现和使用方面各有利弊。
我将完全概括(纯粹主义者原谅我!)但是,大致来说,这是编译语言的优点:
- 直接使用目标机器的 native 代码,性能更快
- 在编译阶段应用非常强大的优化的机会
以下是解释型语言的优势:
- 更容易实现(编写好的编译器非常困难!!)
- 无需运行编译阶段:可以“即时”直接执行代码
- 对于动态语言可以更方便
请注意,字节码编译等现代技术增加了一些额外的复杂性 - 这里发生的情况是编译器针对的是与底层硬件不同的“虚拟机”。然后可以在稍后阶段再次编译这些虚拟机指令以获得 native 代码(例如,由 Java JVM JIT 编译器完成)。
我是一名优秀的程序员,十分优秀!