Programspråk 7.5p - Umeå universitet

January 9, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Data Structures
Share Embed Donate


Short Description

Download Programspråk 7.5p - Umeå universitet...

Description

UMEÅ UNIVERSITET Institutionen för datavetenskap

26 februari 2015

Seminarierapport

Programspråk 7.5p Google Go

Namn: E-mail:

Jonas Hedin [email protected]

Mattias Scherer [email protected]

Namn: E-mail:

Max Bågling [email protected]

Mikael Karlsson [email protected]

Namn: E-mail:

Erik Berggren Albin Råstander [email protected] [email protected]

Handledare Thomas Johansson

Google Go

Innehåll

Innehåll 1 Bakgrund och historik 1.1 Historik . . . . . . . 1.2 Syfte . . . . . . . . . 1.3 Arv . . . . . . . . . 1.4 Sammanfattning . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

1 1 1 2 2

2 Uppbyggnad 2.1 Syntax . . . . . . . . . . . 2.2 Data . . . . . . . . . . . . 2.3 Concurrency . . . . . . . . 2.4 Konventioner . . . . . . . 2.5 Kontrollstrukturer . . . . 2.6 Hello world exempel i Go 2.7 Lite större exempel . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

2 2 2 3 3 3 3 4

språket passar till Simpelhet och kompilering . . . . . . . . . . . . . . . . . . . . . . Multi-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . Användning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 5 5 6

3 Vad 3.1 3.2 3.3

. . . .

. . . .

4 Utvärdering 4.1 Utvecklingshastighet . . 4.2 Prestanda . . . . . . . . 4.3 Pålitlighet och säkerhet 4.4 Portabilitet . . . . . . . 4.5 Återanvändingsbarhet .

. . . . .

6 6 6 6 6 7

5 Inverkan 5.1 Läsbarhet och skrivbarhet . . . . . . . . . . . . . . . . . . . . . . 5.2 Inbyggda datatyper . . . . . . . . . . . . . . . . . . . . . . . . . .

7 7 8

6 Övriga källor

9

Seminarierapport

. . . . .

. . . . .

. . . . .

. . . . .

i

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

26 februari 2015

Google Go

1

1

Bakgrund och historik

Bakgrund och historik

1.1

Historik

21 september 2007 började Robert Griesemer, Rob Pike och Ken Thompson skissa sina mål för ett nytt programmeringspråk på en whiteboard[1]. Inom ett par dagar hade dessa mål lett vidare till en plan och en idé hur språket skulle se ut. Designarbetet fortsatte parallellt med andra uppgifter som ett deltidsarbete och i januari 2008 började Ken arbeta på en kompilator för att fortsätta utforska ideer. Kompilatorn producerade då C-kod som sin output och fortsatte så ända tills februari 2014 då man då övergick till en kompilator som producerar Go-kod. Vid mitten av 2008 hade språket växt till ett heltidsarbete och Ian Taylor och Russ Cox hjälpe till att förflytta språket och dess bibliotek från prototyp till verklighet. I november 2009 blev projektet open source och många personer från communityn har bidragit med idéer, diskussion och kod.

1.2

Syfte

Go skapades ur frustrationen med de existerande språken och utvecklingsmiljöerna. Programmering hade blivit för svårt, och valet av språk var en del av problemet. Du var tvungen att välja på effektiv kompilering, effektiv körning eller om språket var lätt att programmera i. Enligt utvecklarna gick det inte att få alla tre i samma språk. Programmerare som valde lätthet över säkerhet gick till språk såsom Python och Javascript istället för för C++ och Java. Inget nytt stort språk har kommit de senaste tio åren trots att kraven och syften med programmering har ändrats oerhört. Nedan har vi några av de problem som Go försöker lösa. • Datorers hastighet har ökat markant men mjukvaru-utvecklingens hastighet står still. • Att hantera beroenden är en stor del av utvecklingen idag men såsom andra språk är uppbyggda så blir kompileringen inte effektiv. • Det har växt ett stort motstånd mot klumpiga datatyper som i C och Java, man vill hellre ha dynamiskt typade variabler som i Python och Javascript. • Vissa koncept såsom garbage collection och parallella beräkningar är inte så välimplementerade i existerande språk. Go försöker kombinera enkelheten att programmera med ett interpreterat och dynamiskt typat språk med effektiviteten och säkerheten med ett statiskt typat och kompilerat språk. Det siktar även på att vara ett modernt språk med support för flertrådade program samt support för nätverksprogrammering. Slutligen ska det även vara snabbt, det ska inte ta mer än ett par sekunder att kompilera ett stort program. För att klara alla dessa krav så krävdes ett nytt språk, det räcker inte med att använda existerande bibliotek och verktyg.

