编译语言与解释语言

2024-04-19 04:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

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

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

你可以在编译语言中用解释语言做任何事情,反之亦然——它们都是图灵完成的。但是,这两种方法在实现和使用方面都有优缺点。

我要完全概括(纯粹主义者原谅我!)但是,大致上,编译语言的优点如下:

  • 通过直接使用目标计算机的本机代码提高性能
  • 在编译阶段应用强大优化的机会

以下是口译语言的优点:

  • 更容易实现(编写好的编译器非常困难!!)
  • 无需运行编译阶段:可以“动态”直接执行代码
  • 可以更方便地使用动态语言

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

从过去的爆炸开始思考

很久以前,有一次,在计算机领域 翻译和编译。各种各样的纷争接踵而至 一个接一个。当时的普遍看法是:

  • 解释器:快速开发(编辑和运行)。执行缓慢,因为每个语句都必须解释为 每次执行时的机器代码(想想这对执行数千次的循环意味着什么)。
  • 编译器:开发缓慢(编辑、编译、链接和运行)。编译/链接步骤可能需要很长时间)。快 执行。整个程序已经在本机代码中了。

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

今天,景观演变到这样的程度,即编译/解释的区别 几乎毫不相干。许多 编译语言调用运行时服务 完全基于机器代码。而且,大多数解释语言都被“编译”成字节码 处决前。字节码解释器非常有效,可以与某些编译器生成的 从执行速度的角度看代码。

典型的区别是编译器生成本机代码,解释器读取源代码和 使用某种运行时系统动态生成机器代码。 今天只剩下很少的经典口译员了——几乎都是 编译成字节码(或其他半编译状态),然后在虚拟“机器”上运行。

语言本身既不编译也不解释,只有语言的特定实现才是。Java是一个完美的例子。有一个基于字节码的平台(JVM)、一个本地编译器(gcj)和一个Java超集(bsh)的interpeter。那么Java现在是什么呢?字节码编译、本机编译或解释?

其他编译和解释的语言是Scala、Haskell或Ocaml。每种语言都有一个交互式的解释器,以及字节码或本机代码的编译器。

因此,通常按“编译”和“解释”对语言进行分类没有多大意义。

相关问题 更多 >