Python的另外几种语言实现
python自身作为一门编程语言,它有多种实现。这里的实现指的是符合python语言规范的python解释程序以及标准库等。这些实现虽然实现的是同一种语言,但是彼此之间,特别是与cpython之间还是有些差别的。
下面分别列出几个主要的实现。
1.cpython:这是python的官方版本,使用c语言实现,使用最为广泛,新的语言特性一般也最先出现在这里。
cpython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在python虚拟机上。
2.jython:这是python的java实现,相比于cpython,它与java语言之间的互操作性要远远高于cpython和c语言之间的互操作性。
在python中可以直接使用java代码库,这使得使用python可以方便地为java程序写测试代码,更进一步,可以在python中使用swing等图形库编写gui程序。
jython会将python代码动态编译成java字节码,然后在jvm上运行转换后的程序,这意味着此时python程序与java程序没有区别,只是源代码不一样。
在python 中写一个类,像使用java 类一样使用这个类是很容易的事情。
你甚至可以把jython 脚本静态地编译为java 字节码。
示例代码:
from java.lang import system system.out.write('hello world!\n')
3.python for .net:它实质上是cpython实现的.net托管版本,它与.net库和程序代码有很好的互操作性。
4.ironpython:不同于python for .net,它是python的c#实现,并且它将python代码编译成c#中间代码(与jython类似),然后运行,它与.net语言的互操作性也非常好。
5.pypy:python的python实现版本,原理是这样的,pypy运行在cpython(或者其它实现)之上,用户程序运行在pypy之上。它的一个目标是成为python语言自身的试验场,因为可以很容易地修改pypy解释器的实现(因为它是使用python写的)。
6.stackless:cpython的一个局限就是每个python函数调用都会产生一个c函数调用。 这意味着同时产生的函数调用是有限制的,因此python难以实现用户级的线程库和复杂递归应用。一旦超越这个限制,程序就会崩溃。stackless的python实现突破了这个限制,一个c栈帧可以拥有任意数量的python栈帧。这样你就能够拥有几乎无穷的函数调用,并能支持巨大数量的线程。stackless唯一的问题就是它要对现有的cpython解释器做重大修改。所以它几乎是一个独立的分支。另一个名为greenlets的项目也支持微线程。它是一个标准的c扩展,因此不需要对标准python解释器做任何修改。