[pypy-svn] r27970 - pypy/extradoc/talk/dls2006
arigo at codespeak.net
arigo at codespeak.net
Wed May 31 13:04:34 CEST 2006
Author: arigo
Date: Wed May 31 13:04:26 2006
New Revision: 27970
Modified:
pypy/extradoc/talk/dls2006/paper.tex
Log:
Yay. Only one XXX left
Modified: pypy/extradoc/talk/dls2006/paper.tex
==============================================================================
--- pypy/extradoc/talk/dls2006/paper.tex (original)
+++ pypy/extradoc/talk/dls2006/paper.tex Wed May 31 13:04:26 2006
@@ -512,7 +512,8 @@
objects are the concrete Python objects of the various built-in types:
lists, dictionaries, and so on. By opposition, the Flow Object Space is
really an abstract domain. It handles objects that are placeholders.
-Its lattice order is shown in figure \ref{flowlattice}.
+Its lattice order (actually a join-semilattice only) is shown in
+figure \ref{flowlattice}.
\begin{figure*}
\centering
@@ -687,7 +688,7 @@
%
Figures \ref{latticeoverall} and \ref{latticedetail} show how these
types are ordered to form a lattice. We mostly use its structure of
-[join-semilattice] only.
+join-semilattice only.
\begin{figure*}
\centering
@@ -808,28 +809,29 @@
the abstract interpretation engine that is critical for precision: the
propagation of conditional types. Consider the following source code
fragment:
-
+%
\begin{verbatim}
if isinstance(x, MyClass):
f(x)
else:
g(x)
\end{verbatim}
-
+%
Although the type of \texttt{x} may be some parent class of
\texttt{MyClass}, it can be deduced to be of the more precise type
$Inst(MyClass)$ within the positive branch of the \texttt{if}.
-(Remember that our graphs are in SSI form, which means that the
+\footnote{Remember that our graphs are in SSI form, which means that the
\texttt{x} inside each basic block is a different Variable with a
-possibly different type as annotation.) XXX flow sensivity and SSA
+possibly different type as annotation. Given that our type inference
+is not flow-sensitive, SSI gives an advantage over SSA here.}
This is implemented by introducing an extended family of types for
boolean values:
-
+%
$$
Bool(v_1: (t_1, f_1), v_2: (t_2, f_2), ...)
$$
-
+%
where the $v_n$ are variables and $t_n$ and $f_n$ are types. The
result of a check, like \texttt{isintance()} above, is typically
annotated with such an extended $Bool$. The meaning of the type is as
@@ -844,18 +846,21 @@
With the help of the above technique, we achieve a reasonable precision
in small examples. For larger examples, a different, non-local
-technique is required: the specialization of functions. XXX use 'polymorphism'
+technique is required: the specialization of type-polymorphic functions.
As described in the introduction, the most important downside of our
approach is that automatic specialization is a potential
-performance-killer. We \textit{do} support specialization, however: we can
-generate several independently-annotated copies of the flow graphs of
-certain functions. When annotating RPython programs, such
-specialization does not happen automatically: we rely on hints provided
-by the programmer in the source code, in the form of flags attached to
-function objects. As we had this trade-off in mind when we wrote the
-Python interpreter of PyPy, we only had to add a dozen or so hints in
-the end.
+performance-killer. So we decided that in the normal case, all calls to
+a given function contribute to a single annotation of that function.
+Inside the function graph, we propagate the \textit{join} of the types
+of the actual parameters of the call sites. We \textit{do} support
+specialization, however: we can generate several independently-annotated
+copies of the flow graphs of certain functions. When annotating RPython
+programs, such specialization does not happen automatically: we rely on
+hints provided by the programmer in the source code, in the form of
+flags attached to function objects. As we had this trade-off in mind
+when we wrote the Python interpreter of PyPy, we only had to add a dozen
+or so hints in the end.
This does not mean that automatic specialization policies are difficult
to implement. Indeed, the simpler lower-level type systems rely quite
More information about the Pypy-commit
mailing list