pypy

pypy

官网原文:
~~~~~~~~~~~~

We aim to provide:

* a common translation and support framework for producing implementations of dynamic languages, emphasising a clean separation between language specification and implementation aspects.
* a compliant, flexible and fast implementation of the Python Language using the above framework to enable new advanced features without having to encode low level details into it.

2   High Level Goals
2.1   PyPy – the Translation Framework

PyPy is experimenting with a more ambitious approach. We are using a subset of the high-level language Python, called RPython, in which we write languages as simple interpreters with few references to and dependencies on lower level details. Our translation framework then produces a concrete virtual machine for the platform of our choice by inserting appropriate lower level aspects. The result can be customized by selecting other feature and platform configurations.

Our goal is to provide a possible solution to the problem of language implementers: having to write l * o  * p interpreters for l dynamic languages and p  platforms with o  crucial design decisions. PyPy aims at having any one of these parameters changeable independently from each other:

* l: the language that we analyze can be evolved or entirely replaced;
* o: we can tweak and optimize the translation process to produce platform specific code based on different models and trade-offs;
* p: we can write new translator back-ends to target different physical and virtual platforms.

译文:
~~~~~~~~~~~

pypy的目标(已经实现)是:

* 能够生成动态语言的解释器的通用框架。
* 用这个框架来生成一个兼容的、弹性的、运行速度快的python的解释器(译者加:并且是python的即时编译器)。这个解释器还能给python添加一些额外的特性(译者加:比如无堆栈)。

pypy的高端目标是一个翻译框架:

用一个python的子集rpython来实现解释器。这个rpython解释器不涉及底层和平台相关的部分。另外针对各个平台再补充和底层相关的部分的编码(译者加:用底层语言来写)。

然后针对一种动态语言能够同时生成多个平台的解释器。

换成自己的话说
~~~~~~~~~~~~~~~~~

* 作为python的即时编译器,提高python的运行速度。并让python能在多个平台运行。目前能够同时生成python的java、dotnet、c和javascript、LLVM的解释器。并且,pypy把大量的python库改写为可移植的版本。
* 作为编译器框架,可以生成各种语言的编译器。

我理解pypy其实还具有更多的意义
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* pypy最大的意义和用法应该是多个语言之间相互翻译的通用翻译器,而不只是用来生成解释器。这种通用翻译器一直是大家的一个理想,没想到在pypy这里被实现了。这个翻译器不是用替换的方法来直接翻译,而是将一种语言进行分析,分析成一个通用结构,然后再把这个通用结构翻译成目标语言,这样语言的翻译能力更强,也更少错误。pypy能把rpython翻译为javascript代码,也可以把scheme等翻译为javascript代码。等于是一个编程语言的多种输入,多种输出的转换器。我想把python翻译为scheme,object c也是可能的。

说些题外话:pandoc是文本标记语言的通用翻译器,也是有一个中间分析层。希望人类各个语言之间也有这样一个通用翻译器,最起码能翻译一个简化的子集也好。比如限定这篇文章只能用这几百个字来写,但写完后,马上能翻译成所有的人类语言。simple english这是这样的子集。中国的古文也是这样的子集。但还没听说一个比较成形的通用翻译器。

* 基本上把python变成了一个静态编译语言(这个rpython比起python来说缺不了什么东西)。实际上pypy的rpython作为python的子集,去掉了一个变量能够赋值不同类型的值之后,能够静态编译。这样,使用有所限制后的rpython,python就不再只是动态解释语言了,python同时也成了静态编译语言。

对pypy的期望
~~~~~~~~~~~~~~~

* 能够象haskell的编译器ghc那样,自己带一个gcc,能方便的把python程序生成exe程序。目前pypy对windows的支持还不是很好。
* 更好的windows支持。
* 作为一个语言平台,促进多种编程语言混合编程的大平台。共享一个库,各种语言之间能够相互调用。其实这个目标是不难实现的。因为pypy的实现方法就是把各种语言先翻译成rpython代码,然后再转为java等后端。这样各种语言是可以在rpython层面相互调用的,并且pypy还有一整套rpython实现的库。
* 更好的和各个平台互动,能够方便调用平台API,比如c的模块,java的模块。目前pypy这方面还不是很好。但正在实现这个功能。

静态编译的好处:

* 运行快很多。
* 不需要平台安装解释器,更方便的发布程序。

This entry was posted in Uncategorized. Bookmark the permalink.

One Response to pypy

Comments are closed.