pypy / pypy / doc / release-1.0.0.rst

David Malcolm 1e46012 















































































































































































==========================================
PyPy 1.0: JIT compilers for free and more
==========================================

Welcome to the PyPy 1.0 release - a milestone integrating the results 
of four years of research, engineering, management and sprinting 
efforts, concluding the 28 months phase of EU co-funding!

Although still not mature enough for general use, PyPy 1.0 materializes
for the first time the full extent of our original vision:

- A flexible Python interpreter, written in "RPython":

  - Mostly unaware of threading, memory and lower-level target platform
    aspects.
  - Showcasing advanced interpreter features and prototypes.
  - Passing core CPython regression tests, translatable to C, LLVM and .NET.

- An advanced framework to translate such interpreters and programs:

  - That performs whole type-inference on RPython programs.
  - Can weave in threading, memory and target platform aspects.
  - Has low level (C, LLVM) and high level (CLI, Java, JavaScript) backends.

- A **Just-In-Time Compiler generator** able to **automatically**
  enhance the low level versions of our Python interpreter, leading to
  run-time machine code that runs algorithmic examples at speeds typical
  of JITs!

Previous releases, particularly the 0.99.0 release from February,
already highlighted features of our Python implementation and the
abilities of our translation approach but the **new JIT generator**
clearly marks a major research result and gives weight to our vision
that one can generate efficient interpreter implementations, starting
from a description in a high level language.

We have prepared several entry points to help you get started:

* The main entry point for JIT documentation and status:

   http://codespeak.net/pypy/dist/pypy/doc/jit.html

* The main documentation and getting-started PyPy entry point:

   http://codespeak.net/pypy/dist/pypy/doc/index.html

* Our online "play1" demos showcasing various Python interpreters,
  features (and a new way to program AJAX applications):

   http://play1.codespeak.net/

* Our detailed and in-depth Reports about various aspects of the
  project:

   http://codespeak.net/pypy/dist/pypy/doc/index-report.html

In the next few months we are going to discuss the goals and form of
the next stage of development - now more than ever depending on your
feedback and contributions - and we hope you appreciate PyPy 1.0 as an
interesting basis for greater things to come, as much as we do
ourselves!

have fun,

    the PyPy release team,
    Samuele Pedroni, Armin Rigo, Holger Krekel, Michael Hudson,
    Carl Friedrich Bolz, Antonio Cuni, Anders Chrigstroem, Guido Wesdorp
    Maciej Fijalkowski, Alexandre Fayolle

    and many others:
    http://codespeak.net/pypy/dist/pypy/doc/contributor.html


What is PyPy?
================================

Technically, PyPy is both a Python interpreter implementation and an
advanced compiler, or more precisely a framework for implementing dynamic
languages and generating virtual machines for them.

The framework allows for alternative frontends and for alternative
backends, currently C, LLVM and .NET.  For our main target "C", we can
can "mix in" different garbage collectors and threading models,
including micro-threads aka "Stackless".  The inherent complexity that
arises from this ambitious approach is mostly kept away from the Python
interpreter implementation, our main frontend.

PyPy is now also a Just-In-Time compiler generator.  The translation
framework contains the now-integrated JIT generation technology.  This
depends only on a few hints added to the interpreter source and should
be able to cope with the changes to the interpreter and be generally
applicable to other interpreters written using the framework.

Socially, PyPy is a collaborative effort of many individuals working
together in a distributed and sprint-driven way since 2003.  PyPy would
not have gotten as far as it has without the coding, feedback and
general support from numerous people.

Formally, many of the current developers were involved in executing an
EU contract with the goal of exploring and researching new approaches
to language and compiler development and software engineering.  This
contract's duration is about to end this month (March 2007) and we are
working and preparing the according final review which is scheduled
for May 2007.

For the future, we are in the process of setting up structures to help
maintain conceptual integrity of the project and to discuss and deal
with funding opportunities related to further PyPy sprinting and
developments. See here for results of the discussion so far:

    http://codespeak.net/pipermail/pypy-dev/2007q1/003577.html


1.0.0 Feature highlights
==============================


Here is a summary list of key features included in PyPy 1.0:

- The Just-In-Time compiler generator, now capable of generating the
  first JIT compiler versions of our Python interpreter:

   http://codespeak.net/pypy/dist/pypy/doc/jit.html

- More Python interpreter optimizations (a CALL_METHOD bytecode, a method
  cache, rope-based strings), now running benchmarks at around half of
  CPython's speed (without the JIT):

   http://codespeak.net/pypy/dist/pypy/doc/interpreter-optimizations.html

- The Python interpreter can be translated to .NET and enables
  interactions with the CLR libraries:

   http://codespeak.net/pypy/dist/pypy/doc/cli-backend.html
   http://codespeak.net/pypy/dist/pypy/doc/clr-module.html

- Aspect Oriented Programming facilities (based on mutating the Abstract
  Syntax Tree):

   http://codespeak.net/pypy/dist/pypy/doc/aspect_oriented_programming.html
   http://codespeak.net/pypy/extradoc/eu-report/D10.1_Aspect_Oriented_Programming_in_PyPy-2007-03-22.pdf

- The JavaScript backend has evolved to a point where it can be used to
  write AJAX web applications with it. This is still an experimental
  technique, though. For demo applications which also showcase various
  generated Python and PROLOG interpreters, see:

   http://play1.codespeak.net/

- Proxying object spaces and features of our Python interpreter:

  - Tainting: a 270-line proxy object space tracking and boxing
    sensitive information within an application.

  - Transparent proxies: allow the customization of both application and
    builtin objects from application level code.  Now featuring an
    initial support module (tputil.py) for working with transparent
    proxies.

For a detailed description and discussion of high level backends and
Python interpreter features, please see our extensive "D12" report:

http://codespeak.net/pypy/extradoc/eu-report/D12.1_H-L-Backends_and_Feature_Prototypes-2007-03-22.pdf


Funding partners and organizations
=====================================================

PyPy development and activities happen as an open source project and
with the support of a consortium partially funded by a 28 month
European Union IST research grant for the period from December 2004 to
March 2007. The full partners of that consortium are:

    Heinrich-Heine University (Germany), Open End (Sweden)
    merlinux GmbH (Germany), tismerysoft GmbH (Germany)
    Logilab Paris (France), DFKI GmbH (Germany)
    ChangeMaker (Sweden), Impara (Germany)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.