2010-05-09

PyPy – 吞下自己尾巴的小蟒蛇

Views: 37290 | 2 Comments

PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.

你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?

其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.

[pypy-logo]

简单地说, PyPy 是用 Python 语言写了一个工具, 将 Python 代码转成 C, .NET, Java 等语言和平台的代码. PHP 也有类似的项目 - HipHop-PHP, 把 PHP 代码转成 C++ 代码.

为什么要将一种语言转成另一种语言? 首先是目标语言可能在性能(如C语言)和/或跨平台(如 .NET, Java)等方面具有优势. 其次, 在转换的过程, 可以进行代码优化或加入新技术, 比如 PyPy 应用的 Just-in-Time(JIT) 技术, 能让 Python (事实上是转换后的目标代码)的执行速度更快.

PyPy 和许多编译器, 解释器, 翻译器不同, 它不关心 Python 代码的词法分析和语法树. 因为它是用 Python 语言写的, 所以它直接利用 Python 语言的 Code Object. Code Object 是 Python 字节码的表示. 也就是说, PyPy 直接分析 Python 代码所对应的字节码, 这些字节码即不是以字符形式也不是以某种二进制格式保存在文件中, 而在 Python 运行环境中.

越来越多的编程语言被设计成解释型, 但考虑到性能时, 几乎不约而同地想到转换成 C 语言. C 语言已经成为一个标杆, 任何编程语言都可以根据其距离 C 语言的远近来分类.

Related posts:

  1. 用C语法来写Python代码
  2. 开始学习 Python
  3. 动态语言应该有多动态?
  4. Cpy是如何打败Python的
Posted by ideawu at 2010-05-09 21:30:01 Tags:

2 Responses to "PyPy – 吞下自己尾巴的小蟒蛇"

  • 漏了一句 (我们必须把我们编写的任何一个PY程序都转为C程序来执行.) Reply
  • 既然python可以用PYPY直接转换成C 那几乎没什么可选的了。性能问题上来看,我们必须把我们编写的任何一个程序都转为C程序来执行. 好像有点矛盾。 Reply

Leave a Comment