[pypy-commit] extradoc extradoc: merge heads

antocuni noreply at buildbot.pypy.org
Fri Jul 29 16:38:01 CEST 2011


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: extradoc
Changeset: r3844:d19d57e5c26d
Date: 2011-07-29 15:51 +0200
http://bitbucket.org/pypy/extradoc/changeset/d19d57e5c26d/

Log:	merge heads

diff --git a/planning/jit.txt b/planning/jit.txt
--- a/planning/jit.txt
+++ b/planning/jit.txt
@@ -1,3 +1,5 @@
+tasks with "(( ))" around them are unlikely.
+
 BUGS
 ----
 
@@ -8,23 +10,15 @@
   [arigo] - cpython has sys._current_frames(), but not pypy; however
             relying on this looks like it's not the job of the jit
 
-* we should run nightly 64bit benchmarks. As of mid-April, richards
-  was noticably (30-50%) slower on 64bit than 32bit. I didn't notice
-  other benchmarks, but since we don't run it, we don't have a way
-  to compare.
+* fix the cases of MemoryError during the execution of machine code
+  (they are now a fatal RPython error)
+
 
 NEW TASKS
 ---------
 
-- think about whether W_TypeObject._pure_lookup_where_with_method_cache needs a
-  different decorator, because it cannot be moved around arbitrarily.
-
 - have benchmarks for jit compile time and jit memory usage
   
