设为首页收藏本站

LUPA开源社区

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

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

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

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

  Python 现在已经不仅仅是胶水脚本语言了. 不信?看看下面使用Python的成功案例:

  要是你正在寻找快速介绍美丽的Python语言,我推荐My-Favorite-Python-Things

  高级语言是主流

  目前高级语言可以写出简单具有灵活性的代码. 所以在快速创建应用程序的时候是一个不错的选择, 你不需要花时间来处理各种数据类型 (所有接口示例代码都是为了满足编译处理). 可能有些人就会争论了,这个特性会产生有bug的代码. 但是 Guido van Rossum说:“生产的代码谁会不经过测试呢”? 静态语言在编译时期就能处理一些错误. 但这并不能检测出所有的错误. 最后你还是得编写测试代码。 而有这个时间完全可以为动态语言写出测试代码. 此外人们还不能设计一个堪称完美的类型系统. 对此Jim Treavor写了一些总结

  新技术允许我们为动态语言设计一个高效的运行环境 (JavaScript V8, LuaJIT, Racket, Common Lisp...), 这也可以和大型的框架竞争 (JVM, .NET, ...)

  所有这一切都使得高级语言越来越流行得在大型企业和日常生活中使用。

  Python能延续传奇吗?

  现在Python非常流行,同时它的地位也受到竞争者的挑战。Python有良好的生态系统,也有大型软件和社区支持,但它缺乏其竞争者的高效和先进的运行环境。

  Python 作为胶水语言.

  正如我在开头说的一个特点,Python很容易连接各种编译库,这是它作为胶水语言在20年前流行的重要原因。但是目前依然活跃的工具已经很老旧了,你必须花大量精力才能使用它们。

  • ctypes
  • c 扩展 是邪恶的. 它们绑定到Python的特定版本还不能被重复使用. 更糟糕的是, CPython2和CPython3的c 扩展 API不一样. 想想将库移植到Python3会是什么情况吧!
  • Cython - 这是被设计用来编写C扩展的. 但是我敢确定,使用C扩展是你最后想做的事. Cython 是一个需要编译的外部工具. 它最终的代码并没有动态行为,但是它的语法还需要学习. Cython不支持类型推断. 使用Cpython你不得不去编译. Cython也不是一个标准. 它不能作为解释代码来执行. _nuitka_的作者 Kay Hayen在Static Compilation - That is the point总结的非常好.
  • swig, boost - 这些是非常容易的, 通常修改下C/C++ 代码就可以了, 或者写一些方案文件.
  相比之下,有很多新的工具能在相同的性能下(甚至超出),更好的处理这些任务。
  • cffi - 一个能轻松处理你的c库的包。在接触硬件或者支持其他软件时你会经常做这样的事(像数据库客户端、驱动程序)。尝试下在python里使用它是多么简单吧。你不需要写任何的封装,类型化代码。而且还有 CPython 和 PyPy 的支持。
  • bitey

  将Python作为你代码的核心 - 胶水语言另一面

  胶水语言也有另一面。我们来想想底层高性能编程的过程。可能看起来会是下面几个过程:

  • 构思
  • 很多复杂的底层代码和组织机构代码。很可能是一堆晦涩的泛型代码(为了重用性)。
  • 编写胶水语言
  • 编译
  • 运行
  • 极可能会做很多的调试,然后回去修改,考虑到有这么多的底层代码。

  感谢Python的简便性、脚本语言的本质和大量的工具,将他作为你代码的模板和核心。这就意味着你只需要写最少的底层代码,让Python做剩下的事:生成组织代码和你的底层代码需要的环境。

  这与以往Lisp的理念一样,代码即数据,代码能够被其他正在执行的代码理解(代码可以作为数据被处 理)。因而机器可以理解运行时正在执行的代码,并且去优化它,通过通常的方式就能得到全部的数据信息,而不用像C++那样使用模板。这是C++和其他流行 的编程语言所没有的。最终我们有相对更底层的抽象级别,而运行时信息相对更丰富,使得编译器可以:

  • 为未知的硬件做特化 (编码时),包括支持的数据类型,以及可用的优化方法。
  • 自动调整(tuning) (例如为库提供的数据,如 ATLAS...)
  • 推送更多的信息给编译器,得到更好的推理。
  • 人们不用为数据类型烦恼(运行时环境就已经可以保证快速、正确使用数据类型)

于是整个流程就好像这样:

  • 想法
  • 一点Python代码(最棒的部分),用来构建整个架构。然后是一些底层的代码 ,同样很棒,因为这些代码没有恶心的模板和上下文代码。事实上,底层的代码也可以通过Python代码生成。
  • 运行
  • 调试,比起前面的步骤时间更短一些

  就性能而言,这样的过程相比之前的方法有着更好的前景。

  这些是已经用到这种方式的:PyPy, cffi, PyOpenCL, PyCUDA, numba, theano...


酷毙

雷人

鲜花

鸡蛋

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

最新评论

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