2.3 执行模块的变种
在继续学习之前,应该指出前一节所介绍的内部执行流程反映了如今Python 的标准实现形式,并且这实际上并不是Python 语言本身所必需的。正是因为这一点,执行模块也在随时间而演变。事实上,从某种意义上讲有些系统已经改进了图2-2 所描述的情况。让我们花些时间探索一下这些变化中最显著的改进吧。
2.3.1 Python 实现的替代者
事实上,在编写本书的过程中,Python 语言有三种主要实现方式(CPython 、Jython 和IronPython )以及一些次要的实现方式,例如,Stackless Python 。简要地说,CPython 是标准的实现;其他的都是有特定的目标和角色的。所有的这些都用来实现Python 语言,只是通过不同的形式执行程序而已。
CPython
和Python 的其他两种实现方式相比,原始的、标准的Python 实现方式通常称作CPython 。这个名字根据它是由可移植的ANSI C 语言代码编写而成的这个事实而来的。这就是你从http://www.python.org 获取的、从ActivePython 分发包中得到的以及从绝大多数Linux 和Mac OS X 机器上自动安装的Python 。如果你在机器上发现有个预安装版本的Python, 那么很有可能就是CPython ,除非公司将Python 用在相当特别的场合。
除非希望使用Python 脚本化Java 或.NET ,你或许想要使用的就是标准的CPython 系统。因为CPython 是这门语言的参照实现方式,所以和其他的替代系统相比来说,它运行速度最快、最完整而且也最健全。图2-2 反映了CPython 的运行体系结构。
Jython
Jython 系统(最初称为JPython )是一种Python 语言的替代实现方式,其目的是为了与Java 编程语言集成。Jython 包含了Java 类,这些类编译Python 源代码、形成Java 字节码,并将得到的字节码映射到Java 虚拟机(JVM )上。程序员仍然可以像平常一样,在文本文件中编写Python 语句;Jython 系统的本质是将图2-2 中的最右边两个方框中的内容替换为基于Java 的等效实现。
Jython 的目标是让Python 代码能够脚本化Java 应用程序,就好像CPython 允许Python 脚本化C和C++ 组件一样。它实现了与Java 的无缝集成。因为Python 代码被翻译成Java 字节码,在运行时看起来就像一个真正的Java 程序一样。Jython 脚本可以应用于开发Web applet 和servlet ,建立基于Java 的GUI 。此外,Jython 具有集成支持的功能,允许导入Python 代码或使用Java 的类(这些类就像是用Python 编写的一样)。因为Jython 要比CPython 慢而且也不够健壮,它往往被看作是一个主要面向寻找Java 代码前端脚本语言的Java 开发者的一个有趣的工具。
IronPython
Python 的第三种(截止到目前写本书时,从某种程度上来讲,Python 的第三种实现方式仍然是新的)实现方式IronPython ,设计它的目的是让Python 程序可以与Windows 平台上的.NET 框架以及与之对应的Linux 的上开源的Mono 编写成的应用相集成。本着像微软早期的COM 模型一样的精神,将.NET 和C# 程序语言的运行系统设计成与语言无关性的对象通信层。IronPython 允许Python 程序既可以用作客户端也可以用作服务器端的组件,还可以与其他.NET 的语言进行通信。
在实现上,IronPython 很像Jython (实际上两者都是由同一个创始人开发的):它替换了图2-2 中***的两个方框,将其换成.NET 环境的等效执行方式。并且,就像Jython 一样,IronPython 有特定的目标:它主要为了满足在.NET 组件中集成Python 的开发者。因为它是由微软公司开发的,IronPython 也许能够为了性能实现完成一些重要的优化工具。IronPython 涉及到的应用范围就像本书所写的那样;如果想了解更多细节,请参考Python 的线上资源,或者在网络上搜索相关内容(注2)。
【责任编辑:董书 TEL:(010)68476606】
点赞 0