-- kill GUARD_(NO)_EXCEPTION; replace that by LAST_EXC_VALUE to load the
-  current exception from the struct in memory, followed by a regular
-  GUARD_CLASS.  (Armin: Look like a simplification, but it's a bit messy too)
-
 - maybe refactor a bit the x86 backend, particularly the register
   allocation
 
@@ -32,17 +26,8 @@
   is a compile time constant (and call unrolled version of string formatting
   loop in this case).
 
-- generators??
-
 - consider how much old style classes in stdlib hurt us.
 
-- support raw mallocs
-
-- support casting from Signed to an opaque pointer
-
-- local imports should be jitted more efficiently, right now they produce a
-  long trace and they are rather common (e.g. in translate.py)
-
 - the integer range analysis cannot deal with int_between, because it is
   lowered to uint arithmetic too early
 
@@ -52,23 +37,19 @@
   re.search("(ab)+", "a" * 1000 + "b") almost doesn't get compiled and
   gets very modest speedups with the JIT on (10-20%)
 
-- consider an automated way to take a function with a loop and generate a
+- consider an automated way in RPython: a function with a loop and generate a
   JITable preamble and postamble with a call to the loop in the middle.
 
 - implement small tuples, there are a lot of places where they are hashed and
   compared
 
+- support single floats in the JIT
+
 OPTIMIZATIONS
 -------------
 
 Things we can do mostly by editing optimizeopt/:
 
-- getfields which result is never used never get removed (probable cause -
-  they used to be as livevars in removed guards). also getfields which result
-  is only used as a livevar in a guard should be removed and encoded in
-  the guard recovert code (only if we are sure that the stored field cannot
-  change)
-
 - if we move a promotion up the chain, some arguments don't get replaced
   with constants (those between current and previous locations). So we get
   like
@@ -80,10 +61,15 @@
   maybe we should move promote even higher, before the first use and we
   could possibly remove more stuff?
 
-- f31 = f17 * f16
-  f32 = f16 * f17
+  This shows up in another way as well, the Python code
 
-  Should be just a matter of synthesizing reverse operations in rewrite.py
+  if x is None:
+      i += x
+
+  We promote the guard_nonnull when we load x into guard_nonnull class,
+  however this happens after the optimizer sees `x is None`, so that ptr_eq
+  still remains, even though it's obviously not necessary since x and None
+  will have different known_classes.
 
 - optimize arraycopy also in the cases where one of the arrays is a virtual and
   short. This is seen a lot in translate.py
@@ -95,36 +81,17 @@
 Extracted from some real-life Python programs, examples that don't give
 nice code at all so far:
 
-- string manipulation: s[n], s[-n], s[i:j], most operations on single
-  chars, building a big string with repeated "s += t", "a,b=s.split()",
-  etc.  PARTIALLY DONE with virtual strings
-
-- http://paste.pocoo.org/show/188520/
-  this will compile new assembler path for each new type, even though that's
-  overspecialization since in this particular case it's not relevant.
-  This is treated as a megamorphic call (promotion of w_self in typeobject.py)
-  while in fact it is not.
-
-- guard_true(frame.is_being_profiled) all over the place
-
-- cProfile should be supported (right now it prevents JITting completely):
-  the calls to get the time should be done with the single assembler
-  instruction "read high-perf time stamp".  The dict lookups done by
-  cProfile should be folded away. IN PROGRESS
-
 - let super() work with the method cache.
 
-- turn max(x, y)/min(x, y) into MAXSD, MINSD instructions when x and y are
-  floats.
-
-- xxx (find more examples :-)
+- ((turn max(x, y)/min(x, y) into MAXSD, MINSD instructions when x and y are
+  floats.))
 
 BACKEND TASKS
 -------------
 
-Look into avoiding double load of memory into register on 64bit.
+Look into avoiding double load of constant into register on 64bit.
 In case we want to first read a value, increment it and store (for example),
-we end up with double load of memory into register. Like:
+we end up with double load of constant into register. Like:
 
 movabs 0xsomemem,r11
 mov    (r11), r10
@@ -139,14 +106,12 @@
 
 - think out looking into functions or not, based on arguments,
   for example contains__Tuple should be unrolled if tuple is of constant
-  length. HARD, blocked by the fact that we don't know constants soon enough
+  length.  This should be possible now that we do some heap opt during
+  tracing.
   Also, an unrolled loop means several copies of the guards, which may
   fail independently, leading to an exponential number of bridges
 
-- out-of-line guards (when an external change would invalidate existing
-  pieces of assembler)
-
-- merge tails of loops-and-bridges?
+- ((merge tails of loops-and-bridges?))
 
 UNROLLING
 ---------
diff --git a/talk/icooolps2011/talk/figures/bench.pdf b/talk/icooolps2011/talk/figures/bench.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0def86736f36c863a02694883f29401e911f9c25
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/map.svg b/talk/icooolps2011/talk/figures/map.svg
new file mode 100644
--- /dev/null
+++ b/talk/icooolps2011/talk/figures/map.svg
@@ -0,0 +1,386 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg7587"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   width="345"
+   height="337.5"
+   xml:space="preserve"
+   sodipodi:docname="map.svg"><metadata
+     id="metadata7593"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs7591"><marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;"><path
+         id="path8573"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" /></marker><marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible"><path
+         id="path8570"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" /></marker><marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible"><path
+         id="path8552"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" /></marker><marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lstart-9"
+       style="overflow:visible"><path
+         inkscape:connector-curvature="0"
+         id="path8570-9"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(1.1,0,0,1.1,1.1,0)" /></marker><marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3072"
+       style="overflow:visible"><path
+         inkscape:connector-curvature="0"
+         id="path3074"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(1.1,0,0,1.1,1.1,0)" /></marker><marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3076"
+       style="overflow:visible"><path
+         inkscape:connector-curvature="0"
+         id="path3078"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(1.1,0,0,1.1,1.1,0)" /></marker></defs><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     id="namedview7589"
+     showgrid="false"
+     inkscape:zoom="1.3953574"
+     inkscape:cx="180.9687"
+     inkscape:cy="130.03147"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" /><g
+     id="g7595"
+     inkscape:groupmode="layer"
+     inkscape:label="map"
+     transform="matrix(1.25,0,0,-1.25,0,337.5)"
+     style="display:inline"><path
+       inkscape:connector-curvature="0"
+       id="path7599"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 137.00001,5.5000016 54,0 0,27.0000004 -54,0 0,-27.0000004 z" /><g
+       style="display:inline"
+       id="g7601"
+       transform="translate(-1.5999963,1.55e-6)"><text
+         id="text7603"
+         transform="matrix(1,0,0,-1,150,15.9)"><tspan
+           id="tspan7605"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">map</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7607"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 41.000003,89.500002 94.000007,0 0,26.999998 -94.000007,0 0,-26.999998 z" /><g
+       transform="translate(3.6875e-6,1.55e-6)"
+       style="display:inline"
+       id="g7609"><text
+         id="text7611"
+         transform="matrix(1,0,0,-1,49,99.9)"><tspan
+           id="tspan7613"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">map</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7615"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 85.000004,89.500002 0,26.999998" /><g
+       transform="translate(3.6875e-6,1.55e-6)"
+       style="display:inline"
+       id="g7617"><text
+         id="text7619"
+         transform="matrix(1,0,0,-1,93,99.9)"><tspan
+           id="tspan7621"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">&quot;a&quot;: 0</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7623"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);display:inline"
+       d="m 61.666926,88.403292 c -0.28975,-53.48554 77.329454,-37.28639 85.603084,-55.68339"
+       sodipodi:nodetypes="cc" /><g
+       style="display:inline"
+       id="g7629"
+       transform="translate(-46.399996,1.55e-6)"><text
+         id="text7631"
+         transform="matrix(1,0,0,-1,128,57.9)"
+         sodipodi:linespacing="125%"
+         style="line-height:125%"><tspan
+           id="tspan7633"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">add &quot;a&quot;</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7659"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);display:inline"
+       d="m 88.000004,172.5777 c 0,-15.04 0,-43.4477 0,-55.9677"
+       sodipodi:nodetypes="cc" /><g
+       style="display:inline"
+       id="g7665"
+       transform="translate(-54.179668,-2.2933184)"><text
+         id="text7667"
+         transform="matrix(1,0,0,-1,88,141.9)"><tspan
+           id="tspan7669"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">add &quot;b&quot;</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7671"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 152.50001,89.500002 93,0 0,26.999998 -93,0 0,-26.999998 z" /><g
+       transform="translate(3.6875e-6,1.55e-6)"
+       style="display:inline"
+       id="g7673"><text
+         id="text7675"
+         transform="matrix(1,0,0,-1,160.5,99.9)"><tspan
+           id="tspan7677"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">map</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7679"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 196.50001,89.500002 0,26.999998" /><g
+       transform="translate(3.6875e-6,1.55e-6)"
+       style="display:inline"
+       id="g7681"><text
+         id="text7683"
+         transform="matrix(1,0,0,-1,204.5,99.9)"><tspan
+           id="tspan7685"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">&quot;c&quot;: 0</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7687"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);display:inline"
+       d="m 175.60009,87.896522 c 0.55996,-17.18675 -0.61008,-42.52662 -5.93008,-55.28632"
+       sodipodi:nodetypes="cc" /><g
+       transform="translate(3.6875e-6,1.55e-6)"
+       style="display:inline"
+       id="g7693"><text
+         id="text7695"
+         transform="matrix(1,0,0,-1,185,57.9)"><tspan
+           id="tspan7697"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">add &quot;c&quot;</tspan></text>
+</g></g><g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="othermaps"><path
+       inkscape:connector-curvature="0"
+       id="path7635"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 20,120.625 180,0 0,-33.75 -180,0 0,33.75 z" /><g
+       transform="matrix(1.25,0,0,-1.25,0,337.5)"
+       style="display:inline"
+       id="g7637"><text
+         id="text7639"
+         transform="matrix(1,0,0,-1,24,183.9)"><tspan
+           id="tspan7641"
+           sodipodi:role="line"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           y="0"
+           x="0">map</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7643"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 75,120.625 0,-33.75" /><g
+       style="display:inline"
+       id="g7645"
+       transform="matrix(1.25,0,0,-1.25,-3.040541,337.5)"><text
+         id="text7647"
+         transform="matrix(1,0,0,-1,68,183.9)"><tspan
+           id="tspan7649"
+           sodipodi:role="line"
+           y="0"
+           x="0"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">&quot;a&quot;: 0</tspan></text>
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7651"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;display:inline"
+       d="m 137.5,120.625 0,-33.75" /><g
+       style="display:inline"
+       id="g7653"
+       transform="matrix(1.25,0,0,-1.25,-2.280406,337.5)"><text
+         id="text7655"
+         transform="matrix(1,0,0,-1,118,183.9)"><tspan
+           id="tspan7657"
+           sodipodi:role="line"
+           style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           y="0"
+           x="0">&quot;b&quot;: 1</tspan></text>
+</g></g><g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="instance"
+     style="display:inline"><path
+       inkscape:connector-curvature="0"
+       id="path7699"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4.375,38.125 216.25,0 0,-33.75 -216.25,0 0,33.75 z" /><g
+       transform="matrix(1.25,0,0,-1.25,0,337.5)"
+       id="g7701"><text
+   id="text7703"
+   transform="scale(1,-1)"
+   x="8.2999992"
+   y="-249.89999"><tspan
+     id="tspan7705"
+     sodipodi:role="line"
+     y="-249.89999"
+     x="8.2999992"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">instance</tspan></text>
+
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7707"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 88.125,38.125 0,-33.75" /><g
+       transform="matrix(1.25,0,0,-1.25,0,337.5)"
+       id="g7709"><text
+   id="text7711"
+   transform="matrix(1,0,0,-1,78.5,249.9)"><tspan
+     id="tspan7713"
+     sodipodi:role="line"
+     y="0"
+     x="0"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">map</tspan></text>
+
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7715"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 143.125,38.125 0,-33.75" /><g
+       transform="matrix(1.25,0,0,-1.25,-4,337.5)"
+       id="g7717"><text
+   id="text7719"
+   transform="matrix(1,0,0,-1,122.5,249.9)"><tspan
+     id="tspan7721"
+     sodipodi:role="line"
+     y="0"
+     x="0"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">storage</tspan></text>
+
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7723"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
+       d="m 116.25,38.75 c 0,15.95625 -29.023232,21.181513 -46.148391,25.07996 -17.125159,3.898448 -22.352245,6.470079 -22.395088,22.186633"
+       sodipodi:nodetypes="csc" /><path
+       inkscape:connector-curvature="0"
+       id="path7753"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Lend)"
+       d="m 220.70834,20.891669 c 27.3875,0 30.31159,37.898872 30.22409,65.173872"
+       sodipodi:nodetypes="cc" /><path
+       inkscape:connector-curvature="0"
+       id="path7729"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 221.875,120.625 118.75,0 0,-33.75 -118.75,0 0,33.75 z" /><g
+       transform="matrix(1.25,0,0,-1.25,-2,337.5)"
+       id="g7731"><text
+   id="text7733"
+   transform="matrix(1,0,0,-1,185.5,183.9)"><tspan
+     id="tspan7735"
+     sodipodi:role="line"
+     y="0"
+     x="0"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">array</tspan></text>
+
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7737"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 280.625,120.625 0,-33.75" /><g
+       transform="matrix(1.25,0,0,-1.25,0,337.5)"
+       id="g7739"><text
+   id="text7741"
+   transform="matrix(1,0,0,-1,232.5,183.9)"><tspan
+     id="tspan7743"
+     y="0"
+     x="0"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">4</tspan></text>
+
+</g><path
+       inkscape:connector-curvature="0"
+       id="path7745"
+       style="fill:none;stroke:#000000;stroke-width:1.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none"
+       d="m 310.625,120.625 0,-33.75" /><g
+       transform="matrix(1.25,0,0,-1.25,0,337.5)"
+       id="g7747"><text
+   id="text7749"
+   transform="matrix(1,0,0,-1,256.5,183.9)"><tspan
+     id="tspan7751"
+     y="0"
+     x="0"
+     style="font-size:14px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans">6</tspan></text>
+
+</g></g></svg>
\ No newline at end of file
diff --git a/talk/icooolps2011/talk/figures/map01.pdf b/talk/icooolps2011/talk/figures/map01.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b02a6212807255e3be3a63808946c1f87b32a64a
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/map02.pdf b/talk/icooolps2011/talk/figures/map02.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8f23b0fb78a661be86adf7790844570eed590ef5
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/map03.pdf b/talk/icooolps2011/talk/figures/map03.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e9944db6caa3a34e1852cfb8934df628bf64d089
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/metatrace01.pdf b/talk/icooolps2011/talk/figures/metatrace01.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0b7181b5a476093c16ff1233f37535378ef7bf8a
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/trace-levels-metatracing.svg b/talk/icooolps2011/talk/figures/trace-levels-metatracing.svg
new file mode 100644
--- /dev/null
+++ b/talk/icooolps2011/talk/figures/trace-levels-metatracing.svg
@@ -0,0 +1,833 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="631.4259"
+   height="572.15759"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="trace-levels-metatracing.svg"
+   inkscape:export-filename="/home/cfbolz/code/hguserdir/blog/figures/trace-levels.png"
+   inkscape:export-xdpi="90.25"
+   inkscape:export-ydpi="90.25"
+   style="enable-background:new">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.2630942"
+     inkscape:cx="354.09498"
+     inkscape:cy="304.13646"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="1026"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     showguides="true"
+     fit-margin-left="2"
+     fit-margin-top="2"
+     fit-margin-right="2"
+     fit-margin-bottom="1" />
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4622"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4167"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-96"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-15"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-36"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-28"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4167-01"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-77"
+       style="overflow:visible">
+      <path
+         id="path4167-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4"
+       style="overflow:visible">
+      <path
+         id="path4167-69"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-57"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8"
+       style="overflow:visible">
+      <path
+         id="path4622-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-8"
+       style="overflow:visible">
+      <path
+         id="path4167-69-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3451"
+       style="overflow:visible">
+      <path
+         id="path3453"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-86"
+       style="overflow:visible">
+      <path
+         id="path4167-69-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend-8S"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8S"
+       style="overflow:visible">
+      <path
+         id="path4788"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend-8Si"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8Si"
+       style="overflow:visible">
+      <path
+         id="path5101"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-4"
+       style="overflow:visible">
+      <path
+         id="path4622-53"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-9.7365116,-257.07322)"
+     style="display:inline">
+    <rect
+       style="color:#000000;fill:#8081ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96006155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985"
+       width="329.2496"
+       height="62.934772"
+       x="12.979328"
+       y="764.31604" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="27.294424"
+       y="791.90527"
+       id="text2987"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989"
+         x="27.294424"
+         y="791.90527">CPU</tspan></text>
+    <rect
+       style="color:#000000;fill:#ccffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-3"
+       width="328.78635"
+       height="211.02032"
+       x="12.979328"
+       y="482.31604" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="27.294424"
+       y="509.90527"
+       id="text2987-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-0"
+         x="27.294424"
+         y="509.90527">Interpreter</tspan><tspan
+         sodipodi:role="line"
+         x="27.294424"
+         y="534.90527"
+         id="tspan3342" /></text>
+    <rect
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-3-6"
+       width="328.78635"
+       height="211.02032"
+       x="12.979328"
+       y="260.31604" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="27.294424"
+       y="287.90527"
+       id="text2987-5-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-0-0"
+         x="27.294424"
+         y="287.90527">User Program</tspan></text>
+    <g
+       id="g3342"
+       transform="translate(0,-60)">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.70599997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-96"
+         width="78.920738"
+         height="77.071976"
+         x="46.430405"
+         y="380.9437" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-6"
+         y="395.75009"
+         x="50.956161"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="395.75009"
+           x="50.956161"
+           id="tspan2989-0-4-1"
+           sodipodi:role="line">f1</tspan></text>
+      <path
+         sodipodi:nodetypes="zzz"
+         inkscape:connector-curvature="0"
+         id="path3211-7"
+         d="m 87.709958,407.63909 c 27.779202,0 27.923372,33.26568 -0.02234,33.25279 -27.945707,-0.0129 -27.756856,-33.25279 0.02234,-33.25279 z"
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:url(#Arrow1Lend-4);marker-end:url(#Arrow1Lend-4)" />
+    </g>
+    <g
+       transform="translate(92.491357,-133.72494)"
+       id="g3206-5-5-6">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-96-4-6"
+         width="46.603455"
+         height="39.70393"
+         x="51.640251"
+         y="546.90326" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-6-0-3"
+         y="562.09229"
+         x="56.548615"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="562.09229"
+           x="56.548615"
+           id="tspan2989-0-4-1-4-7"
+           sodipodi:role="line">f2</tspan></text>
+    </g>
+    <g
+       id="g4605"
+       transform="translate(4.1414692e-7,263.24881)">
+      <g
+         transform="translate(-22,-266)"
+         id="g3206">
+        <rect
+           style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect3101"
+           width="92.428955"
+           height="90.408653"
+           x="52.022858"
+           y="547.28589" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text2987-5-6"
+           y="562.09229"
+           x="56.548615"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           xml:space="preserve"><tspan
+             y="562.09229"
+             x="56.548615"
+             id="tspan2989-0-4"
+             sodipodi:role="line">main_loop</tspan></text>
+      </g>
+      <path
+         sodipodi:nodetypes="zzz"
+         inkscape:connector-curvature="0"
+         id="path3211"
+         d="m 72.730983,317.98129 c 27.779197,0 27.923367,33.26568 -0.02234,33.25279 -27.945707,-0.0129 -27.756856,-33.25279 0.02234,-33.25279 z"
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:url(#Arrow1Lend)" />
+    </g>
+    <g
+       transform="translate(145.69796,242.03561)"
+       id="g4605-0">
+      <rect
+         y="281.28589"
+         x="6.0228596"
+         height="46.018757"
+         width="103.17617"
+         id="rect3101-9"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50757229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         x="10.548616"
+         y="296.09229"
+         id="text2987-5-6-92"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan2989-0-4-3"
+           x="10.548616"
+           y="296.09229">BINARY_ADD</tspan></text>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5062"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5064"><rect
+           id="rect5066"
+           width="839.43677"
+           height="705.08649"
+           x="-127.27922"
+           y="-361.01239" /></flowRegion><flowPara
+         id="flowPara5068" /></flowRoot>    <g
+       transform="translate(105.8506,62.30214)"
+       id="g3206-86-2">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.847857;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-9-6"
+         width="118.33421"
+         height="63.81213"
+         x="52.022858"
+         y="547.28589" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-92-4"
+         y="562.09229"
+         x="56.548615"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="562.09229"
+           x="56.548615"
+           id="tspan2989-0-4-3-7"
+           sodipodi:role="line">JUMP_IF_FALSE</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 122.73353,563.04735 28.78935,-9.09137"
+       id="path3178"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="316.96429"
+       y="312.48734"
+       id="text4614"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4616"
+         x="316.96429"
+         y="312.48734" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="305.89285"
+       y="315.16592"
+       id="text4618"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4620"
+         x="305.89285"
+         y="315.16592" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="311.78571"
+       y="318.38019"
+       id="text4622"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4624"
+         x="311.78571"
+         y="318.38019" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 83.536404,636.54687 26.467916,10.73006"
+       id="path3178-6-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="108.75043"
+       y="655.70093"
+       id="text4626-3-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4628-6-4"
+         x="108.75043"
+         y="655.70093"
+         style="font-size:14px">...</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4893"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       transform="translate(0,308.2677)"><flowRegion
+         id="flowRegion4895"><rect
+           id="rect4897"
+           width="112.85714"
+           height="475.71429"
+           x="697.14288"
+           y="36.237335"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /></flowRegion><flowPara
+         id="flowPara4899" /></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4901"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       transform="translate(0,308.2677)"><flowRegion
+         id="flowRegion4903"><rect
+           id="rect4905"
+           width="117.14286"
+           height="477.14285"
+           x="695.71429"
+           y="36.237335"
+           style="font-size:14px" /></flowRegion><flowPara
+         id="flowPara4907" /></flowRoot>    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="279.19788"
+       y="588.15918"
+       id="text4626-3-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4628-6-5"
+         x="279.19788"
+         y="588.15918"
+         style="font-size:14px">...</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 123.3829,615.40923 31.73578,7.24791"
+       id="path3178-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.11568248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend);display:inline"
+       d="m 124.90916,373.99027 45.33595,38.41103"
+       id="path3178-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer"
+     style="display:inline"
+     transform="translate(1.1903381e-8,57.816607)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.92068112px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-4);display:inline"
+       d="m 338.94561,413.37957 87.94523,0"
+       id="path4681"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       style="display:inline"
+       id="g3353"
+       transform="translate(-305.73651,-312.88983)">
+      <rect
+         y="338.18433"
+         x="801.7019"
+         height="414.44675"
+         width="129.29953"
+         id="rect3078"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.97962713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <g
+         id="g3348">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend-4)"
+           d="m 800.0092,753.37186 c -44.19418,0 -44.18497,-46.20687 -43.59925,-163.71044 0.58573,-117.50357 -3.15152,-226.8482 43.14621,-250.34069"
+           id="path3211-7-4"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="czc" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text2987-5-1-7"
+           y="332.08514"
+           x="804.76465"
+           style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           xml:space="preserve"><tspan
+             y="332.08514"
+             x="804.76465"
+             id="tspan2989-0-0-2"
+             sodipodi:role="line">Trace for f1</tspan></text>
+      </g>
+      <flowRoot
+         transform="translate(110,308.2677)"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="flowRoot4909"
+         xml:space="preserve"><flowRegion
+           id="flowRegion4911"><rect
+             ry="0"
+             style="font-size:14px"
+             y="33.380196"
+             x="696.42853"
+             height="474.28592"
+             width="123.57162"
+             id="rect4913" /></flowRegion><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara4919">ops from</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5621">main_loop</flowPara><flowPara
+           id="flowPara4923"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5645">...</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5651" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5675" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5671">ops from</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5647">BINARY_ADD</flowPara><flowPara
+           id="flowPara4935"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5667">...</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5629" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5665" /><flowPara
+           id="flowPara4973"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">more ops from</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5687">main_loop</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5677"></flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5691">...</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5683" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5639">ops_from</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5395">JUMP_IF_FALSE</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5397">guard(...)</flowPara><flowPara
+           id="flowPara4985"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5641" /><flowPara
+           id="flowPara4987"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">jump to start</flowPara></flowRoot>    </g>
+    <g
+       transform="translate(-350.96204,-156.54852)"
+       style="display:inline"
+       id="g3434">
+      <rect
+         y="542.21619"
+         x="354.40051"
+         height="56.736866"
+         width="328.9693"
+         id="rect2985-3-1"
+         style="color:#000000;fill:#ccffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-9"
+         y="569.90527"
+         x="371.27411"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="569.90527"
+           x="371.27411"
+           id="tspan2989-0-3"
+           sodipodi:role="line">Tracer</tspan></text>
+    </g>
+    <rect
+       style="color:#000000;fill:#8080ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96006155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-4"
+       width="625.20306"
+       height="62.934772"
+       x="3.2428167"
+       y="449.42621" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="17.557913"
+       y="477.01544"
+       id="text2987-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-08"
+         x="17.557913"
+         y="477.01544">CPU</tspan></text>
+  </g>
+  <g
+     style="display:none"
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="arrow"
+     transform="translate(1.1903381e-8,57.816607)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend-8Si);display:inline"
+       d="m 408.82192,376.13064 c -0.71528,42.15343 -4.29616,68.30777 -135.67284,68.30777"
+       id="path4681-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/talk/icooolps2011/talk/figures/trace-levels-tracing.svg b/talk/icooolps2011/talk/figures/trace-levels-tracing.svg
new file mode 100644
--- /dev/null
+++ b/talk/icooolps2011/talk/figures/trace-levels-tracing.svg
@@ -0,0 +1,991 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="527.71234"
+   height="512.15759"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="trace-levels-tracing.svg"
+   inkscape:export-filename="/home/cfbolz/code/hguserdir/blog/figures/trace-levels.png"
+   inkscape:export-xdpi="90.25"
+   inkscape:export-ydpi="90.25"
+   style="enable-background:new">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.2630942"
+     inkscape:cx="374.3166"
+     inkscape:cy="256.08026"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer5"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="1026"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     showguides="true"
+     fit-margin-left="2"
+     fit-margin-top="2"
+     fit-margin-right="2"
+     fit-margin-bottom="1" />
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4622"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4167"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-96"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-15"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-36"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-6"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-28"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4167-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4167-01"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-77"
+       style="overflow:visible">
+      <path
+         id="path4167-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4"
+       style="overflow:visible">
+      <path
+         id="path4167-69"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-2"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-5"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4622-57"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8"
+       style="overflow:visible">
+      <path
+         id="path4622-1"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-8"
+       style="overflow:visible">
+      <path
+         id="path4167-69-9"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3451"
+       style="overflow:visible">
+      <path
+         id="path3453"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-86"
+       style="overflow:visible">
+      <path
+         id="path4167-69-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend-8S"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8S"
+       style="overflow:visible">
+      <path
+         id="path4788"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend-8Si"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-8Si"
+       style="overflow:visible">
+      <path
+         id="path5101"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-4"
+       style="overflow:visible">
+      <path
+         id="path4622-53"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-5"
+       style="overflow:visible">
+      <path
+         id="path4622-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-7"
+       style="overflow:visible">
+      <path
+         id="path4167-69-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6516"
+       style="overflow:visible">
+      <path
+         id="path6518"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-3"
+       style="overflow:visible">
+      <path
+         id="path4167-69-90"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6627"
+       style="overflow:visible">
+      <path
+         id="path6629"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-4-2"
+       style="overflow:visible">
+      <path
+         id="path4167-69-0"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6823"
+       style="overflow:visible">
+      <path
+         id="path6825"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend-56"
+       style="overflow:visible">
+      <path
+         id="path4622-14"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-9.7365115,-317.07322)"
+     style="display:inline">
+    <rect
+       style="color:#000000;fill:#8081ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96006155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985"
+       width="329.2496"
+       height="62.934772"
+       x="12.979328"
+       y="764.31604" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="27.294424"
+       y="791.90527"
+       id="text2987"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989"
+         x="27.294424"
+         y="791.90527">CPU</tspan></text>
+    <rect
+       style="color:#000000;fill:#ccffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-3"
+       width="328.78635"
+       height="211.02032"
+       x="12.979328"
+       y="542.31604" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="27.294424"
+       y="569.90527"
+       id="text2987-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-0"
+         x="27.294424"
+         y="569.90527">Interpreter</tspan><tspan
+         sodipodi:role="line"
+         x="27.294424"
+         y="594.90527"
+         id="tspan3342" /></text>
+    <rect
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-3-6"
+       width="328.78635"
+       height="211.02032"
+       x="12.979328"
+       y="320.31604" />
+    <g
+       id="g4605"
+       transform="translate(4.1414692e-7,323.24881)">
+      <g
+         transform="translate(-22,-266)"
+         id="g3206">
+        <rect
+           style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect3101"
+           width="92.428955"
+           height="90.408653"
+           x="52.022858"
+           y="547.28589" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text2987-5-6"
+           y="562.09229"
+           x="56.548615"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           xml:space="preserve"><tspan
+             y="562.09229"
+             x="56.548615"
+             id="tspan2989-0-4"
+             sodipodi:role="line">main_loop</tspan></text>
+      </g>
+      <path
+         sodipodi:nodetypes="zzz"
+         inkscape:connector-curvature="0"
+         id="path3211"
+         d="m 72.730983,317.98129 c 27.779197,0 27.923367,33.26568 -0.02234,33.25279 -27.945707,-0.0129 -27.756856,-33.25279 0.02234,-33.25279 z"
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:url(#Arrow1Lend)" />
+    </g>
+    <g
+       transform="translate(145.69796,302.03561)"
+       id="g4605-0">
+      <rect
+         y="281.28589"
+         x="6.0228596"
+         height="46.018757"
+         width="103.17617"
+         id="rect3101-9"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.50757229;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         x="10.548616"
+         y="296.09229"
+         id="text2987-5-6-92"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan2989-0-4-3"
+           x="10.548616"
+           y="296.09229">BINARY_ADD</tspan></text>
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5062"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5064"><rect
+           id="rect5066"
+           width="839.43677"
+           height="705.08649"
+           x="-127.27922"
+           y="-361.01239" /></flowRegion><flowPara
+         id="flowPara5068" /></flowRoot>    <g
+       transform="translate(105.8506,122.30214)"
+       id="g3206-86-2">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.847857;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-9-6"
+         width="118.33421"
+         height="63.81213"
+         x="52.022858"
+         y="547.28589" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-92-4"
+         y="562.09229"
+         x="56.548615"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="562.09229"
+           x="56.548615"
+           id="tspan2989-0-4-3-7"
+           sodipodi:role="line">JUMP_IF_FALSE</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 122.73353,314.77965 28.78935,-9.09137"
+       id="path3178"
+       inkscape:connector-curvature="0"
+       transform="translate(0,308.2677)" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="316.96429"
+       y="312.48734"
+       id="text4614"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4616"
+         x="316.96429"
+         y="312.48734" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="305.89285"
+       y="315.16592"
+       id="text4618"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4620"
+         x="305.89285"
+         y="315.16592" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="311.78571"
+       y="318.38019"
+       id="text4622"
+       sodipodi:linespacing="125%"
+       transform="translate(0,308.2677)"><tspan
+         sodipodi:role="line"
+         id="tspan4624"
+         x="311.78571"
+         y="318.38019" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 83.536404,696.54687 26.467916,10.73006"
+       id="path3178-6-4"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="108.75043"
+       y="715.70093"
+       id="text4626-3-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4628-6-4"
+         x="108.75043"
+         y="715.70093"
+         style="font-size:14px">...</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4893"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       transform="translate(0,308.2677)"><flowRegion
+         id="flowRegion4895"><rect
+           id="rect4897"
+           width="112.85714"
+           height="475.71429"
+           x="697.14288"
+           y="36.237335"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /></flowRegion><flowPara
+         id="flowPara4899" /></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4901"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       transform="translate(0,308.2677)"><flowRegion
+         id="flowRegion4903"><rect
+           id="rect4905"
+           width="117.14286"
+           height="477.14285"
+           x="695.71429"
+           y="36.237335"
+           style="font-size:14px" /></flowRegion><flowPara
+         id="flowPara4907" /></flowRoot>    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="279.19788"
+       y="648.15918"
+       id="text4626-3-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4628-6-5"
+         x="279.19788"
+         y="648.15918"
+         style="font-size:14px">...</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 123.3829,675.40923 31.73578,7.24791"
+       id="path3178-3"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="tracing"
+     style="display:inline"
+     transform="translate(1.1920929e-7,-2.1833934)">
+    <g
+       transform="translate(-9.7365125,-314.88983)"
+       style="display:inline"
+       id="g3434">
+      <rect
+         y="542.31604"
+         x="354.97931"
+         height="211.02032"
+         width="178.36209"
+         id="rect2985-3-1"
+         style="color:#000000;fill:#ccffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-9"
+         y="569.90527"
+         x="371.27411"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="569.90527"
+           x="371.27411"
+           id="tspan2989-0-3"
+           sodipodi:role="line">Tracer</tspan></text>
+    </g>
+    <rect
+       style="color:#000000;fill:#8080ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96006155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-4"
+       width="521.4895"
+       height="62.934772"
+       x="3.2428167"
+       y="449.42621" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="17.557913"
+       y="477.01544"
+       id="text2987-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-08"
+         x="17.557913"
+         y="477.01544">CPU</tspan></text>
+    <rect
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.48563313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-3-6-1"
+       width="520.37933"
+       height="211.02032"
+       x="3.2428164"
+       y="5.4262099" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="trace"
+     style="display:none"
+     transform="translate(1.1920929e-7,-2.1833934)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.92068112px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-4);display:inline"
+       d="m 528.83844,336.58403 87.94523,0"
+       id="path4681"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       style="display:inline"
+       id="g3353"
+       transform="translate(-173.73651,-312.88983)">
+      <rect
+         y="338.18433"
+         x="801.7019"
+         height="414.44675"
+         width="129.29953"
+         id="rect3078"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.97962713;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      <g
+         id="g3348">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend-4)"
+           d="m 800.0092,753.37186 c -44.19418,0 -44.18497,-46.20687 -43.59925,-163.71044 0.58573,-117.50357 -3.15152,-226.8482 43.14621,-250.34069"
+           id="path3211-7-4"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="czc" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text2987-5-1-7"
+           y="332.08514"
+           x="804.76465"
+           style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           xml:space="preserve"><tspan
+             y="332.08514"
+             x="804.76465"
+             id="tspan2989-0-0-2"
+             sodipodi:role="line">Trace for f1</tspan></text>
+      </g>
+      <flowRoot
+         transform="translate(110,308.2677)"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         id="flowRoot4909"
+         xml:space="preserve"><flowRegion
+           id="flowRegion4911"><rect
+             ry="0"
+             style="font-size:14px"
+             y="33.380196"
+             x="696.42853"
+             height="474.28592"
+             width="123.57162"
+             id="rect4913" /></flowRegion><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara4919">bytecodes from f1</flowPara><flowPara
+           id="flowPara4923"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">...</flowPara><flowPara
+           id="flowPara4933"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">BINARY_ADD</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5389" /><flowPara
+           id="flowPara4935"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">...</flowPara><flowPara
+           id="flowPara4937"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara4939"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">bytecodes from</flowPara><flowPara
+           id="flowPara4941"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">f2</flowPara><flowPara
+           id="flowPara4957"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara4961"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara6968"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">...</flowPara><flowPara
+           id="flowPara6966"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara6958"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5425">more bytecodes</flowPara><flowPara
+           id="flowPara4973"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">from</flowPara><flowPara
+           id="flowPara4975"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">f1</flowPara><flowPara
+           id="flowPara4977"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara4979"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">...</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5395">JUMP_IF_FALSE</flowPara><flowPara
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+           id="flowPara5397">guard(...)</flowPara><flowPara
+           id="flowPara4985"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono" /><flowPara
+           id="flowPara4987"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono">jump to start</flowPara></flowRoot>    </g>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="running"
+     style="display:none"
+     transform="translate(1.1920929e-7,-2.1833934)">
+    <rect
+       style="color:#000000;fill:#8080ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.96006155;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect2985-4-6"
+       width="756.6264"
+       height="62.934772"
+       x="3.2428167"
+       y="449.42621" />
+  </g>
+  <g
+     style="display:none"
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="arrow"
+     transform="translate(1.1920929e-7,-2.1833934)">
+    <path
+       style="fill:none;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend-8Si);display:inline"
+       d="m 408.82192,376.13064 c -0.71528,42.15343 -4.29616,68.30777 -135.67284,68.30777"
+       id="path4681-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="top"
+     transform="translate(1.1920929e-7,-2.1833934)">
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="17.557913"
+       y="477.01544"
+       id="text2987-0-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-08-0"
+         x="17.557913"
+         y="477.01544">CPU</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="17.557913"
+       y="33.015442"
+       id="text2987-5-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2989-0-0"
+         x="17.557913"
+         y="33.015442">User Program</tspan></text>
+    <g
+       transform="translate(-9.736511,-314.88984)"
+       style="display:inline"
+       id="g3342">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.70599997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-96"
+         width="78.920738"
+         height="77.071976"
+         x="46.430405"
+         y="380.9437" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-6"
+         y="395.75009"
+         x="50.956161"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="395.75009"
+           x="50.956161"
+           id="tspan2989-0-4-1"
+           sodipodi:role="line">f1</tspan></text>
+      <path
+         sodipodi:nodetypes="zzz"
+         inkscape:connector-curvature="0"
+         id="path3211-7"
+         d="m 87.709958,407.63909 c 27.779202,0 27.923372,33.26568 -0.02234,33.25279 -27.945707,-0.0129 -27.756856,-33.25279 0.02234,-33.25279 z"
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-mid:url(#Arrow1Lend-4);marker-end:url(#Arrow1Lend-4)" />
+    </g>
+    <g
+       style="display:inline"
+       transform="translate(82.754845,-388.61478)"
+       id="g3206-5-5-6">
+      <rect
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3101-96-4-6"
+         width="46.603455"
+         height="39.70393"
+         x="51.640251"
+         y="546.90326" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2987-5-6-6-0-3"
+         y="562.09229"
+         x="56.548615"
+         style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="562.09229"
+           x="56.548615"
+           id="tspan2989-0-4-1-4-7"
+           sodipodi:role="line">f2</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.11568248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Mend);display:inline"
+       d="m 115.17265,119.10043 45.33594,38.41103"
+       id="path3178-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/talk/icooolps2011/talk/figures/trace01.pdf b/talk/icooolps2011/talk/figures/trace01.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..252b5089e72d3626e636cd02397204a464c7ca22
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/trace02.pdf b/talk/icooolps2011/talk/figures/trace02.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..ece12fe0c3f96856afea26c49d92ade630db9328
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/trace03.pdf b/talk/icooolps2011/talk/figures/trace03.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..04b38b8996eb2c297214c017bbe1cce1f8f64bdb
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/trace04.pdf b/talk/icooolps2011/talk/figures/trace04.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..472b798aeae005652fc0d749ed6571117c5819d9
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/figures/trace05.pdf b/talk/icooolps2011/talk/figures/trace05.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..977e3bbda8d4d349f27f06fcdaa3bd100e95e1a7
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/talk.pdf b/talk/icooolps2011/talk/talk.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..66d79ac74735959368d77448b8d8606105e447f1
GIT binary patch

