Die Programmiersprache Solod (So) wurde vorgestellt und bietet eine Teilmenge der Programmiersprache Go, die in eine C11-Darstellung transpiliert wird, die für die Kompilierung mit den Compilern GCC, Clang und zig cc geeignet ist. Ein wesentliches Unterscheidungsmerkmal von Solod im Vergleich zu Go und Tinygo ist die Verwendung manueller Speicherverwaltung, die ohne Garbage Collector, ohne automatische Speicherzuweisung und ohne Referenzzählung auskommt. Der Transpiler für Solod ist in Go geschrieben und wird unter der BSD-Lizenz verbreitet. Es wird Unterstützung für Linux, macOS und Windows geboten.
Die Sprache unterstützt Strukturen, Methoden, Schnittstellen, Slices, die Rückgabe von Funktionen mit mehreren Werten (z.B. 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 eingesetzt werden, die die Sprache Go unterstützen, sowie das „go test“-Toolset.
Der in Solod geschriebene Code kann mit Anwendungen in C integriert werden (C kann Funktionen von Solod aufrufen und umgekehrt) und erfordert keinen angehängten Runtime. Zu den wichtigsten Anwendungsbereichen zählt die Systemprogrammierung mit ähnlichen Möglichkeiten wie C, aber mit Go-ähnlicher Syntax und Typprüfung. Solod kann auch verwendet werden, um Go-Bibliotheken für Projekte in C zu portieren. Go-Pakete wie strings, io, bytes, mem, slices usw. wurden in die Programmiersprache C portiert. Neben dem Satz portierter Go-Bibliotheken können in Programmen in Solod auch Wrapper über die Standard-C-Bibliothek libc verwendet werden.
Standardmäßig wird der gesamte Speicher auf dem Stack zugewiesen, aber über die Funktionen Alloc / Free der Standardbibliothek kann Speicher auf dem Heap zugewiesen werden. Garbage Collection und Referenzzählung werden nicht verwendet, aber Solod bietet Möglichkeiten zur Typprüfung und zum Absturz bei Zugriffen außerhalb des Array-Größenlimits. Dabei erfolgt keine Überprüfung auf das Zurückgeben von dangling pointers und das Fehlen der Speicherfreigabe. Als Hauptmethode zur Identifizierung von Problemen bei der Speicherverwaltung wird die Verwendung von AddressSanitizer (-fsanitize=address) in modernen Compilern erwähnt.
In Bezug auf die Leistung sind compilierte Programme, die in Solod geschrieben wurden, in den meisten Fällen schneller als Programme in Go. Zum Beispiel ist die Leistung von Funktionen aus dem Paket Byte anderthalbmal schneller bei identischem Speicherverbrauch. Die Arbeit mit Byte-Puffern ist beim Lesen um das 1,3-Fache schneller und beim Schreiben um das 2-4-Fache schneller. Im Paket Map ist die Abfrage eines ganzzahligen Schlüssels um das 3,4-Fache schneller, während die Modifikation der Schlüssel jedoch um das 1,6-Fache langsamer ist. Abfragen mit Zeichenfolgeschlüsseln liegen auf einer Ebene mit der Programmiersprache Go, während die Modifikation um das 1,5-Fache langsamer ist. Die Analyse und Formatierung von Ganzzahlen ist doppelt so schnell, während es bei Gleitkommazahlen 1,5/1,2-mal schneller ist. Zeichenfolgenfunktionen sind um das 1,3-Fache schneller, und die Erstellung von Zeichenfolgen ist um das 2-4-Fache schneller bei gleichzeitigem Rückgang des Speicherverbrauchs um 10-20%.
Quelle: opennet.ru
