10.07.2015 Views

An ARM Backend for PyPyls Tracing JIT - STUPS Group

An ARM Backend for PyPyls Tracing JIT - STUPS Group

An ARM Backend for PyPyls Tracing JIT - STUPS Group

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

16 4 PYPY• The graphs are trans<strong>for</strong>med into graphs using operations closer to those of the targetplat<strong>for</strong>m.• Several trans<strong>for</strong>mations can be per<strong>for</strong>med on the graphs such as optimizations orthe insertion of a garbage collector.• Finally the graphs are converted to source code <strong>for</strong> the selected plat<strong>for</strong>m and compiled.Being a subset of Python, RPython shares the characteristic that it is a garbage collectedlanguage. This means that programs are free of low level details about memory management.For this reason RPython programs are not bound to a certain memory managementmodel. During the translation process different implementations of the memory managementand garbage collection can be added to the generated program, without affectingthe semantics of the program itself. PyPy supports several own garbage collector implementationsas well as the Boehm-Demers-Weiser conservative garbage collector [BW88].Other aspects of RPython and of the programs implemented using it can be chosen attranslation time, such as the use of tagged pointers or boxes to represent integers or howclasses should be represented in memory. These details are added to the program duringthe translation process.Because RPython is translated from live objects loaded within the Python interpreter, thefull power of the Python language can be used as a preprocessor <strong>for</strong> RPython allowingto dynamically generate RPython code at load time which can then be analyzed, trans<strong>for</strong>medand translated to a lower level target [RP06].

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!