Go (ohjelmointikieli)

Wikipedia
Loikkaa: valikkoon, hakuun
Tämä artikkeli käsittelee ohjelmointikieltä. Sanan muista merkityksistä, katso Go (täsmennyssivu).
Go
Golang.png
Julkaistu 2009
Suunnitellut Rob Pike,
Ken Thompson
Kehittäjä Google
Verkkosivu http://golang.org

Go on Googlen kehittämä ja marraskuussa 2009 julkistettu ohjelmointikieli.[1] Kieltä ovat olleet kehittämässä muun muassa Rob Pike ja Ken Thompson. Se on julkaistu BSD-lisenssillä.[2] Go-kielen taustalla on Rob Piken ja muiden, pääasiassa Bellin laboratorioista Googlelle siirtyneiden Go-tiimin jäsenten pitkäaikainen tyytymättömyys moderniin kieli- ja käyttöjärjestelmäympäristöön[3].

Tausta[muokkaa | muokkaa wikitekstiä]

C++ ja ja Java ovat jo vanhoja, eikä olioparadigma Simulasta periytyvine luokkahierarkioineen ole koskaan miellyttänyt Pikea. Samoin ajatus siitä, että käännettävät ja staattisesti tyypitetyt kielet ovat kankeita ja siksi tarvitaan dynaamista tyypitystä ja skriptikieliä oli Piken mielestä harha. Lisäksi Pike on aina ollut sitä mieltä, että CSP-malliin perustuva rinnakkaislaskenta on paras, joskaan ei ainoa tapa strukturoida modernia prosessi- ja tietoliikenneympäristöä (ja monia muita asioita) algoritmeiksi. Samalla se mahdollistaa moniprosessori- ja moniydinkoneiden tehokkaan hyödyntämisen.

Go on tarkkaan harkittu ortogonaalisuuteen ja säännöllisyyteen pyrkivä kokonaisuus, jossa jokaisella kielen ja kirjastojen ominaisuudella on perusteet joiden on tarkoitus tukea toisiaan ilman redundantteja tai turhia ominaisuuksia.

Ominaisuudet[muokkaa | muokkaa wikitekstiä]

Go-kielen "isot ominaisuudet" ovat:

  • interface-käsitteeseen ja tyyppien laajentamiseen ("type embedding") perustuva, kevyt ja joustava "olioparadigma", joka osin tulee Robert Griesemerin (ETH:n ja "Wirthin koulukunnan" miehiä) kautta. Tämä on jokseenkin uniikki lähestymistapa "valtavirran" kielissä.
  • nopea kääntäminen, joka tekee ohjelmankehityksestä yhtä joustavaa kuin tulkkiympäristöissä.
  • staattinen, turvallinen tyypitys, jossa kääntäjä kuitenkin usein johtaa tyypit implisiittisesti, eikä käyttäjän tarvitse määritellä niitä
  • CSP-mallin mukainen rinnakkaisuuden hallinta

Lisäksi Go-tiimissä on kerätty Piken, Thompsonin ja Griesemerin ja nuoremman Russ Coxin uran varrelta monta pienempää ideaa, jotka tiimi katsoo hyviksi. Nämä(kin) on nähty jo muissakin kielissä. Esim.

  • Reflektio
  • Anonyymit funktiot, sulkeumat ("closure") ja muita funktionaalisen ohjelmoinnin ideoita
  • Automaattinen roskienkeräys ("garbage collection") käännetyssä kielessä
  • Kevyt "integroitu" käännös-, ajo-, testi-, dokumentaatio ja pakettihallinta yhdellä komennolla "go", joka nojaa osin tiettyihin koodaus- ja dokumentointikonventioihin

Melkein yhtä oleellista kuin se, mitä Go-kielessä on, on se, mitä siitä on tietoisesti jätetty pois, eli

  • poikkeukset (rajoitettu muoto on mukana)
  • geneerisyys (interface-käsite ainakin toistaiseksi riittää, tekijöiden mukaan)
  • standardikirjastot eivät määrittele graafista käyttöliittymää

Go-projektilla on kattava standardikirjasto, joka sisältää esim. välineet moderniin verkko-ohjelmointiin HTTP/HTML/JSON/XML-ympäristössä. Koska standardikirjastot eivät määrittele graafista käyttöliittymää, Go-ohjelmat on usein rakennettu tässä kirjastossa toteutetun Web-serverin avulla. Go-ohjelmat on tapana linkittää staattisesti, jolloin esim. Web-serveripohjaisen Go-sovelluksen voi asentaa käyttöön helposti ilman ulkoisia riippuvaisuuksia.

Hello World[muokkaa | muokkaa wikitekstiä]

package main
 
import "fmt"
 
func main()
{
  fmt.Printf("Hello, World\n")
}

Viitteet[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Tämä tietotekniikkaan liittyvä artikkeli on tynkä. Voit auttaa Wikipediaa laajentamalla artikkelia.