[cut]

diff --git a/talk/icooolps2011/talk/talk.tex b/talk/icooolps2011/talk/talk.tex
new file mode 100644
--- /dev/null
+++ b/talk/icooolps2011/talk/talk.tex
@@ -0,0 +1,531 @@
+\documentclass[utf8x]{beamer}
+
+% This file is a solution template for:
+
+% - Talk at a conference/colloquium.
+% - Talk length is about 20min.
+% - Style is ornate.
+
+\mode<presentation>
+{
+  \usetheme{Warsaw}
+  % or ...
+
+  %\setbeamercovered{transparent}
+  % or whatever (possibly just delete it)
+}
+
+
+\usepackage[english]{babel}
+\usepackage{listings}
+\usepackage{fancyvrb}
+\usepackage{ulem}
+\usepackage{color}
+\usepackage{alltt}
+
+\usepackage[utf8x]{inputenc}
+
+\input{pygments}
+
+\newcommand\redsout[1]{{\color{red}\sout{\hbox{\color{black}{#1}}}}}
+\newcommand{\noop}{}
+
+% or whatever
+
+% Or whatever. Note that the encoding and the font should match. If T1
+% does not look nice, try deleting the line with the fontenc.
+
+
+\title[Runtime Feedback in a Meta-Tracing JIT]{Runtime Feedback in a Meta-Tracing JIT for Efficient Dynamic Languages}
+
+\author[Carl Friedrich Bolz et. al.]{\emph{Carl Friedrich Bolz}\inst{1} \and Antonio Cuni\inst{3} \and Maciej Fija&#322;kowski\inst{2} \and Michael Leuschel\inst{1} \and Samuele Pedroni\inst{3} \and Armin Rigo\inst{1}}
+% - Give the names in the same order as the appear in the paper.
+% - Use the \inst{?} command only if the authors have different
+%   affiliation.
+
+\institute[Heinrich-Heine-Universit&#228;t D&#252;sseldorf]
+{$^1$Heinrich-Heine-Universit&#228;t D&#252;sseldorf, STUPS Group, Germany \and
+
+ $^2$merlinux GmbH, Hildesheim, Germany \and
+
+ $^3$Open End, G&#246;teborg, Sweden \and
+}
+
+\date{ICOOOLPS 2011, July 26, 2011}
+% - Either use conference name or its abbreviation.
+% - Not really informative to the audience, more for people (including
+%   yourself) who are reading the slides online
+
+
+% If you have a file called "university-logo-filename.xxx", where xxx
+% is a graphic format that can be processed by latex or pdflatex,
+% resp., then you can add a logo as follows:
+
+
+
+
+% Delete this, if you do not want the table of contents to pop up at
+% the beginning of each subsection:
+%\AtBeginSubsection[]
+%{
+%  \begin{frame}<beamer>
+%    \frametitle{Outline}
+%    \tableofcontents[currentsection,currentsubsection]
+%  \end{frame}
+%}
+
+
+% If you wish to uncover everything in a step-wise fashion, uncomment
+% the following command: 
+
+%\beamerdefaultoverlayspecification{<+->}
+
+
+\begin{document}
+
+\begin{frame}
+  \titlepage
+\end{frame}
+
+\begin{frame}
+  \frametitle{Good JIT Compilers for Dynamic Languages are Hard}
+  \begin{itemize}
+      \item recent languages like Python, Ruby, JS have complex core semantics
+      \item many corner cases, even hard to interpret correctly
+      \pause
+      \item feedback of runtime information to the compiler is necessary
+      \item correct exploitation of this information in the compiler
+  \end{itemize}
+  \pause
+  \begin{block}{Problems}
+      \begin{enumerate}
+          \item implement all corner-cases of semantics correctly
+          \item ... and the common cases efficiently
+          \item feed back and exploit runtime information
+      \end{enumerate}
+  \end{block}
+\end{frame}
+
+\begin{frame}
+  \frametitle{An Interpreter}
+  \includegraphics[scale=0.5]{figures/trace01.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{A Tracing JIT}
+  \includegraphics[scale=0.5]{figures/trace02.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{A Tracing JIT}
+  \includegraphics[scale=0.5]{figures/trace03.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{A Tracing JIT}
+  \includegraphics[scale=0.5]{figures/trace04.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Tracing JITs}
+  Advantages:
+  \begin{itemize}
+      \item can be added to existing VM
+      \item interpreter does a lot of work
+      \item can fall back to interpreter for uncommon paths
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Granularity Problems}
+  \begin{itemize}
+      \item if the tracer records bytecode, not enough information is there
+      \item many dynamic languages have bytecodes that contain complex logic
+      \item need to expand the bytecode in the trace into something more explicit
+      \item this duplicates the lanuage semantics in the tracer/optimizer
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Example: Attribute Reads in Python}
+  What happens when an attribute \texttt{x.m} is read? (simplified)
+  \pause
+  \begin{itemize}
+      \item check for \texttt{x.\_\_getattribute\_\_}, if there, call it
+      \pause
+      \item look for the attribute in the object's dictionary, if it's there, return it
+      \pause
+      \item walk up the MRO and look in each class' dictionary for the attribute
+      \pause
+      \item if the attribute is found, call its \texttt{\_\_get\_\_} attribute and return the result
+      \pause
+      \item if the attribute is not found, look for \texttt{x.\_\_getattr\_\_}, if there, call it
+      \pause
+      \item raise an \texttt{AttributeError}
+  \end{itemize}
+  \pause
+  all this is one bytecode
+\end{frame}
+
+\begin{frame}
+  \frametitle{Idea of Meta-Tracing}
+  \includegraphics[scale=0.5]{figures/trace05.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Meta-Tracing}
+  \includegraphics[scale=0.5]{figures/metatrace01.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Meta-Tracing JITs}
+  \begin{block}{Advantages:}
+    \begin{itemize}
+        \item semantics are always like that of the interpreter
+        \item trace fully contains language semantics
+        \item meta-tracers can be reused for various interpreters
+    \end{itemize}
+  \end{block}
+  \pause
+  a few meta-tracing systems have been built:
+  \begin{itemize}
+      \item Sullivan et.al. describe a meta-tracer using the Dynamo RIO system
+      \item Yermolovich et.al. run a Lua implementation on top of a tracing JS implementation
+      \item SPUR is a tracing JIT for CLR bytecodes, which is used to speed up a JS implementation in C\#
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{PyPy}
+  A general environment for implementing dynamic languages
+  \pause
+  \begin{block}{Approach}
+      \begin{itemize}
+          \item write an interpreter for the language in RPython
+          \item compilable to an efficient C-based VM
+          \pause
+          \item (RPython is a restricted subset of Python)
+      \end{itemize}
+  \end{block}
+  \pause
+  \begin{block}{PyPy's Meta-Tracing JIT}
+      \begin{itemize}
+          \item PyPy contains a meta-tracing JIT for interpreters in RPython
+          \item needs a few source-code hints (or annotations) \emph{in the interpreter}
+          \item powerful general optimizations
+      \end{itemize}
+  \end{block}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Runtime Feedback}
+  Problems of Naive Meta-Tracing:
+  \begin{itemize}
+      \item no runtime feedback of user-level types
+      \item tracer does not know about invariants in the interpreter
+  \end{itemize}
+  \pause
+  \begin{block}{Proposed Solutions}
+      \begin{itemize}
+          \item introduce \textit{hints} that the interpreter-author can use
+          \item hints are annotation in the interpreter
+          \item they give information to the meta-tracer
+          \pause
+          \item two hints presented here
+          \item one to induce runtime feedback of arbitrary information
+          \item the second one to influence constant folding
+      \end{itemize}
+  \end{block}
+\end{frame}
+
+
+\begin{frame}
+  \frametitle{Example: Instances with Maps}
+  \includegraphics[scale=0.7]{figures/map01.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Example: Instances with Maps}
+  \includegraphics[scale=0.7]{figures/map02.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Example: Instances with Maps}
+  \includegraphics[scale=0.7]{figures/map03.pdf}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Map Implementation}
+
+\begin{Verbatim}[commandchars=\\\{\}]
+\PY{k}{class} \PY{n+nc}{Map}\PY{p}{(}\PY{n+nb}{object}\PY{p}{)}\PY{p}{:}
+    \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{indexes}\PY{p}{)}\PY{p}{:}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{indexes} \PY{o}{=} \PY{n}{indexes}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+
+    \PY{k}{def} \PY{n+nf}{getindex}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{indexes}\PY{o}{.}\PY{n}{get}\PY{p}{(}\PY{n}{name}\PY{p}{,} \PY{o}{-}\PY{l+m+mi}{1}\PY{p}{)}
+
+    \PY{k}{def} \PY{n+nf}{add\PYZus{}attribute}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+
+\PY{n}{EMPTY\PYZus{}MAP} \PY{o}{=} \PY{n}{Map}\PY{p}{(}\PY{p}{\PYZob{}}\PY{p}{\PYZcb{}}\PY{p}{)}
+\end{Verbatim}
+\end{frame}
+
+\begin{frame}[plain,containsverbatim]
+\begin{Verbatim}[commandchars=\\\{\}]
+\PY{k}{class} \PY{n+nc}{Instance}\PY{p}{(}\PY{n+nb}{object}\PY{p}{)}\PY{p}{:}
+    \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{)}\PY{p}{:}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{map} \PY{o}{=} \PY{n}{EMPTY\PYZus{}MAP}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{storage} \PY{o}{=} \PY{p}{[}\PY{p}{]}
+
+    \PY{k}{def} \PY{n+nf}{getfield}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{n}{index} \PY{o}{=} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{map}\PY{o}{.}\PY{n}{getindex}\PY{p}{(}\PY{n}{name}\PY{p}{)}
+        \PY{k}{if} \PY{n}{index} \PY{o}{!=} \PY{o}{-}\PY{l+m+mi}{1}\PY{p}{:}
+            \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{storage}\PY{p}{[}\PY{n}{index}\PY{p}{]}
+        \PY{k}{return} \PY{n+nb+bp}{None}
+
+    \PY{k}{def} \PY{n+nf}{write\PYZus{}attribute}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{,} \PY{n}{value}\PY{p}{)}\PY{p}{:}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+\end{Verbatim}
+\end{frame}
+
+\begin{frame}[plain,containsverbatim]
+\frametitle{Trace for Code \texttt{inst.a + inst.b}}
+\begin{lstlisting}[mathescape,escapechar=|,basicstyle=\ttfamily]]
+# $inst_1$.getfield("a")
+$map_1$ = $inst_1$.map
+$index_1$ = Map.getindex($map_1$, "a")
+guard($index_1$ != -1)
+$storage_1$ = $inst_1$.storage
+$result_1$ = $storage_1$[$index_1$]
+|\pause|
+# $inst_1$.getfield("b")
+$map_2$ = $inst_1$.map
+$index_2$ = Map.getindex($map_2$, "b")
+guard($index_2$ != -1)
+$storage_2$ = $inst_1$.storage
+$result_2$ = $storage_2$[$index_2$]
+
+$v_1$ = $result_1$ + $result_2$
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[plain,containsverbatim]
+\frametitle{Trace for Code \texttt{inst.a + inst.b}}
+\begin{lstlisting}[mathescape,escapechar=|,basicstyle=\ttfamily]]
+# $inst_1$.getfield("a")
+$map_1$ = $inst_1$.map
+$index_1$ = Map.getindex($map_1$, "a")
+guard($index_1$ != -1)
+$storage_1$ = $inst_1$.storage
+$result_1$ = $storage_1$[$index_1$]
+
+# $inst_1$.getfield("b")
+$map_2$ = $inst_1$.map
+$index_2$ = Map.getindex($map_2$, "b")
+guard($index_2$ != -1)
+$storage_2$ = $inst_1$.storage
+$result_2$ = $storage_2$[$index_2$]
+
+$v_1$ = $result_1$ + $result_2$
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+  \frametitle{Runtime Feedback Controlled by the Interpreter Author}
+  \begin{itemize}
+      \item give the interpreter author a way to feed back runtime values into the trace
+      \item written as \texttt{promote(x)}
+      \item captures the argument's runtime value during tracing
+      \item should be used only for variables that take few values
+  \end{itemize}
+  \pause
+\end{frame}
+
+\begin{frame}[containsverbatim]
+  \frametitle{Tiny Example}
+  \begin{minipage}[b]{6cm}
+      \centering
+      {\noop
+      \begin{lstlisting}[mathescape,basicstyle=\ttfamily]
+def f1(x, y):
+    promote(x)
+    z = x * 2 + 1
+    return z + y
+      \end{lstlisting}
+      }
+  \end{minipage}
+  \vline
+  \hspace{0.5cm}
+  \begin{minipage}[b]{4cm}
+      {\noop
+      \begin{lstlisting}[mathescape,escapechar=|,basicstyle=\ttfamily]
+guard($x_1$ == 4)
+|{\color{gray}$v_1$ = $x_1$ * 2}|
+|{\color{gray}$z_1$ = $v_1$ + 1}|
+$v_2$ = $z_1$ + $y_1$
+return($v_2$)
+      \end{lstlisting}
+      }
+  \end{minipage}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Foldable Operations Defined by the Interpreter Author}
+  \begin{itemize}
+      \item let the interpreter author define foldable functions
+      \item those functions typically don't look foldable
+      \item otherwise there is no need for an annotation
+      \item done via a function decorator \texttt{@elidable}
+      \pause
+      \item decorated functions should be pure
+      \item or have idempotent side effects (such as a function that memoizes)
+      \item trace optimizer will remove calls to such functions with constant arguments
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Adding Hints to Maps}
+
+\begin{Verbatim}[commandchars=\\\{\}]
+\PY{k}{class} \PY{n+nc}{Map}\PY{p}{(}\PY{n+nb}{object}\PY{p}{)}\PY{p}{:}
+    \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{indexes}\PY{p}{)}\PY{p}{:}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{indexes} \PY{o}{=} \PY{n}{indexes}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+
+    \PY{n+nd}{@elidable}
+    \PY{k}{def} \PY{n+nf}{getindex}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{indexes}\PY{o}{.}\PY{n}{get}\PY{p}{(}\PY{n}{name}\PY{p}{,} \PY{o}{-}\PY{l+m+mi}{1}\PY{p}{)}
+
+    \PY{k}{def} \PY{n+nf}{add\PYZus{}attribute}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+
+\PY{n}{EMPTY\PYZus{}MAP} \PY{o}{=} \PY{n}{Map}\PY{p}{(}\PY{p}{\PYZob{}}\PY{p}{\PYZcb{}}\PY{p}{)}
+\end{Verbatim}
+\end{frame}
+
+\begin{frame}[containsverbatim]
+\frametitle{Adding Hints to Maps}
+
+\begin{Verbatim}[commandchars=\\\{\}]
+\PY{k}{class} \PY{n+nc}{Instance}\PY{p}{(}\PY{n+nb}{object}\PY{p}{)}\PY{p}{:}
+    \PY{k}{def} \PY{n+nf}{\PYZus{}\PYZus{}init\PYZus{}\PYZus{}}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{)}\PY{p}{:}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{map} \PY{o}{=} \PY{n}{EMPTY\PYZus{}MAP}
+        \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{storage} \PY{o}{=} \PY{p}{[}\PY{p}{]}
+
+    \PY{k}{def} \PY{n+nf}{getfield}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{)}\PY{p}{:}
+        \PY{n}{promote}\PY{p}{(}\PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{map}\PY{p}{)}
+        \PY{n}{index} \PY{o}{=} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{map}\PY{o}{.}\PY{n}{getindex}\PY{p}{(}\PY{n}{name}\PY{p}{)}
+        \PY{k}{if} \PY{n}{index} \PY{o}{!=} \PY{o}{-}\PY{l+m+mi}{1}\PY{p}{:}
+            \PY{k}{return} \PY{n+nb+bp}{self}\PY{o}{.}\PY{n}{storage}\PY{p}{[}\PY{n}{index}\PY{p}{]}
+        \PY{k}{return} \PY{n+nb+bp}{None}
+
+    \PY{k}{def} \PY{n+nf}{write\PYZus{}attribute}\PY{p}{(}\PY{n+nb+bp}{self}\PY{p}{,} \PY{n}{name}\PY{p}{,} \PY{n}{value}\PY{p}{)}\PY{p}{:}
+        \PY{o}{.}\PY{o}{.}\PY{o}{.}
+\end{Verbatim}
+\end{frame}
+
+
+\begin{frame}[containsverbatim,plain]
+  \frametitle{Trace with Hints for Code \texttt{inst.a + inst.b}}
+\begin{lstlisting}[mathescape,escapechar=|,basicstyle=\ttfamily]]
+# $inst_1$.getfield("a")
+$map_1$ = $inst_1$.map
+guard($map_1$ == 0xb74af4a8)
+|{\color{gray}$index_1$ = Map.getindex($map_1$, "a")}|
+|{\color{gray}guard($index_1$ != -1)}|
+$storage_1$ = $inst_1$.storage
+$result_1$ = $storage_1$[$index_1$}]
+
+# $inst_1$.getfield("b")
+|{\color{gray}$map_2$ = $inst_1$.map|
+|{\color{gray}guard($map_2$ == 0xb74af4a8)}|
+|{\color{gray}$index_2$ = Map.getindex($map_2$, "b")}|
+|{\color{gray}guard($index_2$ != -1)}|
+|{\color{gray}$storage_2$ = $inst_1$.storage}|
+$result_2$ = $storage_2$[$index_2$]
+
+$v_1$ = $result_1$ + $result_2$
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[containsverbatim,plain]
+  \frametitle{Final Trace}
+\begin{lstlisting}[mathescape,escapechar=|,basicstyle=\ttfamily]]
+$map_1$ = $inst_1$.map
+guard($map_1$ == 0xb74af4a8)
+$storage_1$ = $inst_1$.storage
+$result_1$ = $storage_1$[$0$]
+$result_2$ = $storage_2$[$1$]
+$v_1$ = $result_1$ + $result_2$
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}
+  \frametitle{Uses of These Hints}
+  \begin{block}{\texttt{promote} lets one specialize on various things:}
+      \begin{itemize}
+          \item user-level types
+          \item shapes of instances
+          \item the current state of a classes' methods
+          \item ...
+      \end{itemize}
+  \end{block}
+  \pause
+  \begin{block}{uses of \texttt{@elidable}}
+      \begin{itemize}
+          \item define immutable fields by decorating a getter
+          \item declare arbitrary invariants
+      \end{itemize}
+      
+  \end{block}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Some Benchmarks}
+  \begin{itemize}
+      \item benchmarks done using PyPy's Python interpreter
+      \item about 30'000 lines of code
+      \item 20 calls to \texttt{promote}
+      \item 10 applications of \texttt{@elidable}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Some Benchmarks}
+  \includegraphics[scale=0.5]{figures/bench.pdf}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Conclusion}
+  \begin{itemize}
+      \item meta-tracing can make the efficient implementation of complex dynamic languages easier
+      \item only requires to write a correct interpreter
+      \item two kinds of hints to be added by the interpreter author allow arbitrary runtime feedback and its exploitation
+      \item the hints are expressive enough to re-implement classical optimizations such as maps
+      \item usage of the hints leads to good speedups for object-oriented code in PyPy's Python interpreter
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \frametitle{Bonus: Comparison with Partial Evaluation}
+  \begin{itemize}
+      \pause
+      \item the only difference between meta-tracing and partial evaluation is that meta-tracing works
+      \pause
+      \item ... mostly kidding
+      \pause
+      \item very similar from the motivation and ideas
+      \item PE was never scaled up to perform well on large interpreters
+      \item classical PE mostly ahead of time
+      \item PE tried very carefully to select the right paths to inline and optimize
+      \item quite often this fails and inlines too much or too little
+      \item tracing is much more pragmatic: simply look what happens
+  \end{itemize}
+\end{frame}
+
+
+\end{document}


More information about the pypy-commit mailing list