RSS
热门关键字:
当前位置 : 主页>编程开发>Python>列表

可爱的 Python:JPython 和 Python for .NET内幕

来源:我要研发网 作者: 时间:1970-01-01 点击:



  David Mertz 采访了 JPython 和 Python for .NET 开发者 Mark Hammond、Finn Bock 和 Barry Warsaw。他从 Mark 那里了解到一些有关微软开发最新独家新闻内幕(当然所有内容都在保密合同限制内)并从 Finn 和 Barry 那里了解到有关 JPython 和他们将要发布 Jython 项目一些信息。 字串3

  尽管 Python 通常等同于 CPython,但它规范曾在其它地方实现过多次,包括在用于 Java 和 .NET 应用程序中。JPython 将 Python 源码编译成 Java 字节码,并提供了对 Java 类透明访问。Python for .NET 是微软将要发布交叉语言技术平台工作中一个应用。在采访 Mark Hammond、Finn Bock 和 Barry Warsaw 过程中,我发现了有关 JPython 和 Python for .NET 是如何开发更多信息,以及为未来这些替代 Python 实现进行了哪些准备。

字串2

  Python for .NET 字串9

  由于在 PythonWin 环境和 PythonCOM 扩展方面出色开发,Mark Hammond 为广大 Python 程序员所熟知。出于我们钦佩 Mark 相同原因,微软也很看重他。他们决定在 Python for .NET 实现上向他求助。据 Mark 称,Python for .NET 工作版本应该很快就可得到,现在您应该已经可以从 ActiveState 获得它 alpha 或 beta 版(请参阅 参考资料)。

字串7

  David Mertz :到底什么是 Python for .NET 呢?我想我特别想知道是 Python for .NET 与您自己对 CPython PythonWin 和 PythonCOM 扩展(它们似乎能够控制 Windows 内部)之间关系是怎样字串8

  Mark Hammond :Python for .NET 是一种编译器和运行时,它在微软 .NET 平台上实现了 Python。.NET 平台提供了一个运行时和元数据系统,它们设计成允许完整语言互操作性,但要实现这一点,语言必须能在该运行时中使用。

字串4

  例如,如果 Python 类是公用以便 Visual Basic 程序员能够继承它,Python 类就必须以 .NET 术语而不是以 CPython 术语来实现和描述。 字串6

  Python .NET 优点只是可以与 .NET 框架互操作。这里仍然有许多缺陷,主要由于实现还不成熟而导致。但这确实只是时间问题。我们仍处于开发和调试 beta 阶段。 字串1

  Mertz :您对现在 Python for .NET 和 CPython 之间不兼容性问题是怎么看字串7

  Hammond :是啊,大多数模块还没有被实现,所以现有以 C 编写模块还无法确切使用。如果您目标不是 .NET 框架,最此时不要使用 Python .NET。 字串8

  Mertz :不过,Python for .NET 肯定有一些主要优势,例如方便语言间通信和多语言应用开发。但为什么您说比已经有那些 -- 例如 Python C SWIG 要呢(当然是假设情况)。

字串4


字串4

  Hammond :就 Python C SWIG 目前发展而言,应该是明显。语言间调用永远不应该象使用 Python C SWIG 那样困难。但 SWIG 在许多其它方面是个了不起产品。它揭开了 Python C 扩展编写神秘面纱,并仅将它归到困难行列。

字串6

  将 .NET 与 COM 或 Corba 进行比较更合理一些。COM 和 Corba 都提供交叉语言调用“正适用”解决方案,而不需要任何手工参与或编译。.NET 将它更进了一步,并提供交叉语言继承和异常能力。这些优点非常类似于在 Java 虚拟机下多语言实现中发现那些。 字串1

  Mertz :Python for .NET 将 Python 脚本编译成外部虚拟机格式。对于 .NET VM 是否将支持 Stackless 和 Vyper 某些外来特性,例如延续性、生成器、协同程序、尾递归或延缓求值,您认为会这样吗?

