Go: il nuovo linguaggio di programmazione di Google

Go è un nuovo linguaggio di sviluppato da che dovrebbe rendere facile lo sviluppo come su Python e al contempo mantenere una velocità paragonabile al C o al C++.

Go language programming logoQuesto linguaggio dovrebbe consentire velocità di compilazione anche per grossi file binari, avere un buon supporto per il multi-processing, una gestione leggera e innovativa della programmazione orientata agli oggetti (OOP).

Go nasce perché in più di un decennio non sono nati nuovi linguaggi di programmazione, ma nel contempo l’evoluzione dei computer ha fatto dei passi da gigante e ha modificato l’ambiente informatico in modo enorme e pervasivo. Ci sono diverse tendenze che si possono enumerare per avvalorare questo dato:

  • I computer sono divenuti tremendamente più veloci ma nonostante ciò lo sviluppo del software non è oggi più rapido di qualche anno fa.
  • La gestione delle dipendenze è una parte fondamentale nello sviluppo del software, ma gli “header files” dei diversi linguaggi, nella tradizione del C, ricoprono una posizione antitetica rispetto ad una semplice analisi delle dipendenze e ad una compilazione veloce.
  • C’è una crescente rivolta contro gli ormai scomodi sistemi di tipizzazione come quelli del Java o del C++, che spinge i programmatori a scegliere sempre più i linguaggi a tipizzazione dinamica come il Python o Javascript.
  • Alcuni concetti fondamentali come la “garbage collection” e il calcolo parallelo non sono ben supportati dai più diffusi linguaggi di programmazione.
  • La nascita dei processori multicore ha generato preoccupazione e confusione.

Google Team

Al momento, esistono due compilatori ufficiali: Gccgo, che si appoggia a GCC come back-end, e una suite di compilatori, 6g e 8g, sviluppati rispettivamente per sistemi x86 a 64 bit e x86 a 32 bit. Google dovrebbe anche rilasciare entro breve periodo il supporto per chip ARM e dispositivi .

Go promette una velocità di compilazione eccellente su singola macchina e possiede un sistema di tipizzazione non gerarchico così da non perder tempo nell’analisi e definizione delle gerarchie tra tipi di dato. Anche se possiede dei tipi di dato statici, Go consente una “tipizzazione leggera” che non è facilmente riscontrabile negli altri linguaggi OOP. Per come è stato sviluppato, inoltre, Go consente una costruzione dell’architettura software per i sistemi multicore.

L’annuncio ufficiale della nascita del “progetto Go” ha come titolo «Hey! Ho! Let’s go!» come in questa canzone dei Ramones.

[youtube:http://www.youtube.com/watch?v=wwoWei-GAPo]

Nel Go Team ci dovrebbe essere anche Dennis Ritchie, storico inventore di UNIX. Bisogna però specificare a chiare lettere che Go è solo un esperimento e non viene utilizzato neanche per gli sviluppi interni a Google stessa. Ma se ci fossero degli arditi programmatori che volessero provare l’ebrezza di programmare con un nuovo linguaggio di programmazione che consenta la programmazione concorrente e il supporto nativo all’architettura software per lo sfruttamento delle potenzialità dei sistemi multicore ben vengano, no?

Robert Griesemer, Rob Pike and Ken Thompson started sketching the goals for a new language on the white board on September 21, 2007. Within a few days the goals had settled into a plan to do something and a fair idea of what it would be. Design continued part-time in parallel with unrelated work. By January 2008, Ken had started work on a compiler with which to explore ideas; it generated C code as its output. By mid-year the language had become a full-time project and had settled enough to attempt a production compiler. In May 2008, Ian Taylor independently started on a GCC front end for Go using the draft specification. Russ Cox joined in late 2008 and helped move the language and libraries from prototype to reality.

http://golang.org/doc/go_lang_faq.html#history

Lo sviluppo di questo linguaggio non è da datarsi ad oggi, ma nel 2007. Dunque possiamo dire che questo progetto è da configurarsi come un possibile tassello nello sviluppo di un’intera piattaforma software che faccia capo ad un Google OS di prossima commercializzazione/distribuzione. In questo senso è da intendersi lo sviluppo costante di Google Android (il sistema operativo per architettura mobile ARM), il browser, le varie web applications e i sistemi di integrazione e socializzazione come Google Wave.

[youtube:http://www.youtube.com/watch?v=rKnDgT73v8s]

Installare Google Go su Linux

Fedora logo 3d

Iniziamo con il settare le variabili d’ambiente necessarie al corretto funzionamento di Go. Per far ciò editiamo ~/.bashrc aggiungendo le seguenti righe di codice:

#Google GO
export GOROOT=$HOME/go
export GOOS=linux
export GOARCH=386
export GOBIN=$GOROOT/bin
export PATH=${PATH}:$GOROOT/bin

In questo modo avremo settato come directory di installazione di Go ~/go e per i binari ~/go/bin. Poi passiamo all’installazione degli strumenti necessari per la compilazione:
yum install -y mercurial bison gcc ed
Reperiamo i sorgenti con mercurial con il comando:
hg clone -r release https://go.googlecode.com/hg/ $GOROOT
Compiliamo la distribuzione di Go:
$ cd $GOROOT/src
$ ./all.bash

Se tutto è andato come previsto alla fine dovremmo vedere a video le seguenti due righe finali:
--- cd ../test
N known bugs; 0 unexpected bugs

Ora testiamo il funzionamento del compilatore di Go con il primo programma di qualsiasi linguaggio di programmazione: «Hello World!»:

// ciaomondo.go
package main
 
import fmt "fmt" // Package che implementa le funzioni di I/O.
 
func main() {
   fmt.Printf("Ciao mondo!\n");
}

Compiliamo il file sorgente ciamondo.go (per x86 32 bit con 8g, per x86 64 bit con 6g)

$ 8g ciaomondo.go
$ 8l ciaomondo.8
$ ./8.out
Ciao mondo!



Risorse:

[1] http://golang.org
[2] Le librerie di Go (package)
[3] Google lancia Go, il nuovo linguaggio di programmazione open source
[4] Go(ogle) baby Go
[5] Go Google -> GO

tags Tags: , , ,
categorieCategorie: Linux, Software

Forge Of Empires Italia

4 Responses to “Go: il nuovo linguaggio di programmazione di Google”

  1. Idl3 on novembre 12th, 2009 13:00

    Ciao, mi sto leggendo un po’ le guide, a te cosa sembra?

  2. skydiamond on novembre 12th, 2009 13:05

    A me cosa sembra cosa? O.o

  3. Idl3 on novembre 12th, 2009 15:02

    Go

  4. skydiamond on novembre 12th, 2009 15:05

    Ancora devo provarlo per bene. Non saprei dirti adesso con precisione, anche se apprezzo il supporto nativo alla programmazione concorrente e l’architettura multicore.

    Vorrei provare a creare delle applicazioni che facciano un uso pesante del multi-process e testarne le funzionalità.