Beta von Go 1.7 erschienen: Was sich ändert

Bei dem für August 2016 geplanten Go 1.7 gibt es wenig Änderungen an der Sprache selbst, dafür steckt umso mehr Arbeit in die Weiterentwicklung von Tools und Bibliotheken.

 –  26 Kommentare
Beta von Go 1.7 erschienen: Was sich ändert

Seit dem ersten Release 2012 hat sich Googles Programmiersprache Go stetig weiterentwickelt. Hierbei folgen die Entwickler dem Versprechen, keine inkompatiblen Sprachänderungen bei gleicher Hauptversion einzuführen. Das gilt auch für das im August zu erwartende 1.7-Release. Einen ersten Einblick gewährt die nun erschienene erste Beta

Eine kleine Änderung der Sprachdefinition gab es dennoch. Anstelle des bisherigen nicht präzise definierten "Final Statements" tritt nun das "Terminating Statement". Es ist nun in der Form definiert, wie es bereits dem Verhalten der gc- und gccgo-Compiler entspricht. Hiernach werden acht unterschiedliche Statements als terminierend definiert. Eine Liste von Statements endet in einem Terminating Statement, wenn die Liste nicht leer und das letzte nicht leere Statement eines der acht terminierenden ist. Das interne Package go/types wurde entsprechend angepasst.

Die Liste der von Go unterstützten Plattformen verlängert sich ebenfalls von Release zu Release. Neu hinzugekommen ist ein noch experimenteller Port zu Linux auf z-Systemen, IBMs Mainframes. Daneben wurde mit den Arbeiten für einen Port zu Plan 9 auf ARM begonnen. Die bereits mit der Version 1.6 eingeführten Ports zu Linux auf 64-Bit-MIPS unterstützen nun cgo und externes Linking. Für Linux auf Big-endian-64-Bit-PowerPC ist nun mindestens die POWER8-Architekur notwendig. Und der OpenBSD-Port erwartet nun Versionen ab der 5.6, da hier der getentropy(2)-Systemaufruf enthalten ist.

Für viele Entwickler wichtiger sind die Verbesserungen des Compilers für die 64-Bit-x86-Plattform. Dieser basiert nun auf der sogenannten Static Single Assignment Form und erzeugt so kompakteren und effizienteren Code. Erste Benchmarks versprechen 5 bis 35 Prozent Gewinn. Für die Go-Entwickler selbst ist auch der beschleunigte Kompiliervorgang wichtig. Mit der Umstellung der Compiler-Sprache von C auf Go selbst in der Version 1.5 hatte sich der Zeitbedarf verdreifacht. In der aktuellen Beta ist es zumindest nur noch eine Verdopplung. Weitere Änderungen betreffen die generierten Metadaten sowie enthaltene Stack Frame Pointers für Profiling-Werkzeuge wie perf unter Linux oder VTune von Intel. Im aktuellen frühen Stadium lassen sich all diese Änderungen auch deaktivieren.

Weitere Werkzeug-Änderungen betreffen den 64-Bit-ARM-Assembler, cgo, der nun auch Fortran-Quellen verarbeiten kann, und go selbst. Hier gehört das bisher experimentelle Vendoring externer Packages nun zum Standard, ebenso lassen sich Quellen von git.openstack.org importieren. Als Experiment ist die Nutzung reiner Binär-Packages dazu gekommen. Weitere Verbesserungen gab es noch bei den Subkommandos doc, vet, tool dist und tool trace.

Neben der Laufzeitumgebung und den Tools wurde auch die Standardbibliothek weiterentwickelt. Einige Packages wurden signifikant optimiert. So weisen crypto/sha1, crypto/sha256, encoding/binary, fmt, hash/adler32, hash/crc32, hash/crc64, image/color, math/big, strconv, strings, unicode und unicode/utf16 offenbar teilweise mehr als 10 Prozent Geschwindigkeitszuwachs auf.

Bei den Packages selbst wanderte golang.org/x/net/context nun als context in die Standardbibliothek, net/http/httptrace erlaubt ein Tracing für HTTP-Clients, Tests können nun geschachtelt werden und sich den Code für Setup und Tear-down teilen. Panics der Standardbibliothek nutzen nun Werte, welche die Schnittstellen error und runtime.Error erfüllen. Das runtime-Package hat dazu noch die Funktionen KeepAlive, CallersFrame und SetCgoTraceback erhalten. Sie helfen bei der Speicherkontrolle, dem Ermitteln von Laufzeitinformationen und der gemeinsamen Ausführung von Go- und C-Code.

Weitere funktionale Erweiterungen betreffen eine Vielzahl von Packages, von bufio und bytes über encoding/asn1 und encoding/json bis zu vielen net-Packages, strings und time. Die Details hierzu lassen sich auf der entsprechenden Seite des Go-Teams finden.

Go ist eine von Google vorangetriebene Sprache, die das Unternehmen 2009 vorstellte. Damals platzierte es Go als C-Alternative. 2015 befreite sich das Projekt dann von letzten C-Überbleibseln im eigenen Code. Bekannte Systeme, die mit Go geschrieben worden sind, sind beispielsweise die MongoDB-Tools und Docker; natürlich kommt Go auch bei Google zum Einsatz, aber auch bei zum Beispiel SoundCloud. Das derzeit aktuelle Release ist die im Februar erschienene Version 1.6. (Frank Müller) / (ane)