第05期:编译型语言和解释型语言,该怎么选?选择不对、努力白费

文 | 面包超人

第05期:编译型语言和解释型语言,该怎么选?选择不对、努力白费

我们需要在运行之前,把源代码转换成机器码,共有两种主要的方法

① 编译型代码

② 解释型代码

幸运的是,这不是一个你需要担心的重要决定,因为大多数你将要处理的语言都会自然地落入这两者其中的一种,但是我们有必要知道它们二者之间的区别。

我们来假设一种简单的情况,假设只有你和我,你拿着你的电脑,我也拿着我的电脑,你要写一个你想让我运行的程序。你用一种编译型的语言,你写你的源代码,然后你还有一个叫做编译器的程序,编译器会遍历你的源代码,并创建一个单独的文件。该文件包含了机器码,你只需要把那个文件给我就可以,这个最终结果有时被称为可执行或可执行文件,因为我可以直接执行这个文件,我现在可以运行你的程序了,你留着你的源代码,而且我从来没见过你的源代码。

另一方面,使用解释型语言,你不需要预先编译源代码,你只要给我一份副本就可以了,所以当我想运行你的程序时,我需要我的机器来解释它。

解释器和编译器是不同的,解释器是动态的,我们可以把解释器看作是逐行查看源代码并当场处理代码,解释器不会将其保存为单独的机器码文件。

即使你不知道解释型语言是什么,其实你也早已用过了解释语言,无论何时你用JavaScript浏览网页时,即便你只是上网超过两分钟,这就是刚才正在发生的事情。JavaScript是通过网络发送给你的,与此同时还包含了一些其他文件,比如网页和图片,JavaScript被作为源代码发送到你的机器上,你的浏览器刚刚解释了JavaScript,所以浏览器可以运行这些代码。

那么哪一种是最好的呢? 解释型语言和编译型语言都有各自的优点和缺点的。

一、编译型代码的优点是:

① 一旦编译好,代码马上就可以运行了,你可以把它发送给100个,1000个或10万个不同的人,这都是没问题的。

② 编译型代码可以针对CPU进行优化,因此实际上速度可以更快,而且你不必将源代码发送给所有人,这可能是一件好事。

③ 然而,缺点是如果我在PC上编译它,可执行文件无法在Mac上运行,事实上,它甚至经常需要在同一平台上针对不同的CPU分别进行编译。

④ 每次你想测试程序的时候,你必须要编写代码来编译,这是一个附加的步骤!

二、使用解释型代码,最大的好处是:

① 我不关心另一端是什么机器,因为我们并不提供机器码,我们只是发送源代码,让另一方来处理它,因此,它可以更便携、更灵活地跨平台运行。

② 解释型代码在测试时也更容易一些,因为你只需编写源代码,然后运行源代码,让解释器负责转换它,没有中间的编译步骤。

③ 当出现错误时,调试会更容易一些,因为您总是可以访问所有源代码。

④ 然而,解释型代码也有它的缺点,因为运行该程序的人都必须在自己的机器上装好该语言的解释器

⑤ 解释型语言运行起来也可能更慢,因为每次运行程序时都必须解释它。

⑥ 源代码实际上是公开的,因为你将源代码发送给需要运行该程序的每个人。

因为编译语言和解释语言都有优点,所以还存在第三种方法,兼具解释型语言和编译型语言的优点,既不是编译模型 - 所有的工作都是在前面完成的,可能有点不灵活,也不是解释模型 - 所有的工作都是在接收端完成的,但可能会慢一点,更像是五五开一样。

首先,我们将其编译为一种称为中间语言的语言,这种语言可触及到机器代码所能达到的最远处,同时仍然可以跨平台移植,然后你把它分发出去,发给需要运行它的人,每个运行它的人都要完成最后一步,那就是把它放到他们电脑上的机器代码中,这有时称为即时编译或JIT编译,这种中间语言有时也被称为字节码。

虽然理论上所有的计算机语言都可以使用这些方法中的任何一种,但任何一种语言的正常使用都倾向于其中一种方式,而不是另一种方式,例如,C、 C++、 Objective-C,这些通常都是编译语言,所以你需要一个编译器。编译器可以免费下载,但编译器通常内置在集成开发环境应用程序中,像PHP和JavaScript这样的语言,实际上大多数末尾带有单词script的语言通常都是可以被解释的;像Java、C#和VB这样的语言也是如此,.NET和Python使用这种中间混合方法。

第05期:编译型语言和解释型语言,该怎么选?选择不对、努力白费

无论一种语言是编译型的,还是解释型的,还是介于两者之间的,这本身就几乎不是你选择一种语言的理由,但它会是你要考虑的一些因素。

那么到底我们该选择编译型语言呢,还是该选择解释型语言呢?

① 如果你的程序的一个主要优先级是在单个平台上运行的绝对最高速度,那么您可能得去了解一下编译型语言。

② 如果您对跨多个平台轻松移植代码更感兴趣,那么您可能对解释型代码更感兴趣。

但通常情况下,你更多的是被你需要做的事情所驱动,比如您需要构建iPhone应用程序或Windows桌面应用程序或动态网站,或者,就像我们本课程,我们的目的只是学习编程的基础知识。那么请带着你的决定,然后让这个决定去驱动语言选择。而目的选择将决定你是要选择编译型语言、解释型语言还是介于两者之间。


分享到:


相關文章: