前言

每个程序都是一组指令,无论是添加两个数字还是通过互联网发送请求。编译器和解释器将人类可读的代码转换为计算机可读的机器代码。

对于编译型语言,目标计算机以编译语言直接翻译程序。而对于解释型语言,源代码不会直接由目标计算机翻译,而是由 另一个 程序(即解释器)读取并执行代码。

好吧...那么这到底是什么意思呢?

想象你要制作一个鹰嘴豆泥食谱,但是它是用古希腊语写的。你不会讲古希腊语言,你可以通过两种方式遵循其指示。首先是有人已经为你翻译成英文,你(以及其他会说英语的人)可以阅读食谱的英语版本,做鹰嘴豆泥。那么翻译的配方就是 编译版本。第二种方法是,如果你有一位了解古希腊语的朋友,当你准备制作鹰嘴豆泥时,你的朋友会坐在你的旁边,将菜谱逐行翻译成英语。在这种情况下,你的朋友是食谱 解释版本 的解释者。

编译型语言

编译语言直接转换为处理器可以执行的机器代码。结果,它们会比解释语言更快更高效地执行。 它们还使开发人员可以更好地控制硬件方面,例如内存管理和 CPU 使用率。

编译语言需要一个“构建”步骤——首先需要手动对其进行编译。每次需要进行更改时,你都需要“重建”程序。在鹰嘴豆泥示例中,整个编译是在呈现给你之前进行的。如果原始作者决定他要使用其他种类的橄榄油,则需要重新翻译整个食谱并重新发送给你。

纯编译语言的示例是 C,C ++,Erlang,Haskell,Rust 和 Go。

解释型语言

翻译员逐行执行程序的每个命令。在这里,如果作者决定使用其他种类的橄榄油,则可以将旧的橄榄油划掉,然后添加新的橄榄油。然后,你的翻译朋友可以随时将更改传达给你。

解释型语言曾经比编译型语言慢很多。但是,随着即时编译的发展,这种差距正在缩小。

常见的解释语言的示例是 PHP,Ruby,Python 和 JavaScript。

一个小提醒

大多数编程语言可以同时具有编译和解释的实现——语言本身不一定是编译或解释的。但是,为简单起见,通常将其简称为某一类。

例如,Python 可以在交互模式下作为编译程序或解释语言执行。另一方面,大多数命令行工具,CLI 和 shells 在理论上可以归类为解释语言。

优势和劣势

编译型语言的优势

编译为本地机器代码的程序往往比解释的代码要快。这是因为在运行时翻译代码的过程增加了开销,并可能导致程序整体变慢。

编译型语言的劣势

最突出的两点劣势是:

  • 在测试之前完成整个编译步骤需要额外的时间
  • 生成的二进制代码对平台的依赖性

解释型语言的优势

解释型语言更加灵活,并且通常具有诸如动态键入和程序较小的特点。另外,由于解释器自己执行源程序代码,因此代码本身相对于平台是独立的。

解释型语言的劣势

与编译型语言相比,其最明显的缺点在于执行速度。

原文:Interpreted vs Compiled Programming Languages: What's the Difference