我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。

我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以具有交互实现,对吗?

最佳答案

编译语言是一种程序,一旦编译,该程序就会在目标计算机的指令中表示出来。例如,源代码中的加号“+”操作可以直接转换为机器代码中的“ADD”指令。

解释语言是指指令不是由目标机器直接执行,而是由其他程序(通常以 native 机器的语言编写)读取和执行的一种语言。例如,解释器将在运行时识别相同的“+”操作,然后使用适当的参数调用其自己的“add(a,b)”函数,然后执行机器代码“ADD”指令。

您可以使用解释语言或编译语言来做任何事情,反之亦然-它们都是图灵完整的。然而,两者在实现和使用上都有优点和缺点。

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

  • 直接使用目标计算机
  • 的 native 代码来提高性能
  • 在编译阶段使用机会进行相当强大的优化

  • 以下是解释语言的优点:
  • 易于实现(编写好的编译器非常困难!)
  • 无需运行编译阶段:可以直接“即时”执行代码
  • 对于动态语言可以更方便

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

    07-26 08:23
    查看更多