Entwicklung & Code
Go 1.26 bringt flexiblere Syntax und schnelleren Garbage Collector
Das Go-Team hat Version 1.26 der Programmiersprache Go veröffentlicht. Das Release schärft die Sprache nach, aktiviert einen neuen Garbage Collector standardmäßig und modernisiert zentrale Werkzeuge.
Weiterlesen nach der Anzeige
new wird ausdrucksstärker, Generics rekursiv nutzbar
Die eingebaute Funktion new akzeptiert nun einen Ausdruck als Operand – also als Wert oder Ausdruck, auf den die Funktion angewendet wird. Entwicklerinnen und Entwickler können damit beim Anlegen einer Variable direkt einen Initialwert angeben und Code kompakter formulieren. Ein Beispiel hierzu findet sich im Ankündigungsbeitrag.
Zudem dürfen generische Typen in ihrer eigenen Typparameterliste auf sich selbst verweisen. Das vereinfacht die Umsetzung komplexerer Datenstrukturen und Interfaces.
Green-Tea-GC jetzt Standard
Der bislang experimentelle „Green Tea“-Garbage-Collector (GC) ist ab Go 1.26 standardmäßig aktiviert. Nach einer Testphase in Go 1.25 und auf Basis des gesammelten Feedbacks hebt das Team ihn damit in den regulären Betrieb.
Das überarbeitete GC-Design soll insbesondere das Markieren und Scannen kleiner Objekte verbessern, unter anderem durch bessere Speicherlokalität und eine höhere CPU-Skalierbarkeit. Je nach Anwendung berichtet das Go-Team von möglichen Reduktionen des GC-Overheads im Bereich von etwa 10 bis 40 Prozent, hauptsächlich bei Programmen mit intensiver Speicherbereinigung.
Weiterlesen nach der Anzeige
Wer den neuen Collector nicht einsetzen möchte, kann ihn beim Build über GOEXPERIMENT=nogreenteagc deaktivieren. Diese Opt-out-Option soll mit Go 1.27 entfallen.
Laufzeit und Compiler optimieren Speicherverwaltung
Go 1.26 reduziert nach Angaben des Go-Teams den Basis-Overhead von cgo-Aufrufen um etwa 30 Prozent. Programme, die häufig zwischen Go- und C-Code wechseln, könnten dadurch profitieren, da jeder Übergang weniger Laufzeitkosten verursacht. Zusätzlich randomisiert die Runtime auf 64‑Bit-Systemen beim Start die Basisadresse des Heaps. Das erschwert es, Speicheradressen vorherzusagen, und soll primär in Kombination mit cgo die Widerstandsfähigkeit gegenüber bestimmten Angriffsszenarien erhöhen.
Auch der Compiler greift stärker in die Speicheroptimierung ein: Er kann den Backing Store von Slices in mehr Fällen auf dem Stack statt auf dem Heap anlegen, was Allokationen reduziert und die Performance verbessern kann. Treten dabei Probleme auf, lässt sich mit dem bisect-Tool und dem Flag -compile=variablemake die verursachende Stelle eingrenzen. Über -gcflags=all=-d=variablemakehash=n lassen sich die neuen Stack-Allokationen vollständig deaktivieren.
go fix als Modernisierer
Das Entwicklerteam hat das Kommando go fix auf Basis des Go-Analysis-Frameworks neu implementiert. Es enthält zahlreiche Modernizer, die sichere Anpassungen an neuere Sprach- und Bibliotheksfunktionen vorschlagen. Ein neuer Inline-Analyzer berücksichtigt Funktionen mit der Direktive //go:fix inline.
Neu sind außerdem die Pakete crypto/hpke, crypto/mlkem/mlkemtest und testing/cryptotest. Experimentell stehen unter anderem simd/archsimd, runtime/secret sowie ein goroutineleak-Profil in runtime/pprof bereit.
Weiterführende Informationen finden sich in den Release Notes zu Go 1.26.
(mdo)