python可以跨平台的原因:源码跨平台;Python指令最终会转换成c语言指令集,然后c语言的指令集再进行编译为机器码,最后运行。跨平台都是有限的:1、不能有windows特殊的东西;2、编码方式要兼容。
跨平台概念是软件开发中一个重要的概念,即不依赖于操作系统,也不依赖硬件环境。
一个操作系统下开发的应用,放到另一个操作系统下依然可以运行。相对而言如果某种计算机语言不用修改代码即可做到高度跨平台,那么此语言就越抽象,硬件控制力就越低,只适合开发高度抽象的模型系统。诸如java,delphi和易语言、Python,都已做到了跨平台。它们将可以在多种系统下开发,运行和维护。
大部分电脑语言从绝对意义而言,都是跨平台的:因为都是以高级的、人类可读的方式来对CPU发号指令,这样也就没必要依赖于任何作业系统。但如果要用系统的部件工具箱,来新建用户图形界面(GUI),就可能会用到开发员特定系统中的API函数或库类。虽然C++是跨平台的,但Windows下用到Win32 API的C++程式,一般就不能在Unix机器上编译。不同编译器对语言规范的解释也有所差异。这样的话,在针对不同系统进行构建之前,程式就得加以考虑。
一些如Java这样的语言,从一开始就意识到要在各个平台下运行,所以跨平台在其平台的本地语言环境中已经实现。例如,Java可以跨平台使用,正是由于Swing库在许多平台下的实现。类似的,能进行跨平台的文件存取,是因为有各自平台下文件存取的库。以此类推,各种跨平台问题,都需要各自的本地库来解决。wxWidgets框架就是这样的一个跨平台库,根据不同的跨平台问题,提供了许多不同的解决方案;类似的库有许多,可以根据不同语言的跨平台开发,而采用相应的库。
针对每种作业系统、CPU,而提供并测试各自的编译版本,这种做法的可行性很小;开源软体则允许用户自己来编译目的码(object code),这样在跨平台方面更好一些。类似的,那些解释型语言,或者需要虚拟机的语言,也更加符合跨平台的要求,因为用户也要自己进行编译。Sun公司的Java虚拟机Hotspot,只针对几种而不是全部平台,提供编译好的二进位文件。例如,Sun对于GNU/Linux,只支持i386平台,但如果谁在PowerPC或者SPARC电脑上运行Linux,就只好自己编译本地的机器码(machinecode),或者使用第三方软体,才能运行Java程式。
许多API(应用程式介面)依赖于平台。OpenGL可以看作是跨平台的,因为其不依赖于任何特定的作业系统、CPU构架或者某个牌子的图形设备。特定平台的API可以在其他系统上作为兼容层而新建,例如WINE的库,Windows程式就可以在UNIX系统上运行。
另外许多程式语言还有跨平台的扩展以及中间件,这样程式设计师对于同样的原始码,只要进行一点小修改,就可以在不同平台下编译/运行,例如Qt和wxWidgets。
Python什么可以跨平台?
因为Python是将这些自己的指令,最终转换成了c语言指令集,然后再c语言的指令集再进行编译为机器码,然后运行,这也是为什么python的性能差的原因了(当然,有很多提速的办法)。
当然这也是有限制的:
1、不能有windows特殊的东西;
2、编码方式要兼容。
支持常见的主流平台,如AIX、HPUX、Solaris、Linux、Windows等,除Windows外常见的Unix、Linux平台均带有原生的Python,但版本一般较低。关于跨平台和他跨平台语言一样,要注意有些个别模块是单一平台特有的,整体的跨平台性还是很好的,不必为适应多平台写多套代码。
但这不是说一点限制都没有:首先,同一个版本的中间文件.py和.pyc以及.pyo是跨平台的;其次,PC与移动终端,如:手机、Pad不可跨平台(原因见下一条);最后,不能跨处理器构架,如:Intel与ARM,64位与32位。
以上就是python为什么跨平台的详细内容,更多请关注php中文网其它相关文章!