Ciao, e benvenuto nella quinta puntata della sessantesima stagione. Oggi arriva la puntata più onesta della stagione, quella che ti risparmia una delusione molto comune. Perché WebAssembly ha una fama di velocità e potenza, e chi lo prova sperando in un miracolo istantaneo spesso resta spiazzato. La ragione ha un nome preciso. Oggi parliamo del confine, il punto dove finisce la magia.
Partiamo dal mondo interno della macchina, perché è più piccolo di quanto pensi. La macchina astratta di WebAssembly, dentro il suo recinto, ha un mondo molto ristretto. Alla base, sa parlare bene solo di numeri, e sa lavorare solo dentro il proprio blocco di memoria isolato. Non conosce direttamente il testo come lo intendiamo noi, non conosce gli oggetti complicati, non sa nulla della pagina web o del mondo fuori. È fatta per fare calcoli velocissimi su dati semplici, chiusa nella sua stanza. Ed è proprio da questa purezza che nascono la sua velocità e la sua sicurezza. Ma è anche la fonte del suo limite.
Voglio mostrarti dove nasce il costo, perché è controintuitivo. Il problema è che il lavoro utile, quasi sempre, richiede di parlare col mondo fuori dalla stanza. Devi mostrare qualcosa nella pagina, gestire del testo, scambiare dati complicati con il resto del programma. E ogni volta che il codice dentro WebAssembly vuole fare qualcosa del genere, deve attraversare un confine, un varco tra il suo mondo ristretto e il mondo esterno. Attraversare quel confine non è gratis. Passare dei semplici numeri è veloce. Ma passare cose ricche, come un testo o una struttura di dati complessa, richiede di copiare byte attraverso il muro, con del codice di raccordo che fa da traduttore. E se attraversi quel confine di continuo, avanti e indietro, il costo di tutti quei passaggi può mangiarsi la velocità che avevi guadagnato dentro.
Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Immagina uno specialista geniale, il più veloce del mondo nei suoi calcoli, ma chiuso in una stanza insonorizzata, dietro un vetro. Lo specialista capisce solo una lingua fatta di numeri, e l'unico modo per comunicare con lui è far passare bigliettini attraverso una fessura nel vetro. Se gli mandi un numero e lui ti rimanda un numero, tutto vola. Ma se devi spiegargli qualcosa di complicato, devi tradurlo faticosamente in una lunga sequenza di bigliettini, infilarli uno a uno nella fessura, e aspettare che lui te li rimandi tradotti. Per un calcolo grande e autonomo, quello specialista è imbattibile. Per un dialogo fitto, fatto di mille piccoli scambi, il continuo passare bigliettini nella fessura diventa più lento che fare tutto da soli, fuori.
Voglio tirarne la conseguenza pratica, perché ti evita l'errore. Da qui viene la regola d'oro su quando WebAssembly conviene davvero. Conviene per i lavori grossi, pesanti e autonomi: dai in pasto alla stanza un compito impegnativo, lui ci lavora a lungo da solo senza uscire, e alla fine ti restituisce un risultato. In quel caso, il pedaggio del confine lo paghi una volta sola, ed è nulla rispetto al calcolo risparmiato. Non conviene invece per i lavori fatti di tanti piccoli scambi continui col mondo esterno, quelli in cui si attraversa il confine di continuo: lì il pedaggio, pagato mille volte, divora ogni guadagno. WebAssembly non è un pulsante che rende veloce tutto: è un motore potente per un certo tipo di lavoro.
Voglio agganciare la tesi del podcast, perché qui è perfetta. Questo è esattamente ciò che intendiamo quando diciamo di capire la macchina sotto la magia. La magia è la promessa di velocità. La macchina è la macchina astratta con il suo mondo ristretto e il suo confine costoso. Chi conosce quel confine sa esattamente quali problemi affidare a WebAssembly, e ne trae vantaggi enormi. Chi lo ignora ci butta dentro il problema sbagliato, resta deluso dai risultati, e dà la colpa allo strumento, quando la colpa è solo di non aver capito dove finisce la stanza e comincia il confine.
Voglio darti la lezione generale, perché vale per ogni astrazione. La lezione è che ogni cosa potente ha un bordo, un punto in cui incontra il resto del mondo, e spesso è proprio su quel bordo che si nascondono i costi veri. Guardiamo sempre a quanto è veloce o potente il cuore di uno strumento, e dimentichiamo di chiederci quanto costa farlo dialogare con tutto il resto. Ma è nelle giunzioni, nei confini, nei passaggi da un mondo all'altro, che i sistemi reali rivelano il loro vero comportamento. Imparare a guardare i bordi, e non solo il centro, è un segno di maturità tecnica.
Per oggi ci fermiamo qui. Abbiamo visto il confine, il punto dove finisce la magia. La macchina astratta ha un mondo ristretto: sa parlare bene solo di numeri, chiusa nel suo blocco di memoria. Ma il lavoro utile richiede di parlare col mondo fuori, e ogni passaggio attraverso il confine costa: i numeri volano, ma testi e dati ricchi vanno copiati con codice di raccordo. Se attraversi il confine di continuo, il costo si mangia la velocità. Come uno specialista geniale dietro un vetro, con cui comunichi solo via bigliettini nella fessura: imbattibile per un grande calcolo, lento per mille piccoli scambi. La lezione: guarda i bordi, non solo il centro, perché è lì che si nascondono i costi veri. Nella prossima puntata: un linguaggio qualunque, ovunque. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.