2014-12-11 10:10

Go 1.4

Heute wurde die Programmiersprache Go in der Version 1.4 veröffentlicht. Neben einer minimalen Änderung in der Sprache, die eine Sonderform der for range Schleife ermöglicht, enthält das Release diverse Bugfixes und Detailverbesserungen.

Die wesentlichen Änderungen betreffen Interna. So wurden viele Teile der Runtime, die bisher in C oder Assembler geschrieben waren, in Go neu implementiert. Das Ziel ist eine vollständige Implementierung der Runtime in Go. Der Garbage Collector wurde umgeschrieben, um eine Änderung vorzubereiten, die voraussichtlich mit Go 1.5 kommt. Dann soll er voll nebenläufig arbeiten und nicht mehr zu Beginn eines GC Laufes die gesamte Programmausführung anhalten. Der Garbage Collector ist nun vollständig präzise, d.h. er findet nun definitiv alle Speicherstrukturen, die nicht mehr in Benutzung sind und gelöscht werden können. Der initiale Stack einer Goroutine ist nun nur noch 2kB groß, es werden also nur noch 2 GB RAM für eine Million (kleiner) Goroutinen benötigt.

Go 1.4 unterstützt nun offiziell die Plattformen Android, Googles Native Client (NaCl) Technologie auf ARM sowie Plan9 mit AMD64 Prozessoren.

Eine weitere Neuerung sind interne Packages; das sind eigenständige Go Module (Packages), die nur von der Bibliothek benützt werden können, zu deren Lieferumfang sie gehören, aber nicht direkt von anderen Programmen oder Bibliotheken. Die Änderung gilt zunächst nur für die Go Standardbibliothek, ab Go 1.5 soll sie für alle Bibliotheken gültig sein.

Die Go Toolchain wurde um das Kommando go generate erweitert. Es erlaubt die Einbindung von Code-Generatoren, die Go Sourcecode erzeugen, in den Quelltext mittels Build-Tags. Damit können Aufrufe von Tools wie gen, das Go um Generics erweitert, oder go-operators zum Überladen von Operatoren in einem einheitlichen Format in den Buildprozess integriert werden. go generate wird explizit aufgerufen. Ein impliziter Aufruf durch go build ist nicht vorgesehen, da die benötigten Tools nicht zwingend in jeder Installation vorhanden sind.

Wie angekündigt, zieht das Entwickler-Repository von Go von Google Code nach GitHub und damit von Mercurial nach Git um. Damit verbunden ist auch der Umzug der Sub-Repositories. Das sind Bibliotheken, die vom Go Team entwickelt werden, aber nicht zum offiziellen Lieferumfang von Go gehören. Auch das Go Wiki ist zu GitHub umgezogen.

Kurz nach dem Release wurde eine neue Version der Entwicklungsumgebung LiteIDE 25.1 veröffentlicht, die an Go 1.4 angepasst ist.

Meldung bei Heise: Programmiersprachen: Googles C-Konkurrent Go in Version 1.4 erschienen.