Die Version, 1.17 der Programmiersprache Go erscheint pünktlich sechs Monate nach Go 1.16. Die Entwickler haben sich überwiegend der Implementierung der Toolchain, der Runtime und den Bibliotheken gewidmet. Es gib aber auch drei Erweiterungen.
Zu letzteren zählt die Konvertierungen von Slice zu Array Pointern. Ein Ausdruck s vom Typ []T könne nun in einen Array-Zeiger vom Typ *[N]T umgewandelt werden, schreiben die Entwickler in der Ankündigung. Eine wetere sei unsafe.Add. Die Funktion unsafe.Add(ptr, len) addiere len zu ptr und liefere den aktualisierten Zeiger unsafe.Pointer(uintptr(ptr) + uintptr(len)). Neu sei auch unsafe.Slice. Für einen Ausdruck ptr vom Typ *T gebe unsafe.Slice(ptr, len) ein Slice vom Typ [ ]T zurück, dessen zugrunde liegendes Array bei ptr beginne und dessen Länge und Kapazität len seien, heißt es in der Ankündigung des neuen Release.
Mit den neuen Erweiterungen sind auch mögliche Probleme verbunden. Denn die neue Konvertierung von Slice zu Array Pointer sei der erste Fall, in dem eine Typkonvertierung zur Laufzeit eine Panik auslösen könne. Entwickler sollten ihre Analysetools entsprechend aktualisieren, weil diese dann fälschlich davon ausgehen, dass Typkonvertierungen niemals in Panik geraten können.
Neuerungen gibt es auch beim Compiler. Go 1.17 implementiert eine neue Art der Übergabe von Funktionsargumenten und -ergebnissen unter Verwendung von Registern anstelle des Stacks, teilen die Entwickler mit. Das führe laut repräsentativen Benchmarks für Go-Pakete und -Programme zu einer Leistungsverbesserung von etwa 5 Prozent. Zudem verringere sich die Größe der Binaries um rund 2 Prozent. Dien eue Implementierung sei derzeit für Linux, MacOS und Windows auf der 64-Bit-x86-Architektur aktiviert. Die Ankündigung nennt viele weitere Details.





