Programmiersprachen: Go 1.8 optimiert den Garbage Collector

Neben kürzeren Unterbrechungen für Aufräumarbeiten gibt es in der neuen Betaversion von Go eine neue Funktion im sort-Package. Außerdem bietet Googles Programmiersprache nun HTTP/2 Push und sie hat eine optimierte Toolchain.

 –  117 Kommentare
Programmiersprachen: Go 1.8 Beta hat schnelleren Garbage Collector

Google hat die erste Beta von Go 1.8 veröffentlicht. Dabei wurde vor allem die Toolchain optimiert, über die heise Developer im November berichtet hatte. Hintergrund dafür ist, dass die komplette Umstellung von C auf Go im Sommer 2015 deutliche Performanceeinbrüchen beim Kompilieren mit sich gebracht hatte.

Ebenfalls der Performance, wenn auch zur Laufzeit der Programme, dient die Optimierung des Garbage Collector. Das Team hat vor allem die Notwendigkeit zum Scannen des Stacks reduziert. Letzteres lässt sich nicht im Hintergrund erledigen, laufende Prozesse müssen angehalten werden, was wiederum zu merklichen Unterbrechungen führt. Konkret nutzt Go nun eine Kombination aus den Ansätzen der Yusa und der Dijkstra Write Barrier.

Durch die Anpassungen soll die STW-Zeit (Stop the World) auch im ungünstigsten Fall unter 100 Mikrosekunden bleiben. Die Verbesserung des Garbage Collector ist jedoch noch nicht abgeschlossen und soll in Go 1.9 fortgesetzt werden. Darüber hinaus hat das Team zahlreiche Pakete optimiert und den Overhead für verzögerte Funktionsaufrufe mit defer wohl um die Hälfte reduziert.

In der Sprache selbst gibt es augenscheinlich lediglich eine nennenswerte Anpassung: Beim Umwandeln von einem struct-Typ in einen anderen ignoriert Go die verwendeten Tags. Die Standardbibliothek erhält im Gegensatz zum Sprachkern zahlreiche Ergänzungen. So gibt es im sort-Paket eine neue Slice-Funktion zum Sortieren von partiellen Arrays, die in Go Slices heißen (z. B. arr[0:3] für die ersten drei Elemente des Arrays arr).

Zwei Funktionen widmen sich der Kommunikation über HTTP: Zum einen bietet das net/http-Paket nun die Möglichkeit, Ressourcen über HTTP/2 Server Push an den Client zu schicken. Zum anderen lassen sich Verbindungen wahlweise geordnet über Server.Shutdown oder abrupt über Server.Close beenden. Darüber hinaus hat das Team die Standardbibliothek um zahlreiche Beispiele für unterschiedliche Pakete erweitert.

Wer Go 1.6.x oder 1.7.x verwendet, sollte das jeweils aktuelle Release (1.6.4 bzw. 1.7.4) installieren, das zwei potenzielle Sicherheitslücken im Umgang mit Root-Zertifikaten und HTTP-Verbindungen schließt. Die beiden Varianten sind wie die Go 1.8 Beta auf der Download-Seite im Quellcode und als Binaries für diverse Betriebssysteme zum Herunterladen verfügbar. Letzteres befindet sich unter "Unstable version" am Ende der Seite.

Weitere Informationen wie die neuen Funktionen für Kryptographie, Datenbankzugriff und Archive finden sich in den Release Notes. Google hatte Go 2009 erstmals der Öffentlichkeit vorgestellt und es als Alternative zu C positioniert. Die Programmiersprache unterstützt Nebenläufigkeit und entstand vor allem mit Blick auf verteilte Cloud- und Serveranwendungen. Zu den Vorzeigeprojekten gehört Docker. (rme)