Zeggen de volgende namen je wat?
Rob Pike,
Ken Thompson en
Russ Cox. Misschien zegt die
laatste naam je niks, maar de eerste twee personen zijn
betrokken geweest bij de ontwikkeling van
Unix in
1969.
Waarbij Thompson Unix zo’n beetje eigenhandig bij elkaar getypt heeft.
Ook de taal
C
ontwikkeld door Dennis
Ritchie is beinvloed door
Thompson. Ritchie en Thompson waren immers collega’s bij
Bell Labs.
C is de afgelopen jaren de standaard geweest voor systeem
programmering. Bij systeem programma’s kun je denken aan de Linux
kernel of lowlevel programma’s zoals web- en DNS servers. C is daarin
nogal succesvol gebleken…
Tegenwoordig blijkt dat C niet meer voor de volle 100% procent voldoet:
- Geheugen beheer is en blijft lastig. Jezelf aanleren dat je
malloc() moet gebruiken en daarna het gebruikte geheugen weer
vrij moet geven met free() kost discipline;
- Multi-core processoren worden niet door
C ondersteund. Tuurlijk, je
kunt een C programma schrijven dat prachtig loopt met meerdere
processoren, maar makkelijk is het niet en in de taal zelf zit er
geen ondersteuning voor ingebakken;
- De header include files die in
C is ontstaan is complex;
C is steeds langzamer geworden tijdens de compilatie slag.
Tijd voor een nieuwe taal, die deze en andere nadelen van C goed
oplost. Daarom Go!
Go heeft:
- Automatisch garbage collection; geen
malloc() en free() meer, de
taal verzorgt dit voor je;
- Door middel van het
go-keyword kun je functies afvuren zodat die als
een apart, licht gewicht proces draaien;
- Communicatie met de go-routines gaat door middel van
channels;
- Supersnelle compilatie, denk hieraan compilaties die binnen 1 – 2
seconden klaar zijn;
- UTF-8 ondersteuning in strings en in de programma code. Eindelijk
Griekse symbolen in je berekening;
- Strings ingebouwd in de taal (net zoals in Perl, Python, etc.)
- Een opgelegde coding style;
- Lol! Go probeert de lol in programmeren terug te brengen.
Hello World
Zoals bij elke nieuwe taal wordt ook de taal Go aangekondigd met het
volgende programma:
package main
import fmt "fmt" // Package voor geformatteerde I/O.
func main() {
fmt.Printf("Hello, world)
}
Programmeurs zullen weinig moeite hebben met de
bovenstaande code. De accolades van C komen terug in Go, maar de
puntkomma’s zijn weggelaten. Vergelijkbaar met C begint de
uitvoering van een programma door het starten van de functie main(),
bij Go hoort deze functie ook nog in het package main te zitten.
Echo
Hier een wat langer voorbeeld uit de introductie van Go, een
her-implementatie van het Unix commando echo:
package main
import (
"os"
"flag" // commando regel opties parser
)
var omitNewline = flag.Bool("n", false, "print geen regel overgang")
const (
Space = " "
Newline = "\n"
)
func main() {
flag.Parse() // Parseer de commando regel
var s string = ""
// Bouw de nieuwe string op
for i := 0; i < flag.NArg(); i++ {
if i > 0 {
s += Space
}
s += flag.Arg(i)
}
if !*omitNewline {
s += Newline
}
// Schrijf de string naar buiten
os.Stdout.WriteString(s)
}
Wat opvalt aan de bovenstaande code is de eenvoud en de lengte. Een
ander innovatief aspect van Go is dat de type aanduiding bij
variabelen niet vooraan staat maar achteraan:
var s string
declareert de variabele s als een string. Meerdere variabelen
zijn te declareren als:
var s,t string
Natuurlijk raak ik hier maar het topje van de ijsberg en is er
nog veel meer te vertellen. Zie daarom ook de links aan het eind
van dit document.
Coding style
Een stap waar de Go-auteurs al veel kritiek op hebben gekregen
is het afdwingen van een bepaalde codeer stijl. Vergelijkbaar met
hoe de taal Python dat doet, maar met een twist. Voor Go geldt
het volgende:
De afgesproken codeer stijl is de stijl zoals
het programma gofmt het weergeeft.
Alle bibliotheken (packages in Go) zijn ook geformatteerd door
gofmt. En, ik moet zeggen, het is ook wel gemakkelijk,
nooit meer discussie over waar de opening accolade nu precies moet
komen te staan.
Starten met Go
De volgende links zijn interessant, mocht je je meer willen verdiepen
in Go.
De Go introductie en
geavanceerd programmeren.
Een video, door Rob Pike, over een voorloper taal van Go,
Newsqueak genaamd.
Hierin zitten veel aspecten die ook in Go terecht zijn gekomen.
Newsqueak is nooit vrij gegeven buiten Google.
Een andere taal met vergelijkbare features is
Erlang.
Deze taal draait op een VM (ala Java), en is een meer
functionele taal.
Aangezien de grote namen die achter deze taal staan en omdat het ook
nog eens gesponsord wordt door Google verwacht ik er aardig wat van.
(Beginners) documentatie op dit moment schaars, maar ook daar wordt
aan gewerkt. Wie weet, geeft AT Computing
over jaar wel Go cursussen.
Let wel op, de taal zelf is nog volop in
ontwikkeling, dus ook op taal niveau worden zaken aangepast c.q.
verbeterd.