设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

Python现状:为什么PyPy是Python的未来?

2013-5-17 10:29| 发布者: joejoe0332| 查看: 3840| 评论: 0|原作者: 开源中国社区|来自: 开源中国社区

摘要:   Python 现在已经不仅仅是胶水脚本语言了. 不信?看看下面使用Python的成功案例: YouTube - 主要由 Python编写NASAIndustrial Light Magic Runs - 电影公司OpenStackSage - 科学软件及其他 (SciPy, PythonXY)WEB ...

  把Python当做一个高速语言

  有很多方法能用Python写出高速的代码。最流行而且仍在广泛传播的方法是,用底层语言来写应用里最复杂的部分,然后使用,这对python来说无疑是很不幸的事。

  所有Python里出色的高效的工具都需要许多复杂的c代码,这阻碍了其他的贡献者进来。现在我们想要写出高速而且美观的python代码。

  有很多工具可以把python代码编译成机器代码,比如:Nuitka, Python2C, Shedskin, pythran。我认为它们都是失败的,当你使用它们的时候,就需要跟动态行为说再见了。他们只支持一部分的python语言,并且离完全支持还有很大距 离。我甚至不认为以后他们能做到。另外他们也没有用那些使JIT(Just-In-Time 运行时编译执行的解决方案变得出色的先进的技术和运行时信息。

  多核编程

  这方面,Armins Rigo的文章写的很棒,可以参考:Multicore Programming in PyPy and CPython

  解释器的设计
 

  为了让下一步的开发更简单,实现动态语言的最佳状态,Python需要一个合适的架构。当前CPython的架构过于简单,因而限制比较大,很难做到像JIT编译器那样的功能。下面是一些在增强CPython解释器性能上的失败的努力:

  • psyco (被PyPy代替)
  • Unladen swallow
  • 消除GIL的很多失败的尝试
  • 还有一些尝试修复CPython一些缺陷的尝试: Stackless和HotPy,但是Guido (Python之父,仁慈的独裁者) 的坚持使得这些项目没有被合并到Python中。(说明一下,HotPy还不是产品级的东西)。

  CPython最大的问题是他的C API,这部分没有很好的设计。其他部分的实现多少都受此影响。

  我们能做什么?

  1. 在粘结代码中推进新工具的使用 ( cffi, bitey)
  2. 在公共库中停止对CPython的底层属性(C API,C扩展)的依赖。作为替代,采用有如下功能的中间工具:
  • cffi - 简化对C库的应用
  • cython - 编写可移植的C扩展。我并不推荐它用于通常的编程,不过它确实在维护C扩展方面更好一些,也更简单。Cython已经有CPython和PyPy后端。

  为何 PyPy 是趋势?

  PyPy为优化和进一步的语言开发提供了更好的架构。对于大部分Python已有的问题,PyPy已经提供了解决方案:

  PyPy已经支持多平台 (x86, 64_x86, ARM)

  PyPy同时还包含了一个优秀的现代的架构,在 Jim Huang 的演讲 中做了介绍,演讲的要点是:

  • 解释性语言的框架
  • 用于研究和产品的组件组合 (不同的数据模型,垃圾回收 - 这些可以在具体的应用场景进行改变)
  • 构建在基于组件链的功能架构之上(翻译工具链)。每一个步骤都会延续/转换程序模型、引入特征、各种后端(JVM, JavaScript, LLVM, GCC IR等等)。来看一下翻译链的例子:python 代码 -> 字节码 -> 函数对象 -> 类型推断 -> 垃圾收集器 -> JIT
  • 包含大量在架构的不同层次开发的现代的优化技术 (这个任务可以简化)

  相信让所有软件支持PyPy需要付出艰巨的努力 - 需要在现有的库上做很多工作。不过使用新的工具,编写支持PyPy和CPython的软件会比采用C扩展的方式更简单一些(在我们能做什么一节有介绍)。

  CPython遗留问题
 

  现在来说一下CPython依赖性代码的遗留问题 (源于它们紧密依赖 c 扩展)。 这些主要是科学相关的软件 (NumPy, SciPy 等等)。Python在PyPy成为产品级软件之前早就被用于科学计算(我认为实在2年之前),之后这些软件在工具、代码和社区方面都得到很多发展。这些 软件一起构建了一个很棒的平台,通常被用来作为Matlab之类的软件的替换(有人甚至认为是更好的选择)。要实现这些,C扩展是目前唯一的解决方案。现在,这些软件的发展仍然与CPython紧密绑定,因为要让科学计算相关的软件全部支持PyPy,需要大量的工作。近似的方案是使用按需执行的JIT - 对特定的函数做修饰,然后动态的把它们编译成机器码并切换到使用c扩展。这个想法不需要重写所有的科学计算的平台,而速度同样快速。采用这种方式的典型项目是numba,这是由Continuum Analytics (这家公司主要发布基于python库的强壮的科学计算平台)赞助的。Numba采用这种方式是因为它的快速脚本需要与其他依赖CPython的科学计算代码兼容。numba值得学一下,SciPy会议的 numba演讲 是一个很好的阐述。

  不得不说Python的科学计算社区非常棒。他们非常关注于质量、易用性和推广他们的产品(为此组织了 很多会议:SciPy大会,PyData等)。感谢他们让Python成为免费的科学分析平台的首选。这里还需要提一下Travis Oliphant,他在社区中付出了很多努力,让整个平台协调一致。关于这些可以看一下这篇博客文章:为何Python是你最终必须学习的编程语言

  PyPy呢?

  我希望PyPy当时并没有达到产品级可用。

  后续

  关于本文的后续在Reddit上有一个有趣的讨论。这是关于在商业上应用PyPy的优缺点的讨论。讨论者总结了如何使用基于高性能库的PyPy。最重要的是使用PyPy软件栈(原始Python、cffi,等等)可以让维护和优化很简单(例如:延迟计算)。至于缺点,上面提到了,主要与CPython的遗留问题有关。

  英文原文:The Python condition. Why PyPy is the future of Python


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部