zurück zum Artikel

Programmiersprache: Guile 3.0 führt Just-in-time-Codegenerierung ein

Porgrammiersprache: Guile 3.0 führt Just-in-time Codegenerierung ein

Die offizielle Erweiterungssprache für das GNU-Betriebssystem soll durch einen JIT-Compiler im Schnitt doppelt so schnell arbeiten.

Die Entwickler von Guile haben Version 3.0.0 der Programmiersprache veröffentlicht. Der Name ist ein Akronym für GNU Ubiquitous Intelligent Language for Extensions. Guile entstand in den neunziger Jahren und ist die offizielle Erweiterungssprache des GNU-Betriebssystems.

Guile ist eine Implementierung von Scheme, das wiederum neben Common Lisp und Clojure zu den wichtigsten Lisp-Dialekten zählt. Die Programmiersprache zielt sowohl auf Desktop- und Kommandozeilen- als auch auf Webanwendungen. Die offizielle Projektseite [1] ist in Guile verfasst.

Die wichtigste Neuerung in Guile 3.0 ist die Einführung eines JIT-Compilers (Just-in Time), der standardmäßig aktiviert ist. Im Vergleich zum interpretierten Code in Version 2.2 der Programmiersprache läuft der per JIT kompilierte laut Benchmarks der Entwickler im Schnitt doppelt so schnell. In günstigen Fällen erreicht er einen Performancegewinn um den Faktor drei bis vier. Ein Ausreißer bringt es auf den Faktor 32, dafür bremst die JIT-Codegenerierung einige wenige Tools leicht aus.

GNU.org

Eine Microbenchmark-Messung über zahlreiche Programme vergleicht Guile 2.2.6 mit Guile 3.0.0.

(Bild: GNU.org)

Die Release Notes erwähnen zudem, dass die Funktion eval durch die Kompilierung in Scheme umgesetzt schneller ist als die entsprechende Variante in C und verweist dafür auf einen Blogbeitrag aus dem Jahr 2009 [2], der ausführlich erklärt, warum die Scheme-Umsetzung sinnvoll ist.

Wer den JIT-Compiler deaktivieren möchte, kann Guile mit den Parametern --enable-jit=no oder --disable-jit konfigurieren. Ansonsten ist er für die Plattformen x86-64, i686, ARMv7 und AArch64 standardmäßig aktiv.

Zugunsten des JIT-Compilers setzt die Virtual Machine (VM) von Guile stärker auf Low-Level-Instruktionen. Das erlaubt erweiterte Optimierungen, die wiederum die JIT-Codegenerierung vereinfachen und verbessern. Dadurch kann sich die Zahl der Instruktionen erhöhen, die Guile für eine bestimmte Funktion benötigt. Das kann wiederum bei deaktiviertem JIT-Compiler zu einer langsameren Verarbeitung im Interpreter führen als mit Guile 2.2.

Eine weitere Neuerung ist, dass interne Definitionen (Internal Definitions) nicht mehr vor Expressions stehen müssen, sondern im Wechsel mit ihnen angelegt sein dürfen. Das soll vor allem die Lesbarkeit von Guile-Code verbessern.

Das Behandeln von Exceptions haben die Entwickler ebenfalls komplett überarbeitet und an die R6RS-Style-Exceptions angepasst. R6RS ist der sechste Sprachstandard von Scheme [3]. Damit sind nun with-exception-handler beziehungsweise raise-exception für die Bearbeitung von Exceptions zuständig. Die bisherige Variante über throw und catch ist jedoch weiterhin erlaubt.

Weitere Neuerungen in Guile 3.0 wie die bessere Angleichung an die jüngsten beiden Versionen des Sprachstandards von Scheme R6RS und R7RS lassen sich der Release-Ankündigung [4] entnehmen. Guile 3.0.0 lässt sich parallel neben Version 2.2.x der Programmiersprache verwenden. Die Download-Seite [5] bietet eine Anleitung zum Download und Links zum Sourcecode. (rme [6])


URL dieses Artikels:
https://www.heise.de/-4640315

Links in diesem Artikel:
[1] https://www.gnu.org/software/guile/
[2] https://wingolog.org/archives/2009/12/09/in-which-our-protagonist-forgoes-modesty
[3] http://www.r6rs.org/
[4] https://lists.gnu.org/archive/html/guile-devel/2020-01/msg00080.html
[5] https://www.gnu.org/software/guile/download/
[6] mailto:rme@ct.de