Release , einer funktionalen Programmiersprache mit freier Implementierung. , die die Möglichkeit bietet, Code in Anwendungen anderer Programmiersprachen einzubetten. Guile kann als Sprache für die Entwicklung von Erweiterungen für Anwendungen, zur Definition von Konfigurationen oder zur Entwicklung von Komponenten zur Verbindung verschiedener vom Anwendung bereitgestellter Primitiven verwendet werden. Guile ist die offizielle Sprache zur Entwicklung von Erweiterungen für das GNU-Betriebssystem.
Die Grundlage von Guile bildet eine effiziente virtuelle Maschine, die einen portablen Satz von Anweisungen ausführt, der von einem speziellen optimierenden Compiler generiert wird. Die Guile-virtuelle Maschine lässt sich leicht in den Code von Anwendungen in C und C++ integrieren. Neben der Programmiersprache Scheme, für die Unterstützung der Spezifikationen implementiert wurde, , und , wurden im Rahmen des Guile-Projekts auch Compiler für andere Sprachen wie ECMAScript, Emacs Lisp und Lua (in Entwicklung) entwickelt. Das Paket enthält eine Modulbibliothek, in der typisierte Dienstfunktionen implementiert sind, wie beispielsweise die Arbeit mit dem HTTP-Protokoll, XML-Parsing und die Nutzung objektorientierter Programmiermethoden.
Ein zentrales neues Feature in GNU Guile 3.0 ist die Einführung eines JIT-Compilers, neben dem zuvor angebotenen Interpreter und Compiler für Bytecode, der in einer speziellen virtuellen Maschine ausgeführt wird, die an die Anwendung in Form einer Bibliothek gebunden ist. Der JIT-Compiler ermöglicht die Generierung von Maschinencode zur Laufzeit und beschleunigt die Ausführung von Guile-Anwendungen erheblich (Tests zeigen eine Beschleunigung von bis zu 4 Mal). Der JIT-Compiler unterstützt die Ausführung auf den Architekturen x86-64, i686, ARMv7 und AArch64.
Einige der anderen Verbesserungen:
- Unterstützung der neuen Sprachspezifikation Scheme und der darin definierten Bibliotheksmodule;
- Die virtuelle Maschine von Guile unterstützt einen niedrigeren Bytecode, der erweiterte Optimierungen ermöglicht;
- Unterstützung für die Kombination interner define-Definitionen und Ausdrücke (z. B. „(define _ (begin (foo) #f))“);
- Eine einheitliche Implementierung des strukturierten Datentyps („records“) wurde vorgeschlagen;
- Die Grundfunktionen zur Verarbeitung von Ausnahmen (throw und catch) wurden überarbeitet;
- Bindings für die erweiterte Syntax „else“, „=>“, „…“ und „_“ wurden definiert;
- In http-Requests, http-gets und anderen mit Web-Client verbundenen Verfahren wurde die Möglichkeit hinzugefügt, Inhalte über einen verschlüsselten Kommunikationskanal mithilfe von TLS mit korrekter Zertifikatsverifizierung zu übertragen.
Quelle: opennet.ru
