Ho appena testato Go (Golang) v1.19.1, linguaggio di programmazione open source sviluppato da Google. Non ne avevo mia fatto uso, vediamo un po' di caratteristiche principali e infine un interessante benchmark di prestazioni con altri linguaggi di programmazione, per confrontare il tempo di esecuzione del codice. Questo è piuttosto importante, dato che spesso si fatica a trovare un confronto di questo genere, fra vari linguaggi.
I test sono stati fatti sulla stessa macchina (ovviamente per poter confrotnare i risultati), sistema operativo Linux Parrot OS 5.1, kernel Linux 6.0.0.
Caratteristiche di Go:
- nato con l'idea di compilazione efficiente, esecuzione veloce e facilità di programmazione
- il nome originale è Go, noto anche come "Golang" dato che il dominio di riferimento è golang.org, ma il nome corretto è Go (approfondimento)
- Go ha una mascotte che poi vediamo anche in foto, si chiama Gopher (nome comune di specie di roditori della famiglia Geomyidae, approfondimento: origine del nome Gopher)
- semplicità del linguaggio: nel complesso piuttosto versatile, user friendly (anche se la sintassi si presenta un pochino diversa da ciò a cui sono abituato, C, JavaScript, PHP, Python, ecc, ma è questione di abitudine, non ha certo procedure "macchinose" come altri linguaggi es. COBOL, BASIC ecc)
- efficienza: davvero ottima essendo un linguaggio compilato (e poi ci torniamo bene con il benchmark prestazioni)
- lacune: da quello che ho visto dando un'occhiata al linguaggio (prima di oggi non ci avevo mai messo mano), ha una lacuna piuttosto importante in ambito scientifico/matematico ovvero di default non è presente un operatore per l'elevamento a potenza!! Eventualmente da quanto ho letto, la cosa si può risolvere includendo moduli extra
Vediamo ora una serie di benchmark: ho creato un programmino semplice: una variabile parte da zero e viene aumentata di uno per un miliardo di volte, poi si guarda il tempo impiegato.
Nello specifico:
- Go 1.19.1
- PHP 7.4.30 (presente di default su Linux Parrot OS)
- PHP 8.2.0 (appena rilasciato e l'ho testato ieri, vedi benchmark PHP 8.1 vs PHP 8.2 - Kubuntu)
- Python 3.9.2
- C, compilatore gcc 10.2.1 (Debian 10.2.1-6)
Riportiamo il codice dei vari linguaggi:
- Go:
package main
import "fmt"
import "time"
func main() {
var ris int = 0
var N int = 1000000000
start := time.Now()
for i := 0; i < N; i++ {
ris+=1
}
end := time.Now().Sub(start)
fmt.Printf("page took %s\n", end)
}
- PHP:
<?php
$ris=0;
$N=10**9;
$start=microtime(TRUE);
for($i=0;$i<$N;$i++){
$ris+=1;
}
$end=microtime(TRUE);
echo ($end-$start)."s\n"
?>
- Python:
import time
ris=0
N=10**9
start=time.time()
for i in range(N):
ris+=1
end=time.time()
print(end-start,"s\n")
- C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
register int i,ris=0;
clock_t start = clock();
for(i=0;i<1000000000;i++){
ris+=1;
}
clock_t end = clock();
printf("%f\n",(float)(end-start)/CLOCKS_PER_SEC);
return 0;
}
Risultati, tempo medio esecuzione del codice (con una sorpresa!):
- Go 1.19.1: 0,316s
- PHP 7.4.30: 10,3s (32,6 volte più lento di Go)
- PHP 8.2.0: 7,1s (22,5 volte più lento di Go)
- Python 3.9.2: 98s (310 volte più lento di Go 🙈 )
- C: 0,323s (2% più lento rispetto a Go)
Osservazioni: l'inefficienza del linguaggio Python (approfondimento: importanza di rendere efficiente il codice), salvo particolari accorgimenti, è assolutamente... Bo, nemmeno mi viene un termine! 😅 Altri aspetti interessanti sono che in questo test Go ha superato, anche di poco (differenza del 2% circa), il C!! Poi notevole il miglioramento di PHP dalla versione 7.4.30 a 8.2.0.
Metto infine un'immagine, con le rappresentazioni di questi linguaggi.
Cosa ne pensate di Go? È carina la mascotte? Ah, dimenticavo: come voto complessivo io assegno 8/10. Ottima efficienza, codice abbastanza user-friendly (evidentemente occorre un po' farci la mano venendo da altri linguaggi), peccato per la lacuna dell'elevamento a potenza.