Suche

Google Go: Die lang ersehnte Systemsprache für die Java-Community?

Hartmut Schlosser

Google hat diese Woche die erste Major-Version seiner Programmiersprache Go vorgestellt. Schön – doch weshalb sollte das uns Java-Entwickler interessieren? Zur Beantwortung dieser Frage müssen wir erst einmal klären, was Go überhaupt ist.

Go und Java

Go wurde von Google als Sprache zur Systemprogrammierung konzipiert, richtet sich also an Entwickler von Software, die eng in Betriebssysteme eingebunden und auf möglichst direktem Weg Hardware-Komponenten ansprechen können.

Java ist bekanntlich mit dem Ziel entworfen worden, möglichst Plattform-unabhängig zu funktionieren – mit der zwischengeschalteten JVM als Scharnier zwischen Java-Programm und Hardware bzw. Betriebssystem. So sind Java-Entwickler beispielsweise von der mühsamen „händischen“ Speicherverwaltung befreit. Nebeneffekt dieser „Write Once, Run Everywhere“ Philosophie: Der direkte Zugriff auf Hardware-Komponenten (USB, Firewire, CD) und Speicherzellen ist nicht vorgesehen. Auch die Nutzung von Betriebssystem-Eigenschaften ist nur über native Aufrufe von in einer Systemsprache (meistens C) geschriebenen Funktionen möglich. Java eignet sich also nicht besonders gut zur Systemprogrammierung.

Go ist laut Google nun der Versuch, die Einfachheit der Programmierung, die eine interpretierte Hochsprache mit sich bringt, mit der Effizienz und Sicherheit einer statisch typisierten, kompilierten Sprache zu verbinden. Dabei soll Go schnell sein und moderne Anforderungen wie die Programmierung für verteilte Systeme und Parallel Computing erfüllen.

Die Go-Syntax ist an die C-Sprachfamilie angelehnt und durch Elemente aus der Pascal/Modula/Oberon-Familie sowie aus Newsqueak und Limbo (Nebenläufigkeit) angereichert.

Ein Hello-World in Go sieht folgendermaßen aus:

package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}
Go – das bessere C ?

Go macht den etablierten Systemsprachen C und C++ Konkurrenz, versucht dabei, gewisse Altlasten der C-Familien loszuwerden: Beispielsweise soll auf fehleranfällige Konstrukte verzichtet werden, etwa wird die Speicherverwaltung wie in Java von einem Garbage Collector erledigt, Typsicherheit vermeidet Variablen-Chaos. Explizit soll Go moderne Entwicklungen wie die Multikern-Programmierung adressieren, zu den weiteren Merkmalen von Go gehören Closures, Reflexion und klassenlose Objektorientierung mittels Interfaces und Mixins.

Seit 2007 arbeitet Google an dem Projekt, die erste quelloffene Version wurde der Community im November 2009 präsentiert. Go wird von Google bereits in einigen intern genutzen Programmen eingesetzt. Ein öffentlich zugängliches Beispiel ist der Server hinter der Go-Projektseite http://golang.org: ein godoc -Dokumentenserver, der innerhalb der Google App Engine betrieben wird.

Go 1

Mit der ersten Major-Version von Go, auch „Go 1“ genannt, versucht Google nun, Go von der reinen internen Nutzung bei Google zu emanzipieren und als allgemeine Systemsprache zu etablieren, die viele Jahre überdauern wird. In der Vorbereitung zum Go-1-Release standen denn auch Stabilitätsbelange im Zentrum – Vorwärtskompatibilität heißt hier das Schlagwort. Laut Go-Entwickler Andrew Gerrand sollen sich Anwender wie Entwickler darauf verlassen können, dass Go-Programme ohne Änderungen in vielen verschiedenen Umgebungen und für viele der kommenden Jahre kompilierbar und lauffähig bleiben. Code, der in Go 1 kompiliert wird, soll auch in Go 1.1, 1.2, etc. funktionieren. Google hat für alle Kompatibilitätsfragen ein eigenes Dokument bereit gestellt, das alle Details klärt.

Go 1 markiert indes durchaus einen Schnitt zu älteren Versionen, da auf Rückwärtskompatibilität nicht Rücksicht genommen wurde. In Go 1 wurden viele Änderungen integriert, die vorher aus Gründen der Inkompatibilität zurückgehalten wurden.

Neuerungen betreffen die Sprache selbst, beispielsweise wurden neue Typen für Unicode Character und Fehler-Meldungen eingeführt. Zudem wurde die Standard-Bibliothek überarbeitet und ergänzt, etwa um ein neues Time Package. Die Packages wurden neu angeordnet und in zusammengehörige Themengebiete strukturiert.

Insgesamt sollen Sprache wie Bibliotheken signifikante Verbesserungen enthalten. Der Preis dafür ist aber, dass ältere Go-Programme nicht mehr problemlos laufen könnten. Bestehender Go-Code sollte deshalb über das eigens entwickelte Go-Fix-Werkzeug getestet werden, mit dem sich die Migrationsarbeit teilweise automatisieren lässt.

Auf der Werkzeug-Seite wurde die Go Tool Suite poliert: Das Programm go command ermöglicht das Bauen, Installieren und Unterhalten von Go-Code, ohne auf externe Buildskripts oder Makefiles zurückgreifen zu müssen.

Go for Java?

Alle Änderungen in Go 1 werden vorbildlich in den Release Notes beschrieben – überhaupt fällt auf, dass Dokumentationsmaterial und Tutorials en masse zur Verfügung stehen. Sehr schön ist etwa die „Tour of Go„, die interaktive Codebeispiele bietet, sowie das FAQ, bei dem kaum eine Frage unbeantwortet bleibt. Man scheint es bei Google also ernst zu meinen, mit der Evangelisierung von Go. Beziehen kann man Go übrigens in Binärdistributionen für Linux, FreeBSD, Mac OS X und Windows.

Also: Vielleicht könnte Go 1 auch für die Java-Community interessant werden, als Sprache für systemnahe Umsetzungen, die den Vorteil hat, liebgewonnene Erleichterungen wie Garbage Collection mit an Bord zu haben.

Haben Sie bereits Erfahrungen mit Go gemacht? Wie schätzen Sie die Erfolgschancen für Google Go ein?

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.