Google erfindet neue Programmiersprache
Ready, Set, Go!
Von Google sind mehr als nur Suchergebnisse zu erwarten. Nun stellt sich der Suchmaschinenriese sogar bei den Programmiersprachen in die Startblöcke - glückt der schnelle Antritt?
© Helmut-Wegmann, Pixelio.de
Von Google sind mehr als nur Suchergebnisse zu erwarten. Nun stellt sich der Suchmaschinenriese sogar bei den Programmiersprachen in die Startblöcke - glückt der schnelle Antritt?
Es gibt systemnahe Programmiersprachen wie C und C++ sowie Sprachen, die unabhängig vom Betriebssystem funktionieren und in einer virtuellen Umgebung laufen wie Java. Zu unterscheiden sind interpretierte Sprachen wie Python und Ruby gegenüber solchen, die von Quell- in Binärcode zu übersetzen sind. Diese Liste lässt sich ziemlich lang fortführen und jeder Entwickler hat sich wohl auch schon mal seine Gedanken über eine von ihm zu erfindende Sprache gemacht.
Auf den ersten Blick sieht es daher so aus, als ob der Platzhirsch Google sich nur aus Prinzip in einem weiteren Sektor platzieren wollte. Bei genauerem Hinsehen eröffnen sich jedoch einige interessante Konzepte, die es verdienen, sich näher mit der neuen Programmiersprache Go auseinanderzusetzen.
Der bei Google angestellte C- und Unix-Veteran Rob Pike erklärt in seinem Vortrag [1] das Jahr 2007 zum Geburtsjahr der Idee zu Go. Gemeinsam diskutierte er mit Ken Thompson, mit dem er schon am Betriebssystem Plan 9 arbeitete [2], und anderen Entwicklern, wie sie den Spaß ins Programmieren zurückbringen könnten. Ihr Eindruck war, dass sich an der Art der Programmiersprachen in den letzten Jahren nicht viel geändert hat, die Anforderungen an jene sich hingegen aber sehr wohl verschieben. So begreifen die Entwickler heute das Netzwerk als zentrales Element, setzen Cluster ein und entwickeln in verschiedenen Schichten und Abstraktionsebenen. Besonderes Augenmerk richten sie auf Mehrkernprozessoren und die daraus resultierende Nebenläufigkeit.
Google erklärt daher eine leichtere Kommunikation zwischen Komponenten und eine intuitiv zu verwendende Form der Nebenläufigkeit, in Englisch Concurrency genannt, zum Ziel der Sprache. Außerdem soll ein Garbage Collector und nicht der Programmierer das Aufräumen des Speichers übernehmen. Weitere Anforderung war das schnelle Übersetzen des Quellcode in den durch das System ausführbaren Binärcode [3].
Die Go-Programmierwerkzeuge gibt es im Quelltext aus einem Repository auf der Projekt-Homepage [4]. Nachdem der Anwender die verschiedenen Go-Compiler übersetzt hat (siehe Kasten "Installation"), baut er die Bibliotheken. Da die in Go selbst vorliegen, profitiert der Entwickler bereits von der hohen Geschwindigkeit des Google-Babys - die gesamte Bibliothek lässt sich in wenigen Sekunden übersetzen.
| Installation |
|---|
| Blockiert während der Installation eine Firewall den Zugriff auf das Internet, so muss sich der Entwickler zurzeit noch eines Workaround bedienen. Er deaktiviert im Makefile die Tests für die Subsysteme »http« und »net«, sodass deren Ausführungsergebnisse keine Voraussetzung für den Erfolg der Gesamtinstallation sind [5]. Dazu erweitert er den Wert der Variablen »NOTEST« in der Datei »$GOROOT/src/pkg/Makefile« um die Einträge »http« und »net«. |
Zum Kompilieren stehen zurzeit zwei Werkzeuge zur Verfügung, der »gc«-Compiler sowie »gccgo«. Letzterer interagiert mit dem C-Compiler von GNU, ist jedoch nicht so weit fortgeschritten wie die »gc«-Werkzeuge, deren Namensschema von Plan 9 herrührt. Die Zahl kennzeichnet die Plattform, wobei »5« für ARM, »6« für 64-Bit- und »8« für 32-Bit-x86-Systeme stehen. Der Buchstabe kennzeichnet das Tool selbst (siehe Tabelle 1).
|
Tabelle 1: |
|
|---|---|
| Werkzeugname | Kurzbeschreibung |
| 6a |
Go-Assembler |
| 6c |
Go-C-Compiler (»cgo« benötigt das Tool) |
| 6g |
Go-Compiler |
| 6l |
Go-Linker |
| cgo |
Erzeugt Pakete und Programme, die C-Code aufrufen |
Den Kompilier- und Linkvorgang demonstriert Abbildung 1, das obligatorische Hello-World-Programm zeigt Listing 1. Zeile 3 enthält ein von Python und Java bekanntes »import«-Statement, das dort die Bibliothek »fmt« einbindet. Go fordert, dass das Programm wie bei C oder C++ eine Funktion »main()« als Einsprungspunkt besitzt. Die Funktion »Println()« von »fmt« gibt schließlich den Text aus. Dass die Funktion von den Entwicklern der Bibliothek einen großen Anfangsbuchstaben erhalten hat, ist kein Zufall. Eine wichtige Eigenschaft von Go ist es nämlich, dass Variablen und Funktionen automatisch global sichtbar werden, sofern deren Name einen Großbuchstaben an erster Stelle besitzt.
Abbildung 1: Die Kommandos zum Kompilieren und Linken eines Go-Programms lehnen sich an die zunächst ungewohnte Schreibweise von Plan 9 an.
|
Listing 1: |
|---|
01 package main
02
03 import "fmt"
04
05 func main () {
06 fmt.Println("Hallo, Welt!")
07 }
|
Umfang: 6 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Alle Rezensionen aus dem Linux-Magazin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...