IT

Die Programmiersprache Goose: Alles über die neue Sprache, die C++ und Rust schlagen will

Goose ist eine neue Systemsprache ganz ohne Heap, Garbage Collector und Lifetime-Annotationen. Laut ihrem Entwickler läuft sie mehr als dreimal so schnell wie idiomatisches C++. Wie sie funktioniert und ob sich ein Blick lohnt.

·3 Min. Lesezeit
Die Programmiersprache Goose: Alles über die neue Sprache, die C++ und Rust schlagen will

Eines der am meisten diskutierten Themen unter Entwicklern in den letzten Wochen ist die Programmiersprache Goose. Sie wurde von Wouter van Oortmerssen entwickelt, einem erfahrenen Programmierer und Autor der Sprache Lobster. Goose ist unter der Apache-2.0-Lizenz Open Source, und das Interessanteste daran: Laut dem Autor wurde der Compiler fast vollständig mithilfe von KI basierend auf einer von Menschen entworfenen Sprachspezifikation erstellt.

In den meisten Sprachen liegen dynamische Daten wie Arrays und Strings auf dem Heap und benötigen einen Garbage Collector (Java, Go), Reference Counting (Swift) oder Lifetime-Regeln (Rust) zur Verwaltung. Goose nutzt keines davon. Laut Dokumentation lebt jeder dynamische Wert auf Daten-Stacks, die vom Compiler verwaltet werden.

  • Jeder Stack ist eine große Adressraum-Reservierung (standardmäßig 2 GB) mit einem einfachen Bump Pointer
  • Pro Stack ist jeweils nur ein größenveränderbarer Wert aktiv, und dieser befindet sich immer an oberster Stelle
  • Das Vergrößern eines Arrays verschiebt lediglich den Pointer – es wird nichts verschoben
  • Das Freigeben von Speicher beim Verlassen eines Scopes erfordert nur eine einzige Zuweisung

Der Compiler beweist diese Regeln zur Kompilierzeit; zur Laufzeit werden lediglich die Bump Pointer verfolgt.

Wie die Sicherheit funktioniert

Jede Referenz besitzt eine statische „Root“ – die Variable, die ihre Lebensdauer begrenzt. Der Compiler leitet diese Roots eigenständig ab und lehnt Referenzen ab, die ihren Besitzer überleben würden. Im Gegensatz zu Rust müssen Programmierer keine Lifetime-Annotationen schreiben, und es gibt kein Unsafe.

Ein Einblick in die Syntax

Goose verfügt über eine kompakte, C-ähnliche Syntax. Ein Struct mit Daten variabler Größe wird folgendermaßen deklariert: struct Item { sku: u8[varint], qty: varint, cents: varint }. Es gibt drei Arten von Arrays: mit fester Größe, nur wachsend und wachsend-schrumpfend.

Geschwindigkeit: Die Zahlen des Autors

Der Autor hat Ergebnisse aus 16 Benchmarks veröffentlicht (geometrisches Mittel). Demnach ist Goose:

  • etwa 3,3- bis 3,5-mal schneller als idiomatisches C++
  • 1,16- bis 1,26-mal schneller als handoptimiertes C++
  • 1,12- bis 1,19-mal schneller als das beste sichere Rust
  • verbraucht 1,2- bis 1,9-mal weniger Speicher

Ein Datensatz für eine Bestellung benötigt in Goose beispielsweise 29 Byte und null Allokationen, verglichen mit 160 Byte und einer Allokation in C++ sowie 153 Byte und vier Allokationen in Rust. Man sollte im Hinterkopf behalten, dass dies die eigenen Benchmarks des Autors sind; unabhängige Überprüfungen sind noch rar.

Einschränkungen

  • Rekursive Funktionen können keine wachsenden Daten über einen rekursiven Aufruf hinweg behalten
  • Keine entweichenden Closures oder Funktionszeiger
  • Ausschließlich Whole-Program-Kompilierung
  • Das Bibliotheks-Ökosystem ist noch sehr klein

Ausprobieren

Vorkompilierte Compiler stehen für Windows x64, Linux x64 sowie macOS (Apple Silicon und Intel) zur Verfügung. Goose kompiliert in eine einzige C-Datei und läuft daher überall dort, wo es einen C-Compiler gibt. Laden Sie eine Version von der GitHub-Seite aardappel/goose herunter, fügen Sie den Ordner zu Ihrem PATH hinzu und führen Sie ein Beispiel mit goose samples/01_tour.goose aus. Im Archiv ist zudem eine VS-Code-Erweiterung enthalten.

Das Fazit

Goose ist ein faszinierendes Experiment mit einem gänzlich neuen Ansatz für das Speicher-Management. Systemprogrammierer, denen Performance wichtig ist, sollten das Projekt im Auge behalten und es ausprobieren. Doch die Sprache ist neu: Für den Einsatz in der Produktion empfiehlt es sich, unabhängige Benchmarks und ein größeres Ökosystem abzuwarten.

Quelle: Goose (aardappel)

Ähnliche Artikel