Seminarierapport

1

26 februari 2015

Google Go

1.3

2

Uppbyggnad

Arv

Go ärver först och främst från C-familjen av programmeringsspråk (syntax), men har stora influenser av Pascal/Modula/Oberon-familjen (deklarationer,paket), och tar även lite idéer från språk som Newsqueak och Limbo (concurrency). Det är dock ett helt nytt språk, alla delar i språket är designade efter hur en programmerare programmerar.

1.4

Sammanfattning

Go utvecklades först för att lösa problem som uppstått i och med konstruktion av mjukvara till stora servrar. Det kanske låter som att Go bara används inom industrin men eftersom fokuset ligger vid enkelhet och tydlighet så kan Go vara ett språk som kan ses som kraftfullt och uttrycksfullt av många programmerare.

2

Uppbyggnad

Go liknar C men har många ändringar med mål att göra koden koncis, lättläst och säker. För att göra Go lätt har man inte: typarv, metod- eller operatoröverladdning, cirkulär beroenden bland paket, pekararitmetik, assertions (predikat) eller generisk programmering[2].

2.1

Syntax

Go förkortar C genom att deklarera en variabel i := 3 eller s := "Hello world" istället för säga att variabeln är av typen int eller string. Dock om man vill deklarera en variabel utan att initiera ett värde kan man skriva var i int där man definerar vilken datatyp variabeln är. Funktioner deklareras som t.ex. func Namn(a int, b string) (n int, err error) där första parantesen innehåller inparametrar och den andra är returvärden. Notera att man skriver variabelnamnet först och sen typen. Go använder semikolon som C fast de förekommer inte i källkoden utan det är lexical analyzer som automatisk sätter semikolon när den skannar genom att följa några regler. Men semikolon kan användas i for statement för att separera initialisering, tillstånd, och fortsättningselementet. En konsekvens av insättningsreglerna för semikolon så kan man inte börja med en måsvinge på ny rad för control statements (t ex. if, for, switch, eller select). Funktioner kan returnera flera värden. Ett konventionellt sätt är att returnera ett result, err par från en funktion så kan ett error indikeras till sin kallare. defer är ett statement som schemalägger en funktionskallelse som körs innan funktionen returnerar. Defer är bra att använda om man vill släppa en resurs oavsett vilken väg funktionen tar till return statement, t.ex. stänga en fil.

2.2

Data

new är en inbyggd metod i Go för att allokera minne och nolla det. new(T) allokerar ett nollat utrymme för en typ T och returnerar adressen. make är

Seminarierapport

2

26 februari 2015

Google Go

2

Uppbyggnad

en annan inbyggd funktion som initierar en datastruktur i minnet som inte är nollat. Slices är en datatyp som har en pekare till en array i minnet, samt innehåller den längd och kapacitet för minnesutrymmet.

2.3

Concurrency

Go erbjuder möjlighet för att skriva trådade program som delar tillstånd genom kommunikation. För att skriva trådade program i Go görs det endast med ett simpelt go-statement. go func() startar en s.k. goroutine som är en lightweightprocess. För att göra programmet synkroniserat finns det Channel types. chan type ger en typsäker, synkroniserad, buffrad kanal mellan goroutines. Med kanaler kan man skicka värden med ch
View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF