Open Source im professionellen Einsatz
Linux-Magazin 06/2010
© Helmut-Wegmann, Pixelio.de

© Helmut-Wegmann, Pixelio.de

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?

650

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.

Neustart

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].

Umgebungsgestaltung

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:
Ausführbare 64-Bit-Go-Tools

 

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:
»hello.go«

01 package main
02 
03 import "fmt"
04 
05 func main () {
06   fmt.Println("Hallo, Welt!")
07 }

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • D-Bus: Byte-Order-Durcheinander bringt Programme zum Absturz
  • Richtig eintüten

    Seit dem zweiten Teil der C#-Workshop-Serie im Linux-Magazin hat sich in der Mono-Welt etwas getan. Dieser Artikel gibt einen Überblick über die wichtigsten Neuerungen und führt praktisch Objektserialisierung und Webservices vor.

  • Kern-Technik

    Aus Platz- und Übersichtsgründen lagert der Kernel seine Funktionalität größtenteils in Module aus. Dieser Vorgang lässt sich über Parameter fein einstellen. Linux 2.6 bietet Typsicherheit für Modulparameter und erlaubt es dem Kernelprogrammierer, dafür eigene Datentypen zu verwenden.

  • C++11

    In C++11 lässt sich manches prägnanter formulieren als in klassischem C++. Dieser Artikel zeigt, wie die neue Range-basierte For-Schleife und die automatische Typableitung dabei helfen.

  • Äpfel und Birnen

    Mit C# hat Microsoft eine C++-ähnliche Programmiersprache geschaffen, die die Erfahrungen aus über zwölf Jahren Java beherzigt. So garantieren zum Beispiel Interfaces, dass sich Objekte eines unterschiedlichen Typs vergleichen lassen. Manches C++-Feature, das Java fehlt, gibt es in C# obendrauf.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.