Original-URL des Artikels: https://www.golem.de/news/gcc-jit-compiler-in-bytecode-interpreter-einbauen-1310-101970.html    Veröffentlicht: 04.10.2013 14:20    Kurz-URL: https://glm.io/101970

GCC

JIT-Compiler in Bytecode-Interpreter einbauen

Ein Patch für die GNU Compiler Collection soll es ermöglichen, einen Jit-Compiler in einen Bytecode-Interpreter oder ähnliche Programme einzubetten.

Der Red-Hat-Entwickler David Malcolm hat einen Patch für die GNU Compiler Collection (GCC) vorgestellt, der ein JIT-Compiler-API bereitstellt und GCC als Backend nutzt. Die Bibliothek soll sich auf diese Weise dynamisch in Bytecode-Interpreter linken lassen, oder in ähnliche Programme, die Maschinencode zur Laufzeit erstellen wollen.

Die Bibliothek, die das API bereitstellt - Libgccjit - nutzt Libbackend, weshalb sie auf GCC wie ein normales Frontend wirkt, allerdings führt der Parsing-Hook eine Callback-Funktion des Client-Codes aus. Danach wird der Code an das interne API übergeben und Funktionen oder Typen erstellt. In den Code selbst ist ein Ablaufdiagramm integriert, das die Funktionsweise besser erklären soll. Das API versteckt also die Interna von GCC und versucht zudem, typensicherer zu sein als GCC selbst.

Noch sei der Code als sehr experimentell einzustufen und enthalte einige sehr große Hacks - einige davon sind im Code sogar als "ekelhaft" kommentiert. Aber mit Hilfe des APIs kann tausendfach hintereinander erfolgreich Quellcode innerhalb eines laufenden Prozesses übersetzt werden. Was Malcolm mit einer kleinen Versuchsanordnung aus selbst geschriebenem Bytecode-Interpreter beweist.

Die API ist in C verfasst und verwendet C-Terminologie, da es Malcolm zufolge wahrscheinlich ist, dass Nutzer den JIT-kompilierten Code in C- oder C++-Programme einfügen wollten. Der Quellcode des JIT-Compilers steht in einem eigenen Git-Repository Malcolms zum Download bereit. Das Kompilieren funktioniert ihm zufolge derzeit aber noch unzuverlässig.  (sg)


Verwandte Artikel:
Google: Chrome wird künftig mit Clang statt Visual C++ entwickelt   
(06.03.2018, https://glm.io/133171 )
LLVM 6.0: Clang bekommt Maßnahme gegen Spectre-Angriff   
(09.03.2018, https://glm.io/133241 )
Python: Pypy 2.0 unterstützt Stackless   
(10.05.2013, https://glm.io/99188 )
Saphira: Compiler-Patches verraten neue Qualcomm-CPU   
(06.11.2017, https://glm.io/130991 )
Compiler-Baukasten: LLVM 5.0 erweitert Ryzen- und AMDGPU-Unterstützung   
(14.09.2017, https://glm.io/130049 )

© 1997–2019 Golem.de, https://www.golem.de/