Ciao, e benvenuto nella sesta puntata della sessantesima stagione. Oggi parliamo di una promessa antica quanto l'informatica, inseguita da decenni e mai davvero mantenuta fino in fondo: scrivere il codice una volta sola, e farlo girare ovunque. WebAssembly la avvicina più di chiunque prima. Oggi parliamo del come un linguaggio qualunque possa girare dappertutto.
Partiamo dal legame che di solito ci imprigiona, perché è invisibile. Normalmente, il linguaggio che scegli e il posto dove il tuo codice girerà sono legati a doppio filo. Se vuoi girare nel browser, per anni hai dovuto usare JavaScript. Se vuoi certe prestazioni su un server, scegli certi linguaggi. Il linguaggio non è una scelta libera: è spesso dettata da dove il codice deve vivere. È una gabbia comoda, ma pur sempre una gabbia: ti costringe a volte a usare uno strumento non perché sia il migliore per te, ma perché è l'unico ammesso in quel posto.
Voglio dirti come WebAssembly spezza questo legame, perché è la sua promessa più bella. WebAssembly rompe la catena tra il linguaggio e il luogo. Siccome è un bersaglio di compilazione universale, tanti linguaggi diversi possono puntare verso di esso. Puoi scrivere in un linguaggio pensato per la prestazione e la sicurezza della memoria, oppure nel linguaggio che conosci da sempre, oppure in altri ancora, e tradurre tutti quanti in quello stesso formato universale. E quel formato, poi, gira identico ovunque ci sia la macchina astratta ad accoglierlo. Il risultato è che finalmente puoi scegliere il linguaggio per i suoi meriti, per quanto è adatto al problema e a te, e non per il posto in cui sei costretto a girare.
Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Pensa a una presa elettrica universale, con il suo adattatore. Nel mondo, ci sono decine di tipi di spine diverse, una per paese, e un apparecchio comprato in un posto spesso non entra nella presa di un altro. Ma con un buon adattatore universale, qualunque apparecchio, con qualunque tipo di spina, può collegarsi a qualunque presa nel mondo. L'adattatore fa da punto d'incontro comune. WebAssembly è quell'adattatore per il codice: apparecchi diversi, cioè linguaggi diversi, si collegano tutti alla stessa presa universale, e da lì attingono energia in qualunque paese, cioè in qualunque ambiente. Non devi più comprare l'apparecchio giusto per il paese: ne scegli uno qualunque, e lo colleghi.
Voglio collegarlo alla vecchia promessa, perché non è la prima volta che ci provano. Se questa idea ti ricorda qualcosa, è perché non è nuova. Decenni fa, un famoso linguaggio prometteva proprio scrivi una volta, gira ovunque, appoggiandosi anch'esso a una macchina astratta. E in parte ci riuscì, ma legato al suo unico linguaggio e con i suoi limiti. WebAssembly riprende quella stessa intuizione, ma la porta a un livello più basso e più universale: non è la macchina di un linguaggio solo, è una macchina per tanti linguaggi insieme. È la vecchia promessa, ripulita e allargata, che finalmente si avvicina a diventare realtà quotidiana.
Voglio essere onesto sui limiti, perché non tutto è rose. Ma non tutti i linguaggi arrivano a WebAssembly con la stessa disinvoltura. I linguaggi più semplici e vicini alla macchina ci si trovano benissimo. Quelli che portano con sé un grande impianto di supporto, come la gestione automatica della memoria o enormi librerie di base, ci arrivano con più fatica, producono risultati più pesanti, e i loro strumenti sono a volte meno maturi. La promessa scrivi in qualunque linguaggio è vera nella direzione, ma nella pratica alcuni linguaggi ci volano e altri ci arrancano. È un panorama in movimento, che migliora in fretta, ma va guardato con occhi aperti, senza aspettarsi che ogni linguaggio ci stia comodo allo stesso modo.
Voglio darti la lezione generale, perché è un valore in sé. La lezione è che disaccoppiare due cose che erano legate è quasi sempre una forma di libertà. Ogni volta che rompi un vincolo del tipo se vuoi questo devi anche accettare quest'altro, allarghi lo spazio delle scelte possibili. Separare il linguaggio dal luogo vuol dire poter scegliere ciascuno dei due per i suoi meriti, indipendentemente. È lo stesso principio che rende preziosi tanti strati intermedi dell'informatica: non aggiungono solo una traduzione, aggiungono libertà, perché sciolgono legami che davamo per inevitabili.
Per oggi ci fermiamo qui. Abbiamo visto come WebAssembly avvicini la vecchia promessa: scrivi una volta, gira ovunque. Di solito il linguaggio e il luogo sono legati a doppio filo, una gabbia comoda che ti impone lo strumento. WebAssembly spezza la catena: essendo un bersaglio universale, tanti linguaggi possono puntare verso di lui, e quel formato gira identico dappertutto, così scegli il linguaggio per i suoi meriti e non per il posto. Come una presa elettrica universale a cui qualunque apparecchio si collega. È la vecchia promessa di un famoso linguaggio, ripulita e allargata a molti linguaggi insieme. Con l'onestà dei limiti: alcuni linguaggi ci volano, altri arrancano. La lezione: disaccoppiare ciò che era legato è una forma di libertà. Nella prossima puntata: fuori dal browser, la macchina universale. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.