GO

Il linguaggio open-source di Google orientato all’efficienza e alla concorrenza

Credo sia giunto il momento di dedicare un po’ di attenzioni al linguaggio di programmazione Go e dare qualche indicazione per un primo approccio di avvicinamento.

Quello di Go è un progetto che mi ha subito incuriosito; oltre a essere open source si propone come un linguaggio orientato alle applicazioni server e recepisce la concorrenza oltre ai paradigmi di programmazione imperativa e strutturata.

In un’era di macchine multicore e di elaborazione distribuita in rete, il concept di un linguaggio relativamente a basso livello (come il C) che nativamente supportasse la concorrenza dei processi ha rapidamente catturato la mia attenzione.

Ma andiamo con ordine…

Un po’ di storia

L’idea di Go prende corpo in Google nel 2007 dalle menti di Ken Thompson, Robert Griesemer e  Rob Pike.

Per chi non lo sapesse Ken Thompson è, insieme a  Dennis Ritchie, uno dei papà di Unix ed è inoltre l’autore del linguaggio B (precursore del C, dello stesso Ritchie).

Il progetto venne annunciato ufficialmente nel novembre del 2009 ma la versione 1.0 del compilatore fu rilasciata a marzo 2012.

Il linguaggio nasce da una esigenza industriale di Google, ovvero rendere disponibile ai propri sviluppatori un linguaggio di programmazione semplice da imparare e che, dotato di un compilatore orientato nativamente alla programmazione concorrente, producesse un codice oggetto veloce, affidabile ed efficiente. Go doveva ereditare le caratteristiche più significative dei linguaggi in uso presso Google ma al tempo stesso doveva risolvere le criticità che erano state evidenziate per ciascuno di essi (solo come esempi: la lentezza di esecuzione di Python, quella di compilazione del C oppure la complessità del type system di Java).

Sulla pagina ufficiale del progetto si legge:

Il linguaggio di programmazione Go è un progetto open source per rendere i programmatori più produttivi.Go è espressivo, conciso, pulito ed efficiente. I suoi meccanismi di concorrenza facilitano la scrittura di programmi che ottengono il massimo da macchine multicore e in rete, mentre il suo nuovo sistema di tipizzazione consente la costruzione di programmi flessibili e modulari. Go si compila rapidamente in codice macchina ma ha la comodità della garbage collection e la potenza della run-time reflection. È un linguaggio compilato veloce, tipizzato staticamente, che sembra un linguaggio interpretato tipizzato dinamicamente.

Russ Cox (del team Go), durante il suo speech al GopherCon 2015, ha detto:

Google paga me e altri per lavorare su Go, perché, se i programmatori di Google sono più produttivi, Google può creare prodotti più velocemente, mantenerli più facilmente e così via

Incuriosito dalle premesse, e dalle promesse, ho dato un primo sguardo veloce al codice degli esempi e ho notato subito la sintassi molto vicina a quella del C e del Pascal (a me cari); guardando il codice con più attenzione si nota poi la leggerezza sintattica del listato, a sicuro beneficio delle leggibilità del codice e della velocità di compilazione.

Il linguaggio risente inoltre dell’influenza di Limbo, Modula, Newsqueak, Oberon e Python.

Open Source

Perché rendere Go open source? Perché Google dovrebbe condividere con il mondo i benefici degli investimenti per sviluppare il linguaggio?

In Google sapevano bene che un linguaggio di programmazione ha successo se riesce a consolidare una solida base di sviluppatori; sapevano anche che renderlo open source era l’unico modo in cui Go poteva avere successo.

In soldoni bisognava portare Go fuori dalle cyber-mura di Google e beneficiare dei contributi del maggior numero possibile di sviluppatori.

Russ Cox infatti dice:

         “… un linguaggio ha bisogno di molte persone che scrivano un sacco di software, quindi quando hai bisogno di uno strumento o di una libreria particolare, ci sono buone probabilità che sia già stata scritta, da qualcuno che conosce l’argomento meglio di te e che ha trascorso più tempo di te per renderla grandiosa. Un linguaggio ha bisogno di molte persone che segnalino bug, in modo che i problemi vengano identificati e risolti rapidamente”

E poi aggiunge

“Un linguaggio ha bisogno di molte persone che lo utilizzino per molti scopi diversi, in modo che il linguaggio non si adatti a un caso d’uso e finisca per essere inutile quando il panorama tecnologico cambia. Un linguaggio ha bisogno di molte persone che vogliano impararlo, quindi c’è un mercato in cui le persone scrivono libri o tengono corsi o tengono conferenze come questa. Niente di tutto questo sarebbe potuto accadere se Go fosse rimasto in Google. Go sarebbe soffocato all’interno di Google, o all’interno di una singola azienda o ambiente chiuso.”

Quindi la decisione di Google di rendere Go open source. In questo modo può beneficiare di un bacino di beta tester, debugger e sviluppatori molto molto ampio, che si estende ben oltre l’azienda.

Ma in che modo il progetto è open-source?

Beh per prima cosa, ovviamente, Google ha reso disponibile il linguaggio e i suoi sorgenti. Puoi trovare tutto sulla pagina web di Golang e scaricare liberamente il codice sorgente del compilatore oppure il suo pacchetto eseguibile. Fai tu, questo è il link https://golang.org/dl/

Pagina di download

Occorreva poi mettere in piedi un meccanismo per coinvolgere attivamente gli altri sviluppatori e il team di Go ha selezionato un tool per il tracking delle issue, ovvero le segnalazioni di bug/anomalie, attraverso il quale un contributor comunica alla collettività (e al team Go di Google) che ha riscontrato un problema oppure propone una soluzione a un problema già segnalato. I contributor più smart possono utilizzare direttamente i meccanismi di Github: Gopherbot, un meccanismo automatico, si occuperà di riconciliare le attività sull’issue-tracker con il flusso di Github. La revisione di Go resta comunque sotto il controllo di Google; è Google che decide quali modifiche apportare e semestralmente pubblica le nuove release.

Una visita al parco giochi

Il divertimento inizia quando si sale sulle giostre. E allora saliamo.

Il sito ufficiale mette a disposizione alcuni strumenti per iniziare a familiarizzare col linguaggio. Il primo che ti segnalo è il tour guidato che, passo-passo, illustra le principali caratteristiche; è abbastanza semplice ma bisogna chiarire che non è un corso di programmazione per studenti alle prime armi: direi che è più utile a chi già programma con un altro linguaggio e cerca una guida per la transizione. Il tour è strutturato per argomenti: inizia dalle basi e termina con i costrutti per la gestione della concorrenza. Un altro interessante strumento messo a disposizione dal sito www.golang.org è il playground: si tratta di un ambiente web-based che permette di scrivere codice Go e provarlo in diretta senza installare alcun software. L’interfaccia web invia il tuo programma sorgente al server, su cui verrà compilato ed eseguito, e riceve indietro l’output mostrandolo a schermo. Un po’ lento ma funziona discretamente per le prove basiche.

Un Hello World! nel playground di Go

Anche per il playground c’è da chiarire alcune cose: va benissimo per fare prove di base ma ricordatevi che il codice viene eseguito su un server, non sulla vostra macchina locale, quindi se scrivete codice che richiede l’interazione con l’uomo (ad esempio l’inserimento di dati) beh avrete qualche problemino… perché, semplicemente, l’interazione dovrebbe avvenire sul server.

Se vuoi approfondire al seguente link https://golang.org/ref/spec è disponibile la specifica del linguaggio… un’interessante lettura per chi vuole conoscere Go più a fondo, nel suo intimo.

Iniziamo a lavorare con Go

L’installazione non richiede particolari attenzioni, ad ogni modo puoi trovare una breve guida Download and install sul sito ufficiale (https://golang.org/doc/install).

In pochi semplici passi puoi ottenere una installazione eseguibile del compilatore.

Alla release attuale (1.15) Go, purtroppo, non dispone di un Integrated Developing Environment (IDE) nativo e avrai necessità di adattarti. Hai due possibilità.

  1. utilizzare un editor testuale e lanciare a mano la compilazione da riga di comando della shell. La mia scelta è ricaduta su Notepad++, un editor abbastanza potente che utilizzo anche per altri linguaggi. Lo puoi scaricare dal sito https://notepad-plus-plus.org/. Per Notepad++ esistono anche plugin per l’evidenziatore sintattico. Ovviamente è solo un suggerimento. Sicuramente questa soluzione non richiede particolari setup ma l’uso di un editor di testo anziché di un IDE ti impone di saltellare tra editor e riga di comando… nulla di trascendentale ma è poco efficiente in termini di produttività.
  2. Installare un IDE di terze parti. Alcuni sono gratuiti, altri a pagamento. Ad esempio puoi utilizzare vim, Visual Studio Code, GoLand o Atom Go-Plus, ma sono solo alcuni degli IDE che supportano il linguaggio. Sul sito di Go, alla pagina https://golang.org/doc/editors.html,  trovi utili indicazioni anche per altri IDE.

Tanti pacchetti, tante liberie

Il linguaggio mette a disposizione un numero davvero ragguardevole di pacchetti, ossia librerie. Puoi trovare l’elenco al seguente URL https://golang.org/pkg/

Per ciascun pacchetto viene fornito un overview, l’elenco delle funzioni implementate, la relativa sintassi per le chiamate e tipicamente anche un esempio che puoi prendere e incollare nel playground.

Descrizione della funzione Fprintln (del pacchetto fmt) e relativo esempio

Ci sono pacchetti per le funzioni più disparate ma se cerchi quelle per la grafica avrai una brutta delusione perché l’interfaccia è consolle. E’ però possibile implementare una interfaccia amichevole generando pagine HTML da visualizzare tramite browser.

Bene, ora hai qualche informazione utile per iniziare ad approcciare Go con maggiore consapevolezza.

Buono studio e divertiti!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *