Programmiersprache: Go 1.11 lässt sich nach WebAssembly kompilieren

Googles Programmiersprache bekommt außerdem ein Konzept von Modulen als Alternative zu GOPATH.

 –  34 Kommentare
Programmiersprache: Go 1.11 lässt sich nach WebAssembly kompilieren

(Bild: iX)

Die nun von Google herausgegebene Go 1.11 bringt hinsichtlich der Programmiersprache selbst keine Änderungen mit, da sich die Macher auf die Toolchain konzentriert haben. Die wichtigsten Neuheiten, die beide noch als experimentell gekennzeichnet sind, dürften WebAssembly (wasm) als Zielformat für den Compiler und das Modulkonzept sein.

Ein halbes Jahr nach dem Release von Go 1.10 können Entwickler ihre Go-Programme neuerdings in das Binärformat WebAssembly kompilieren. Dadurch laufen sie clientseitig in den Browsern Firefox, Chrome, Safari und Edge. Derzeit erstellt der Compiler ein großes wasm-Modul, das neben dem Programmcode die Laufzeitumgebung von Go enthält, die sich unter anderem um die Garbage Collection und das Scheduling kümmert.

Dadurch haben die WebAssembly-Module eine minimale unkomprimierte Größe von 2 MByte. Damit Go-Programme JavaScript-Routinen aufrufen können, haben die Macher das derzeit als experimentell gekennzeichnete syscall/js-Package eingeführt. Für die erste Implementierung von WebAssembly hatten weder die Optimierung der Dateigröße noch das Zusammenspiel mit anderen Sprachen eine hohe Priorität.

Mit Go 1.11 hält das Konzept von Modulen als Alternative zu GOPATH Einzug in den Build-Prozess. Sie sollen das Versionieren und den Umgang mit Dependencies vereinfachen. Als Modul gilt dabei eine Sammlung zusammengehöriger Go-Pakete. Die Definition erfolgt über eine "go.mod"-Datei, die eine Baumstruktur mit Go-Source-Dateien enthält. Innerhalb des require-Blocks lassen sich nicht nur die benötigten Pakete, sondern auch jeweils spezifische Versionsnummern festlegen.

Der go-Befehl erhält für den Umgang mit Modulen neue beziehungsweise erweiterte Kommandos : go list zeigt je nach Parameter Informationen über die Build-List oder das Hauptmodul:

go list -m            # path of main module
go list-m -f={{.Dir}} # root directory of main module
go list -m all # build list

De Befehl go mod dient der Verwaltung der Module und kann je nach Parameter unter anderem mit download die Module in einen lokalen Cache laden oder mit why eine Erklärung ausgeben, warum einzelne Module benötigt werden.

Weitere Neuerungen wie die verbesserten Debug-Informationen im kompilierten Code lassen sich den Release Notes entnehmen. Google hatte Go 2009 erstmals der Öffentlichkeit vorgestellt und die Programmiersprache als Alternative zu C positioniert. 2015 befreite sich das Projekt von den letzten C-Überbleibseln im Code und besitzt seitdem eine komplett in Go geschriebene Toolchain und Laufzeitumgebung. Die Programmiersprache unterstützt Nebenläufigkeit und entstand vor allem mit Blick auf verteilte Cloud- und Serveranwendungen. Zu den Vorzeigeprojekten gehört Docker. (rme)