字串6

  Hammond :是,从理论上说它会。但微软 Beta 协议一些条款不允许我谈论有关性能问题。 让我们将目标只定在核心 Python 语言引用中定义那些特性上。无用信息收集是继承,就象在 JPython 和 JVM 中那样。

字串6

  Mertz :接下来谈谈政策主题,您认为微软为什么正在进行 Python for .NET 开发工作呢? 字串9

  Hammond :这样选择目标 .NET 人就可使用 Python 了。微软很早就确定要参与到 Python 和其它许多语言中,以确保他们 VM 确实是不懂语言也能够使用。根据来自各种语言实现者反馈意见,现在他们已经对他们 VM 做了大量更改。 字串5

  Mertz :那么 Python for .NET 财务关系是怎样?您付费给他们吗?或者他们付费给您?

字串4

  Hammond :关于构建 Python for .NET,Greg Stein 和我与微软签有合同。该合同条款是机密。但我基本上为 ActiveState(Perl for .NET 实现)工作。为完成移植,我希望他们最终能与微软签定类似合同。

字串3

  Mertz :这对于 Python for .NET 附带许可证条款方面意味着什么呢?

字串6

  Hammond :它将附带 "(c) Microsoft" 说明,但它一定是可免费使用字串1

  Mertz :我一直在担心微软会尝试使用与“采用、扩展、废除”策略类似专用扩展和增强。换句话说,我恐怕 Python for .NET 无法长期对 Python 真正有利。

字串8

  Hammond :如果 .NET 成为一个很重要力量,那么针对它 Python 实现就有助于 Python,与针对 JVM JPython 有助于 Python一样。 字串9

  JPython 字串7

  尽管 JPython 是一个真正面向社区成果,但 Barry Warsaw 和 Finn Bock 是当前两名最活跃 JPython 开发者。不幸是,JPython 最初开发者 Jim Hugunin 不再从事其开发了。在我网站上有关于该采访未作删节(技术性更强)版本(请参阅 参考资料)。

字串9


字串6

  David Mertz:究竟什么是 JPython?

字串3

  Barry Warsaw:我将用标准营销说法来回答这个问题。

字串7

JPython 是 Python 编程语言 100% 纯 Java 实现。它可以让用户将 Python 源代码编译成 Java 字节码,并在任何 Java 虚拟机上运行产生字节码。它是与 Java 最无缝最平滑集成。您可以从 Python 访问所有 Java 库、构建 Applet、与 Java Bean 集成以及从 Python 中 Java 类创建子类,反之亦然。JPython 类似于 Python 而不象 Java,它可以交互使用;只需在提示上输入一些 JPython 代码就能立刻看到结果。

  用更简单话来说,JPython 可以为任何一个您需要 Java 代码编写脚本,这样转换出代码行数比原来要少上 2 到 10 倍。因为 Python 是动态输入语言,所以可以更快速地开发错误更少应用,并得到灵活得多程序。

字串9

  Mertz:有关 JPython 开发是如何开始呢? 字串5

  Warsaw :JPython 是由 Jim Hugunin 发明,他现在为 Xerox PARC Aspect Oriented Programming 项目工作。我了解 Jim,他可能主要是对挑战感兴趣。Python 领域中有许多人都认为这是不可实现。Guido 自己就是一个怀疑论者。Jim 证明他们都错了!

字串1

  那么既然遇到挑战,为什么还要继续开发 JPython 呢?因为它是大多数 Java 程序员不太了解最有价值 Java 工具。到目前为止!

字串2

  Mertz:您认为是什么刺激了 JPython 需求? 字串6

  Warsaw :首先必须理解 JPython 不是 Java 竞争对手;而是对它补充。Java 是静态输入编译语言。这确保了库输入很安全并且执行速度更快。有一个现象很有趣,就是尽管它是字节码翻译,但大多数人还是将 Java 看作一个传统“编写-编译-运行-编辑”程序。当然,Java 利用了软件世界绝大部分,因此对于 Java 程序员有许多资源可用。

字串5

  但相同静态输入和传统编程周期在人力资源方面增加了 Java 应用开发成本。Python 在这方面绝对胜出。因为 Python 是一种小而简单语言,所以非常易于掌握。大多数有经验程序员可以在大约一天时间内就学习到足够 Python 知识来提高生产力。Python 设计思想就是代码读比写要多得多。因此 Python 源代码易于在大型团体项目中共享。 字串1

  但更重要是,Python 是非常高级动态输入型语言。这表现在大大节约了执行任务所需代码数量。因为使用 Python 所写代码行数较少,可以写得更快,错误更少。对于快速应用开发这简直太棒了。 字串7


字串2

  Python 还提供一个交互式解释器,这意味着您可以坐在解释器提示,导入 Java 代码,创建 Java 类实例,进行方法调用等等,所有这些都是交互式。这在训练程序员如何使用公司 Java 库或者试验新 Java API 时是一种绝佳工具。 字串1

  但以我拙见,所有程序员都应该备有 CPython 和 JPython。

字串3

  Mertz :照您看,JPython 比 CPython 在哪里呢?

字串9

  Bock :JPython 提供了对其底层实现语言完整访问。在大多数(可能所有)基于 C 脚本语言中,C 函数必须封装在用来将 C 函数暴露给脚本语言一层简单代码中,这里存在一些工具,例如 SWIG,来将这个封装器代码创建自动化。但 JPython 根本就不需要封装器。所有曾经编写过 Java 代码都可直接从 JPython 使用,集成是双向。以 JPython 定义类和实例可以传递给 Java,就如同它们是一般 Java 类和实例那样(它们也确实如此)。

字串2

  嵌入/扩展 API 使从应用程序或模块中对 JPython 对象访问相当精确。这一优点部分来自于 JPython 和 Java 都是面向对象语言这一事实。Jim 利用了该事实这一重要优点。

字串2

  Warsaw :CPython 欠缺是对世界上大量 Java 代码访问。如果需要使用 Java 库,JPython 就是答案。反过来说,当然,JPython 也没有对世界上所有现有 C 库简易访问。Finn 已完成了通过 JNI 集成如 Tkinter 和 POSIX 模块这类事物工作,但那些在 JPython 中总是非标准,因为我们希望保留 100% 纯 Java 认证。 字串4

  Mertz:依您所见,JPython 缺点有哪些呢? 字串2

  Finn Bock :JPython 只提供对 Java 代码访问,而不提供对所有现有 C 模块访问。因此每个以 C 实现 Python 模块都必须用 Java 重新实现。而 CPython 则有许多模块。

字串2

  另外,对于嵌入/扩展 API,除了源代码之外没有任何文档。 字串7

  Mertz :您是否在寻找 JPython 优于纯 Java 优点?

字串3

  Warsaw :我想我们已经谈了许多这方面内容。但现在让我们谈谈 JPython 性能问题。因为 JPython 实现了 Python 动态语义,所有 JPython 带有相当广泛运行时。这对于某些应用程序有性能影响。例如即时编译器和 Hotspot 技术这样标准 Java 优化可以大大减轻这样影响(八个月前基准显示,使用支持 JIT JVM,JPython 1.1 可以达到,有时还会超过 CPython 1.5.2 速度)。我们将更新这些基准结果,并在推出 JPython 之后集中在性能问题上。 字串1

  但与 CPython 一样,您总能用 Java 重写应用程序中性能关键部分。 字串9


字串6

  Mertz:您认为 JPython 使用有多广泛?

字串7

  Warsaw :我想它使用正在变得越来越广泛。人们逐渐发现它对于技术成功非常关键。JPython 对于各种任务都有价值,从为最终用户提供平易近人脚本创建环境,到简化为 Java 库和应用程序创建测试框架。此时 JPython 最大遗憾就是它需要更多宣传。我希望这篇文章能在这一方面提供帮助。 字串3

  Mertz :您是否认为 JPython 是试图跟上 CPython 尝试?

