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

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

尽管 Python 通常等同于 CPython,但它的规范曾在其它地方实现过多次,包括在用于 Java 和 .NET 的应用程序中。JPython 将 Python 源码编译成 Java 字节码,并提供了对 Java 类的透明访问。Python for .NET 是微软将要发布的交叉语言技术平台工作中的一个应用。在采访 Mark Hammond、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 做了大量更改。

时间: 2024-12-01 14:42:13

可爱的Python:JPython和Python for .NET内幕的相关文章

python-如何进行Python优化使得Python模块能够得到2倍性能提升

问题描述 如何进行Python优化使得Python模块能够得到2倍性能提升 目前要对一个含有Python模块和C++模块的项目(Python模块调用C++模块)进行优化,对方公司希望我们团队实现一个提升2倍python模块性能的优化编译器 求问应用什么技术可以使得python编译器能够获得2倍性能提升并且不存在C扩展性弱的问题?(目前pypy虽然有5倍,6性能提升但是C扩展弱不支持我这个项目) 目前我考虑 去修改pypy的C扩展性,牺牲pypy一部分的性能提升空间,来换取它对C扩展模块的支持,或

Python安装环境搭建(python+pycharm+pid)

Python安装环境搭建(python+pycharm+pid):   准备软件: python3.4.3.msi     下载: python3.5 python2.7.10 注:基本的程序编译器 pycharm-professional-4.5.3.exe   注:IDE集成开发环境:语言编辑器,调试器,编译器等 get-pip.py 注:PyPI (Python Package Index) 就是Python的软件包的仓库,python的包管理器,可以方便的帮助,下载安装python的第三

Python lambda和Python def区别分析_python

Python支持一种有趣的语法,它允许你快速定义单行的最小函数.这些叫做lambda的函数,是从Lisp借用来的,可以用在任何需要函数的地方. lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? >>> def f(x): ... return x+2 ... >>> f(1) 3 >>> f = lambda x:x+2 >>> f(1) 3 >>> (

Python补充04 Python简史

原文:Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python是我喜欢的语言,简洁,优美,容易使用.前两天,我很激昂的向朋友宣传Python的好处. 听过之后,朋友问我:好吧,我承认Python不错,但它为什么叫Python呢? 我不是很确定:呃,似乎是一个电视剧的名字. 朋友又问:那你说的Guido是美国人么? (Guido von Rossum,Python的作者) 我再次不是很确定:他从goog

Python补充03 Python内置函数清单

原文:Python补充03 Python内置函数清单 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.   Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义.最常见的内置函数是: print("Hello World!") 在Python教程中,我们已经提到下面一些内置函数: 基本数据类型 type() 反过头来看看 dir() help(

Python网络02 Python服务器进化

原文:Python网络02 Python服务器进化 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! **注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver,请注意查阅官方文档. 在上一篇文章中(用socket写一个Python服务器),我们在不依赖框架和CGI的情况下

Python深入06 Python的内存管理

原文:Python深入06 Python的内存管理 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征.这里以Python语言为例子,说明一门动态类型的.面向对象的语言的内存管理方式.   对象的内存使用 赋值语句是语言最常见的功能了.但即使是最简单的赋值语句,也可以很有内涵.Python

python 解析XML python模块xml.dom解析xml实例代码_python

一 .python模块 xml.dom 解析XML的APIminidom.parse(filename)加载读取XML文件 doc.documentElement获取XML文档对象 node.getAttribute(AttributeName)获取XML节点属性值 node.getElementsByTagName(TagName)获取XML节点对象集合 node.childNodes #返回子节点列表. node.childNodes[index].nodeValue获取XML节点值 nod

python编程-将Python程序转化为可执行程序[整理]_python

工欲善其事,必先利其器.python是解释型的语言,但是在windows下如果要执行程序的话还得加个python shell的话,未免也太麻烦了.而这里所说的东西就是将python程序转换为exe文件.下面是一些常用的工具,不过似乎py2exe应用的更加广泛一些.  py2exe     http://py2exe.sf.net 只支持windows平台,应该是大家听到最多的一个名字了,用户不少,所以有问题的话在它的mail list里面很容易找到答案.文档中提到了"无法找到某某code&quo