Vorstellung Programmiersprache Solod (So), das ein Teilmenge der Go-Sprache bereitstellt, die in eine C (C11)-Darstellung transkompiliert wird, die von den Compilern GCC, Clang und zig cc erzeugt werden kann. Der Hauptunterschied zwischen Solod und Go besteht darin, dass die manuelle Speicherverwaltung verwendet wird, die ohne Garbage Collector, ohne automatische Speicherzuweisung und ohne Referenzzählung funktioniert. Der Transpiler für Solod ist in Go geschrieben und wird verbreitet unter der BSD-Lizenz. Es wird die Ausführung unter Linux, macOS und Windows unterstützt.
Die Sprache unterstützt Strukturen, Methoden, Schnittstellen, Slices, Rückgaben von Funktionen mit mehreren Werten (zum Beispiel Ergebnis + Fehlercode), Generika und verzögerte Aufrufe (defer). Um die Sprache zu vereinfachen, werden Kanäle, Koroutinen und Closures nicht unterstützt. Bei der Entwicklung in Solod können vorhandene LSP-Server, Linter, integrierte Entwicklungsumgebungen und Code-Editoren, die Go unterstützen, sowie das Werkzeug „go test“ verwendet werden.
Der in Solod geschriebene Code kann in Anwendungen in C integriert werden (C kann Funktionen in Solod aufrufen und umgekehrt) und erfordert keinen Runtime-Anhang. Zu den wichtigsten Anwendungsbereichen gehört die Systemprogrammierung mit C-ähnlichen Möglichkeiten, jedoch mit einer Go-ähnlichen Syntax und Typprüfungen. Solod kann auch zur Portierung von Go-Bibliotheken für den Einsatz in C-Projekten verwendet werden. Folgende Go-Pakete wurden nach C portiert:
- strings
- io (antonz.org)
- bytes
- mem
- slices
und usw. Neben einer Reihe von portierten Go-Bibliotheken können in Programmen in Solod von Bindungen die standard C-Bibliothek libc verwendet werden.
Standardmäßig wird der gesamte Speicher auf dem Stack zugewiesen, jedoch kann über die Funktionen Alloc / Free der Standardbibliothek Speicher auf dem Heap zugewiesen werden. Garbage Collection und Referenzzählung werden nicht verwendet, jedoch bietet Solod Funktionen zur Typprüfung und zum Notfallabbruch bei Array-Überläufen. Dabei werden keine Überprüfungen auf die Rückgabe hängender Zeiger und das Freigeben von Speicher durchgeführt. Als primäre Methode zur Problemdiagnose in Bezug auf die Speicherverwendung wird die Verwendung von AddressSanitizer -fsanitize=address bei modernen Compilern erwähnt.
In Bezug auf die Leistung sind die kompilierten Programme, die in Solod geschrieben wurden, in den meisten Fällen schneller Programmen in Go überlegen:
- Die Leistung der Funktionen aus dem Byte-Paket ist bei identischem Speicherverbrauch anderthalbmal schneller;
- Die Arbeit mit Byte-Puffern ist beim Lesen 1,3-mal und beim Schreiben 2-4-mal schneller;
- Im Map-Paket ist die Abfrage nach ganzzahligen Schlüsseln 3,4-mal schneller, aber die Modifikation der Schlüssel ist 1,6-mal langsamer;
- Die Abfrage nach stringbasierten Schlüsseln ist auf einer Ebene mit der Programmiersprache Go, aber die Modifikation ist 1,5-mal langsamer;
- Das Parsen und Formatieren von Ganzzahlen ist 2-mal schneller, bei Fließkommazahlen 1,5/1,2-mal schneller;
- String-Funktionen sind 1,3-mal schneller, und das Erstellen von Strings ist 2-4-mal schneller bei einer Reduzierung des Speicherverbrauchs um 10-20%;
Quelle: linux.org.ru
