从编译和解释的角度看,Python语言属于编译性语言,从编译和解释角度来看,python是一种编译性语言
我们可以理解为开发者写的源代码是人类语言。但是对于计算机硬件(CPU)来说,源代码是看不懂的,根本无法执行。在程序实际运行之前,源代码必须被转换成二进制指令。
所谓二进制指令,也就是机器码,是CPU能够识别的硬件级“代码”。简单的硬件(比如古代的单片机)只能使用几十条指令,而强大的硬件(PC和智能手机)可以使用几百条或者几千条指令。
有些编程语言要求所有的源代码必须事先一次性转换成二进制指令,也就是一个可执行程序(。Windows下的exe)生成,如C语言、C、Golang、Pascal(Delphi)、汇编等。这种编程语言叫做编译语言,使用的转换工具叫做编译器。
有些编程语言是可以边执行边转换的,需要哪些源代码,不会生成可执行程序,比如Python、JavaScript、PHP、Shell、MATLAB等。这种编程语言叫做解释语言,使用的转换工具叫做解释器。
Java和C#是半编译半解释的语言。需要先把源代码转换成中间文件(字节码文件),然后把中间文件拿到虚拟机上执行。Java的初衷是兼顾跨平台时的执行效率;C#是后世优雅的电灯泡,但C#一直止步于Windows平台,在其他平台几乎无所作为。
编译语言对于编译语言来说,开发完成后,所有的源代码都需要转换成可执行程序,比如Windows下的exe文件,可执行程序中包含机器码。只要我们有一个可执行的程序,不需要重新编译就可以随时运行,也就是“编译一次,无限运行”。运行时只需要编译生成的可执行程序,不再需要源代码和编译器,编译后的语言就可以脱离开发环境运行了。但是编译语言不能跨平台,也就是不能在不同的操作系统之间随意切换。
编译语言在两个方面不能跨平台:
1)可执行程序不能跨平台。
可执行程序跨平台理解起来并不容易,因为不同的操作系统对可执行文件的内部结构要求完全不同,而且互不兼容。不能跨平台很自然,但能跨平台就很奇妙了。
比如不能把Windows下的可执行程序拿到Linux上,也不能把Linux下的可执行程序拿到Mac OS上(虽然都是类Unix系统)。
此外,同一操作系统的不同版本不一定兼容。例如,x64程序(Windows 64位程序)不能在x86平台(Windows 32位平台)上运行。但反之一般可行,因为64位Windows对32位程序有很好的兼容性。
2)源代码不能跨平台。
功能、类型、变量等。不同平台支持的可能不一样,在一个平台上写的源代码在另一个平台上无法编译。我们以C语言为例来说明。
【例1】在C语言中,如果要暂停程序,可以使用“睡眠”功能。Windows平台下这个函数是sleep(),Linux平台下这个函数是sleep(),首字母大小写不同。其次,sleep()的参数是毫秒,Sleep()的参数是秒,单位不一样。
以上两个原因导致使用暂停功能的C语言程序不能跨平台,除非在代码层面做兼容性处理,这样很麻烦。
【例2】虽然不同平台的C语言都支持long类型,但是不同平台的long的长度是不一样的。比如Windows 64位平台的long占用4个字节,Linux 64位平台的long占用8个字节。
我们在Linux 64位平台上写代码的时候,把0x2f1e4ad23赋给long类型的变量是没有问题的,但是这样的赋值会导致Windows平台上的数值溢出,使程序产生错误的运行结果。
解释性语言对于解释性语言来说,每次执行一个程序,都需要同时进行转换和执行。用什么源码会转换成机器码,不用的不会处理。每次执行程序可能会用到不同的函数,此时要转换的源代码也不同。
因为每次执行一个程序都需要重新转换源代码,所以解释性语言的执行效率天生就比编译语言低,甚至有一个数量级的差距。计算机的一些底层功能或关键算法一般都是用C/C实现的,而且只是在应用层面(比如网站开发、批处理、小工具等。)可以使用解释性语言。
在运行一门解释型语言时,我们总是需要源代码和解释器,所以它离不开开发环境。
当我们说“下载一个程序(软件)”时,不同类型的语言有不同的含义:
对于编译语言,我们下载的是可执行文件,源代码是作者保留的,所以编译语言的程序一般都是闭源的。对于解释性语言,我们下载所有的源代码。因为作者离不开源代码,所以解释性语言的程序一般都是开源的。与编译语言相比,解释语言几乎是跨平台的,“一次编写,到处运行”真的存在,而且无处不在。那么,为什么解释性语言可以更快呢?
这都要感谢翻译!
所谓跨平台,我们指的是跨平台的源代码,而不是跨平台的解释器。解释器用于将源代码转换成机器码。它是一个可执行程序,而且一定不能跨平台。
官员需要为不同的平台开发不同的解释器。这些解释器必须能够遵守相同的语法,识别相同的功能,并执行相同的功能。只有这样,同一代码在不同平台上的执行结果才能相同。
Python是一种典型的解释语言,所以运行Python程序需要解释器的支持。只要在不同的平台上安装不同的解释器,你的代码就可以随时运行,不用担心任何兼容性问题。真正做到了“写一次,到处跑”。
Python几乎支持所有常见平台,如Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC等。你写的Python代码不需要修改就可以在这些平台上正确运行。也就是说Python的可移植性很强。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。