可爱的 Python:JPython 和 Python for .NET内幕-1
 
- UID
- 1066743
|

可爱的 Python:JPython 和 Python for .NET内幕-1
尽管 Python 通常等同于CPython,但它的规范曾在其它地方实现过多次,包括在用于 Java 和 .NET的应用程序中。JPython 将 Python 源码编译成 Java 字节码,并提供了对Java 类的透明访问。Python for .NET是微软将要发布的交叉语言技术平台工作中的一个应用。在采访 MarkHammond、Finn Bock 和 Barry Warsaw 的过程中,我发现了有关 JPython和 Python for .NET 是如何开发的更多信息,以及为未来这些替代 Python实现进行了哪些准备。
Python for .NET由于在 PythonWin 环境和 PythonCOM 扩展方面出色的开发,Mark Hammond为广大 Python 程序员所熟知。出于我们钦佩 Mark的相同原因,微软也很看重他。他们决定在 Python for .NET的实现上向他求助。据 Mark 称,Python for .NET的工作版本应该很快就可得到,现在您应该已经可以从 ActiveState获得它的 alpha 或 beta 版(请参阅 )。
David Mertz :到底什么是 Python for .NET呢?我想我特别想知道的是 Python for .NET 与您自己对 CPython 的PythonWin 和 PythonCOM 扩展(它们似乎能够控制 Windows的内部)之间的关系是怎样的。
Mark Hammond :Python for .NET是一种编译器和运行时,它在微软的 .NET 平台上实现了 Python。.NET平台提供了一个运行时和元数据系统,它们设计成允许完整的语言互操作性,但要实现这一点,语言必须能在该运行时中使用。
例如,如果 Python 类是公用的以便 Visual Basic程序员能够继承它,Python 类就必须以 .NET 术语而不是以 CPython术语来实现和描述。
Python .NET 的优点只是可以与 .NET框架互操作。这里仍然有许多缺陷,主要由于实现还不成熟而导致。但这确实只是时间的问题。我们仍处于开发和调试的beta 阶段。
Mertz :您对现在的 Python for .NET 和 CPython之间不兼容性问题是怎么看的?
Hammond :是啊,大多数模块还没有被实现,所以现有以C 编写的模块还无法确切使用。如果您的目标不是 .NET框架,最好此时不要使用 Python .NET。
Mertz :不过,Python for .NET肯定有一些主要的优势,例如方便的语言间通信和多语言应用开发。但为什么您说比已经有的那些-- 例如 Python+C+SWIG 要好呢(当然是假设情况)。
Hammond :就 Python+C+SWIG目前的发展而言,应该是明显的。语言间调用永远不应该象使用Python+C+SWIG 那样困难。但 SWIG在许多其它方面是个了不起的产品。它揭开了 Python C扩展编写的神秘面纱,并仅将它归到困难的行列。
将 .NET 与 COM 或 Corba 进行比较更合理一些。COM 和 Corba都提供交叉语言调用“正适用”的解决方案,而不需要任何手工参与或编译。.NET将它更进了一步,并提供交叉语言继承和异常能力。这些优点非常类似于在Java 虚拟机下的多语言实现中发现的那些。
Mertz :Python for .NET 将 Python脚本编译成外部虚拟机的格式。对于 .NET VM 是否将支持 Stackless 和Vyper的某些外来特性,例如延续性、生成器、协同程序、尾递归或延缓求值,您认为会这样吗?
Hammond :是的,从理论上说它会。但微软 Beta协议的一些条款不允许我谈论有关性能的问题。 让我们将目标只定在核心Python 语言引用中定义的那些特性上。无用信息收集是继承的,就象在JPython 和 JVM 中的那样。
Mertz :接下来谈谈政策主题,您认为微软为什么正在进行Python for .NET 的开发工作呢?
Hammond :这样选择目标 .NET 的人就可使用 Python了。微软很早就确定要参与到 Python 和其它许多语言中,以确保他们的 VM确实是不懂语言也能够使用的。根据来自各种语言实现者的反馈意见,现在他们已经对他们的VM 做了大量更改。
Mertz :那么 Python for .NET的财务关系是怎样的?您付费给他们吗?或者他们付费给您?
Hammond :关于构建 Python for .NET,Greg Stein和我与微软签有合同。该合同的条款是机密的。但我基本上为ActiveState(Perl for .NET实现)工作。为完成移植,我希望他们最终能与微软签定类似的合同。
Mertz :这对于 Python for .NET附带的许可证条款方面意味着什么呢?
Hammond :它将附带 "(c) Microsoft"说明,但它一定是可免费使用的。
Mertz :我一直在担心微软会尝试使用与“采用、扩展、废除”策略类似的专用扩展和增强。换句话说,我恐怕 Python for .NET 无法长期对 Python 真正有利。
Hammond :如果 .NET成为一个很重要的力量,那么针对它的 Python 实现就有助于Python,与针对 JVM 的 JPython 有助于 Python一样。
JPython尽管 JPython 是一个真正面向社区的成果,但 Barry Warsaw 和 Finn Bock是当前两名最活跃的 JPython 开发者。不幸的是,JPython 最初的开发者Jim Hugunin不再从事其开发了。在我的网站上有关于该采访未作删节(技术性更强)的版本(请参阅 )。
David Mertz:究竟什么是 JPython?
BarryWarsaw:我将用标准的营销说法来回答这个问题。
JPython 是 Python 编程语言的 100% 纯 Java实现。它可以让用户将 Python 源代码编译成 Java 字节码,并在任何 Java虚拟机上运行产生的字节码。它是与 Java的最无缝最平滑的集成。您可以从 Python 访问所有 Java 库、构建Applet、与 Java Bean 集成以及从 Python 中的 Java类创建子类,反之亦然。JPython 类似于 Python 而不象Java,它可以交互使用;只需在提示上输入一些 JPython代码就能立刻看到结果。 用更简单的话来说,JPython 可以为任何一个您需要的 Java代码编写脚本,这样转换出的代码行数比原来要少上 2 到 10 倍。因为Python是动态输入的语言,所以可以更快速地开发错误更少的应用,并得到灵活得多的程序。
Mertz:有关 JPython 的开发是如何开始的呢?
Warsaw :JPython 是由 Jim Hugunin发明的,他现在为 Xerox PARC 的 Aspect Oriented Programming项目工作。我了解 Jim,他可能主要是对挑战感兴趣。Python领域中有许多人都认为这是不可实现的。Guido 自己就是一个怀疑论者。Jim证明他们都错了!
那么既然遇到挑战,为什么还要继续开发 JPython 呢?因为它是大多数Java 程序员不太了解的最有价值的 Java 工具。到目前为止!
Mertz:您认为是什么刺激了 JPython 的需求?
Warsaw :首先必须理解 JPython 不是 Java的竞争对手;而是对它的最好补充。Java是静态输入的编译语言。这确保了库的输入很安全并且执行速度更快。有一个现象很有趣,就是尽管它是字节码翻译的,但大多数人还是将Java 看作一个传统的“编写-编译-运行-编辑”的程序。当然,Java利用了软件世界的绝大部分,因此对于 Java 程序员有许多资源可用。
但相同的静态输入和传统的编程周期在人力资源方面增加了 Java应用开发的成本。Python 在这方面绝对胜出。因为 Python是一种小而简单的语言,所以非常易于掌握。大多数有经验的程序员可以在大约一天的时间内就学习到足够的Python 知识来提高生产力。Python的设计思想就是代码的读比写要多得多。因此 Python源代码易于在大型团体项目中共享。
但更重要的是,Python是非常高级的动态输入型语言。这表现在大大节约了执行任务所需的代码数量。因为使用Python所写的代码行数较少,可以写得更快,错误更少。对于快速应用开发这简直太棒了。
Python还提供一个交互式解释器,这意味着您可以坐在解释器提示,导入 Java代码,创建 Java类实例,进行方法调用等等,所有这些都是交互式的。这在训练程序员如何使用公司Java 库或者试验新 Java API 时是一种绝佳工具。
但以我拙见,所有程序员都应该备有 CPython 和 JPython。 |
|
|
|
|
|