Die Veröffentlichung von GNU Guile 3.0.10, einer freien Implementierung der funktionalen Programmiersprache Scheme, wurde veröffentlicht. Diese Version unterstützt die Möglichkeit, Code in Anwendungen anderer Programmiersprachen einzubetten. Guile kann als Sprache zur Entwicklung von Erweiterungen für Anwendungen, zur Konfiguration oder zur Entwicklung von Komponenten zur Verbindung verschiedener vom Programm bereitgestellter Primitives verwendet werden. Guile ist die offizielle Sprache zur Entwicklung von Erweiterungen für das Betriebssystem GNU.
Das Fundament von Guile besteht aus virtuelle Maschine, die einen portablen Befehlssatz ausführt, der von einem speziellen optimierenden Compiler generiert wird. Die Guile-VM lässt sich leicht in Anwendungen integrieren, die in C und C++ geschrieben sind. Neben der Sprache Scheme, für die die Spezifikationen R5RS, R6RS und R7RS unterstützt werden, wurden im Rahmen des Guile-Projekts Compiler für andere Sprachen entwickelt, darunter ECMAScript, Emacs Lisp und Lua (in der Entwicklungsphase). Das Paket enthält eine Modulbibliothek, in der gängige Dienstfunktionen implementiert sind, wie die Arbeit mit dem HTTP-Protokoll, XML-Parsing und die Nutzung objektorientierter Programmiertechniken.
Zu den Änderungen in der neuen Version gehören:
- Ein experimentelles Interface für die Nutzung von Drittanbieter-Backends wurde implementiert. Entwicklern wird die Möglichkeit geboten, den vorhandenen Frontend-Code, der den Quellcode in eine interne Darstellung umwandelt, sowie den Guile-Optimierer zusammen mit anderen Backends, die die Codegenerierung durchführen, zu verwenden.
- Ein externes Backend namens hoot zur Generierung von Zwischen-Code in WebAssembly wurde vorgestellt, das im Browser ausgeführt werden kann. In Zukunft könnte WebAssembly möglicherweise in die Hauptziele der Kompilierung in Guile aufgenommen werden.
- Die Nutzung von «define»-Definitionen ist jetzt im Kontext von «when», «unless», «cond», «case», «and-let*» und «with-fluids» erlaubt.
- Die Unterstützung für den Mechanismus der benutzerdefinierten Ports wurde hinzugefügt, wie er im Scheme-Dialekt R6RS beschrieben ist. Er ermöglicht das Anschließen von Handlern zur Datenumwandlung (z. B. Komprimierung/Dekomprimierung oder Änderung der Zeichencodierung), die in Funktionen wie
read, write und display verarbeitet werden. In Guile wurde auch das Modul «(ice-9 soft-ports)» eingeführt, das eine Schnittstelle zu einem «soft port» bereitstellt, der als einfachere Alternative zu «custom ports» positioniert ist. - Unterstützung für die vereinfachte Syntax von Wisp wurde hinzugefügt, die das Schreiben von leserlichem Code ermöglicht, zum Beispiel:
define : factorial n
if : zero? n
. 1
* n : factorial (- n 1)
display : factorial 5
newlinestatt
(define (factorial n)
(if (zero? n)
1
(* n (factorial (- n 1)))))(display (factorial 5))
(newline) - Im Compiler wurde eine neue Warnung implementiert, die ausgegeben wird, wenn in Code Module importiert werden, deren Funktionen nicht verwendet werden.
- Eine neue Annotation «maybe-unused» wurde hinzugefügt, um Warnungen über nicht verwendete Prozeduren zu unterdrücken.
- Die Ausgabe des Stack-Trace wird nun an der Grenze von 500 Zeichen abgeschnitten, nicht mehr bei 80 (dies kann über den Parameter default-frame-width geändert werden).
- In das Verfahren „copy-file“ wurde der Parameter „#:copy-on-write“ integriert, um den Mechanismus copy-on-write in unterstützenden Dateisystemen zu nutzen.
- Eine Optimierung wurde hinzugefügt, die ein Inline-Deployment von Proceduraufrufen mit Keyword-Argumenten ermöglicht.
Quelle: opennet.ru