字串3

  Bock :是。现在,JPython 正尝试赶上它。几乎所有新特性都首先添加到 CPython。(当然,JPython 确实在 CPython 之前具有字符串方法)。JPython 有不足之处是因为 CPython 比 JPython 有多 15 倍核心开发者。但即使这样,JPython 版本中存在 CPython 2.0 中几乎所有新特性。 字串6

  但我认为实际上它们几乎不相上下,即使在现实世界中,谁也不比谁多少。 字串6

  Warsaw :我坚决相信在语言级别上,JPython 和 CPython 应该完全兼容。在不可能情况下,Guido 确定差异是否与实现相关,或者哪一种实现是“多错”。我希望看到 CPython 和 JPython 最终成为同等,JPython 在某些方面推动 CPython 开发和 CPython 推动 JPython 开发一样。 字串3

  当前它一个示例就是 Unicode 支持。JPython 已经是全部 Unicode 化了。另一个示例是类型/类划分。在 CPython 中,您可以有一些内置类型,例如字符串、字典、列表和数。还有类和实例。内置类型不能继承。更让人困惑一点是,实例既有类型又有类。首先弥补 JPython 中这一缺憾更容易些,因为其面向对象实现。 字串3

  Mertz :对于 JPython 和 CPython 之间不兼容性您是怎么认为

字串1

  Warsaw :在事物工作方法上有许多细小差异。它们都在 JPython 文档中进行了大致说明。某些作为提供语言定义可接受差异分类,某些指出某个或其它实现应该被修正地方。大多数都非常次要。

字串6

  Bock :某些模块还没有或者无法以 JPython 实现。某些模块又只能作为 JNI 模块实现,类似模块在部署环境中是没有用字串4

  Bock :实际上,当我移植自己脚本和程序(与 IDLE、PySol 和 PMW 工具箱一起)时,我遇到问题不是无用信息收集随机回收或缺少 _del_method。它们是其他人以前没有遇到过小问题,例如 CPython 行为。

字串4

  Warsaw :下一个版本 JPython 将与 Python 2.0 语言定义兼容,因此最大变化将在库中。CPython 发行版中任何以纯 Python 编写标准库模块都应该是可移植。C 扩展模块不行,除非它们特别通过 JNI 网桥集成或以 Java 重新实现。任何大量使用 Java API JPython 应用程序在移植回 CPython 时都将经过一段艰难时期。

字串5


字串4

  另一方面,两种系统库中有许多公共功能。在有足够深谋远虑前提下,可以将兼容性层构建到应用程序中。 字串4

  Mertz :对于 JPython 今后方向有什么想法吗? 字串5

  Warsaw :我们已经基于公用 JPython 1.1 发行版创建了 JPython 后继者 "Jython"。这样做是为了确保项目长久性和稳定性。依据 CNRI JPython 1.1.x 许可证实现了所有这些。我们将整个开发过程移到了 SourceForge,并使用对 CPython 非常合适相同开放过程管理它。Finn 和我两人无疑要参与 Jython 未来开发;Jython 将使用 OSI 核准 CPython 2.0 许可证发行。它与您将获得“正式”派生很接近,所以当前 JPython 社区应该确信 Jython 与它永远不会相差太多。我们希望它们最终都能迁移到 Jython。

字串1

  现在代码仍处在试验阶段,但 Finn 和我将为 Jython 2.0 发行版(已经包含了 Finn 勘误表)致力于建立几个技术性里程碑。CPython 2.0 具有增强指派和扩展打印等特性(很快还将带有列表理解)。我们已集成了免费 Apache Jakarta OROMatcher 代码,消除了双许可证需要,并修正了许多错误。我不知道 Jython 2.0 第一个 alpha 发行版何时出现,但当前所有代码都在 SourceForge CVS 树中获得。 字串7

字串3

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章