一般来说,编译就是将一种高级语言转换成CPU可以执行的机器码。这正是你在编译 C 时所做的。编译的结果是一个二进制可执行文件,此时你的系统可以直接运行该程序。
相比之下,解释的意思是这样的:每次程序运行时,都会读取源文件中的一行代码,并进行相应的操作,只是逐行重复。当然,这就是所谓的脚本语言的工作原理。
在 Python 中,源代码被编译成我们称为字节码的低级形式。字节码是一系列指令,类似于 CPU 的指令集。但是字节码并不是直接由CPU执行的,而是在虚拟机中执行的。当然,这里的虚拟机并没有模仿整个操作系统的环境,只是提供了字节码执行的环境。
Python 的另一个重要特性是交互式命令行。你可以键入一行 Python 语句并按 Enter 立即执行它们。事实上,即使在这个过程中,Python也是先转换成字节码,然后再执行。而交互式命令行的这个特性在很多编译语言中是没有的。也因为没有显式调用编译器,所以很多人把执行Python源文件的程序称为Python解释器。
解释型语言和编译型语言
计算机无法识别高级语言,所以当我们运行高级语言程序时,需要一个“翻译器”来从事将高级语言转换为计算机可以理解的机器语言的过程。这个过程分为两类,第一类是编译,第二类是解释。
在程序执行之前,编译语言会先通过编译器对程序进行一次编译过程,将程序转换为机器语言。运行时不需要翻译,直接执行即可。最典型的例子就是C语言。
解释型语言没有这个编译过程,而是在程序运行时,解释器逐行解释程序,然后直接运行。最典型的例子就是Ruby。
通过上面的例子,我们可以总结出解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序进行了“翻译”,所以运行时的“翻译”就少了。 》的过程,所以效率是比较高的。但是我们不能一概而论。有些解释型语言在翻译程序的时候也可以通过解释器的优化来优化整个程序,让效率接近编译型语言, 但不能超过编译语言。
另外,随着Java等基于虚拟机的语言的兴起,我们不能单纯地将语言分为解释型语言和编译型语言。
以Java为例,Java首先通过编译器编译成字节码文件,然后在运行时通过解释器解释成机器文件。所以我们说Java是一种先编译后解释的语言。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python2.7 64位中下载setuptools?11/27
- ♥ 如何在python中查看对象的属性11/20
- ♥ python类的继承链分析11/25
- ♥ python的函数体是什么09/28
- ♥ 如何在python中创建数据库08/30
- ♥ 如何在python中创建一个包?09/16
内容反馈