Go(ogle) fylder fem år

Googles nyeste programmeringssprog har årsdag. Vi ser nærmere på undfangelsen af og baggrunden for Go.

 

– Vi ønskede ikke at kode i C++ i al evighed og vi – specielt jeg – ønskede at have samtidighed nemt tilgængeligt, når vi skrev Google-kode.

Sådan opsummerer Rob Pike baggrunden for udviklingen af sproget Go, som Google lancerede i november 2009.Rob Pike har en fortid hos Bell Labs som Unix-udvikler og har blandt andet udviklet sprogene Newsqueak og Limbo, der ligesom Go er rettet mod at gøre programmering af samtidighed nemmere. En anden tidligere Bell Labs-ansat med nærmest gudelignende status blandt Unix-folket, Ken Thompson, som udviklede det oprindelige Unix-system, har også haft en kodefinger med i Googles nye sprog. Robert Griesem, der var med til at udvikle Java Hotspot-compileren, fuldender det erfarne programmør-trekløver, der startede Go-udviklingen i september 2007.De arbejdede alle hos Google og ønskede et programmeringssprog, der kunne hjælpe dem med at udvikle backend-systemer for Google.

 

I stedet for C++

På det tidspunkt var Rob Pike involveret i, hvad han betegner som et enormt C++-program hos Google. Det tog 45 minutter at kompilere C++-programmet på et distribueret kompileringscluster. Google-programmet er et, ”som I alle har interageret med”, som han skriver i blogindlægget ”Less is exponentially more”. Her begrunder Rob Pike motivationen og designprincipperne for det nye sprog. Titlen på blogindlægget er betegnende for designfilosofien bag Go.
Efter en præsentation i september 2007 af det på det tidspunkt kommende C++11 startede Rob Pike en diskussion med Ken Thompson og Robert Griesem om de mange nye features i C++11. Var det virkelig nødvendigt med endnu flere features i C++?

– Jeg kan se, at vi reagerede på C++ ved at gå tilbage til det grundlæggende, bryde det ned og starte forfra. Vi forsøgte ikke at designe et bedre C++ eller et bedre C. Det skulle være et bedre sprog for den type software, vi var optaget af.

Go-syntaksen vil umiddelbart kunne forstås af programmører fra C/C++-skolen – ”{” anvendes til at angive en kodeblok – mens en række C++-features er skåret væk. Klasse-begrebet med  tilhørende constructors og destructors er erstattet af interfaces, klasse-hierarkier er skåret væk, og da Go har garbage collection, er eksplicit memory-håndtering med malloc og delete ikke nødvendig.Til gengæld er Rob Pikes kæphest, samtidighed, indbygget i sproget. I 1980'erne udviklede Rob Pike, hvad han selv har betegnet som et legetøjssprog: Newsqueak. Det var inspireret af den agtværdige engelske datalog Tony Hoares arbejde med communicating sequential processing (CSP), som Tony Hoare beskrev i 1978. Ideerne fra Tony Hoare og Newsqueak er nu implementeret i et rigtigt sprog, hvor Go anvender Goroutines til at definere samtidige processer, der kan kommunikere indbyrdes med hinanden via channels. I modsætning til concurrency-implementeringer i andre sprog deler Goroutines ikke memory, hvilket har givet anledning til Go-mantraet:”Do not communicate by sharing memory; instead, share memory by communicating”.

 

Unix-filosofien og Go

Med to prominente Unix-programmører bag Go er det uundgåeligt, at Unix-filosofien afspejler sig i Go.
Ken Thompson betegnes som ophavsmanden til Unix-filosofien, som blandt andet er beskrevet i bogen ”The UNIX Programming Environment”, forfattet af Rob Pike og Brian W. Kernighan. Kort fortalt handler Unix-filosofien om at have små, simple programmer, der foretager enkle, trivielle ting, som kan sammensættes til effektive og kraftfulde programmer. Et godt eksempel er Unix pipes, der leder outputtet fra et program ind til et andet programs input. Med den slags konstruktioner kan man komponere et større program ved at sammenkoble en række små, simple programmer. Ganske som små simple Goroutiner kan kobles sammen via channels og samlet set indgå i en større program-komposition.
Rob Pike citerer Unix pipe-programmøren Doug McIlroy:
”Vi bør have en måde at sammenkoble programmer på, ligesom en haveslange kan skrues sammen med en anden, når det er nødvendigt at massere data på en anderledes måde.”
Citatet er fra 1964, men stadig relevant 50 år senere - ikke mindst for Go og Rob Pike:
”Det er også Go-måden at gøre det på. Go fører den idé videre. Det er et sprog til komposition og sammenkobling.”