[pypy-svn] r71646 - pypy/trunk/pypy/doc/jit

arigo at codespeak.net arigo at codespeak.net
Tue Mar 2 16:55:26 CET 2010


Author: arigo
Date: Tue Mar  2 16:55:24 2010
New Revision: 71646

Modified:
   pypy/trunk/pypy/doc/jit/overview.txt
Log:
Update.


Modified: pypy/trunk/pypy/doc/jit/overview.txt
==============================================================================
--- pypy/trunk/pypy/doc/jit/overview.txt	(original)
+++ pypy/trunk/pypy/doc/jit/overview.txt	Tue Mar  2 16:55:24 2010
@@ -16,23 +16,30 @@
 --------
 
 Writing an interpreter for a complex dynamic language like Python is not
-a small task.  So doing it a high-level language looks like a good idea,
-because high-level languages have many advantages over low-level ones
-(flexibility, ease of implementation, no low-level issues...).  This is
-the basic observation behind PyPy.
-
-But coding in a high-level language has other benefits beyond the
-obvious ones.  Perhaps most importantly, it allows the language
-interpreter to be analyzed when turned into a compiler.  This is
-precisely what our JIT compiler generator does.  Based on tracing
-JIT techniques, **it can turn the interpreter of an arbitrary
-dynamic language into a just-in-time compiler for the same language.**
-It works mostly automatically and only needs guidance by the language
-implementor in the form of a small number of hints in the source code of
-the interpreter.  The resulting JIT compiler has the same language
-semantics as the original interpreter by construction.  It generates
-machine code for the user program while aggressively optimizing it,
-leading to a big performance boost.
+a small task, especially if, for performance goals, we want to write a
+Just-in-Time (JIT) compiler too.
+
+The good news is that it's not what we did.  We indeed wrote an
+interpreter for Python, but we never wrote any JIT compiler for Python
+in PyPy.  Instead, we use the fact that our interpreter for Python is
+written in RPython, which is a nice, high-level language -- and we turn
+it *automatically* into a JIT compiler for Python.
+
+This transformation is of course completely transparent to the user,
+i.e. the programmer writing Python programs.  The goal (which we
+achieved) is to support *all* Python features -- including, for example,
+random frame access and debuggers.  But it is also mostly transparent to
+the language implementor, i.e. to the source code of the Python
+interpreter.  It only needs a bit of guidance: we had to put a small
+number of hints in the source code of our interpreter.  Based on these
+hints, the *JIT compiler generator* produces a JIT compiler which has
+the same language semantics as the original interpreter by construction.
+This JIT compiler itself generates machine code at runtime, aggressively
+optimizing the user's program and leading to a big performance boost,
+while keeping the semantics unmodified.  Of course, the interesting bit
+is that our Python language interpreter can evolve over time without
+getting out of sync with the JIT compiler.
+
 
 The path we followed
 --------------------
@@ -47,13 +54,15 @@
 compilers.  If this turns out to be correct, the practical speed of
 dynamic languages could be vastly improved.
 
-Today (beginning 2009), our prototype is no longer using partial
-evaluation -- at least not in a way that would convince paper reviewers.
-It is instead based on the notion of *tracing JIT,* recently studied for
-Java and JavaScript.  When compared to all existing tracing JITs so far,
-however, partial evaluation gives us some extra techniques that we
-already had in our previous JIT generators, notably how to optimize
-structures by removing allocations.
+All these previous JIT compiler generators were producing JIT compilers
+similar to the hand-written Psyco.  But today, starting from 2009, our
+prototype is no longer using partial evaluation -- at least not in a way
+that would convince paper reviewers.  It is instead based on the notion
+of *tracing JIT,* recently studied for Java and JavaScript.  When
+compared to all existing tracing JITs so far, however, partial
+evaluation gives us some extra techniques that we already had in our
+previous JIT generators, notably how to optimize structures by removing
+allocations.
 
 The closest comparison to our current JIT is Tamarin's TraceMonkey.
 However, this JIT compiler is written manually, which is quite some
@@ -87,12 +96,8 @@
   is modified, so that they cannot get out of sync no matter how fast
   the language evolves.
 
-* Fast enough: we think that we can get some rather good performance out
-  of the generated JIT compilers.  That's the whole point, of course.
-  Previous experience shows that it should be possible.  Our previous
-  generated JIT compilers were similar to the hand-written Psyco; due
-  to limits in automating the way Psyco works, our current generated
-  JIT compilers are instead similar to tracing JITs like TraceMonkey.
+* Fast enough: we can get some rather good performance out of the
+  generated JIT compilers.  That's the whole point, of course.
 
 
 Alternative approaches to improve speed



More information about the Pypy-commit mailing list