Brendan Eich è legato a uno degli aneddoti più noti della storia della programmazione: JavaScript sarebbe stato «creato in dieci giorni». L’affermazione è corretta se si riferisce al primo prototipo, realizzato in Netscape nel maggio 1995. Diventa fuorviante se suggerisce che il linguaggio di oggi sia nato già completo in quei dieci giorni. JavaScript moderno è il risultato di tre decenni di standardizzazione, implementazioni concorrenti, correzioni e compromessi con uno dei vincoli più forti del Web: le pagine esistenti devono continuare a funzionare.
La storia di Eich è interessante proprio per questa tensione. Sotto una fortissima pressione temporale progettò un linguaggio facile da inserire in una pagina, combinando però idee provenienti da Scheme e Self dietro una sintassi familiare ai programmatori C e Java. Da un’esigenza commerciale immediata nacque il linguaggio di programmazione nativo universale del browser.
Prima di Netscape: un ingegnere dei linguaggi
Brendan Eich nasce a Pittsburgh nel 1961. Studia matematica e informatica e nel 1986 consegue un master alla University of Illinois Urbana-Champaign. Prima di Netscape lavora, tra le altre, per Silicon Graphics e MicroUnity occupandosi di compilatori e sistemi.
Questa esperienza è importante per capire il 1995. Eich non improvvisa senza basi: conosce i compromessi tra progettazione del linguaggio, implementazione e prestazioni ed è particolarmente interessato a Scheme, un dialetto Lisp in cui le funzioni sono elementi centrali.
1995: dare comportamento alle pagine Web
A metà degli anni Novanta il Web è ancora soprattutto un insieme di documenti. HTML descrive una pagina e il browser la visualizza; molte interazioni richiedono un nuovo scambio con il server.
Netscape Navigator è allora uno dei browser dominanti. Netscape vuole consentire agli autori delle pagine di aggiungere comportamento direttamente nel browser senza una complessa catena di sviluppo. Parallelamente collabora con Sun intorno a Java, pensato per applicazioni più strutturate. Il nuovo linguaggio di scripting deve essere più leggero, immediatamente utilizzabile da HTML e privo di una fase di compilazione obbligatoria.
Eich entra in Netscape nell’aprile 1995. A maggio realizza in circa dieci giorni il prototipo chiamato Mocha. Il lavoro prosegue prima della pubblicazione: il linguaggio diventa LiveScript e, alla fine del 1995, JavaScript, in un periodo in cui Java gode di enorme visibilità commerciale.
Il nome genera da allora una confusione persistente. JavaScript non è una versione semplificata di Java. I due linguaggi differiscono per sistema di tipi, modello a oggetti e ambiente di esecuzione. La somiglianza più evidente deriva da una sintassi volutamente familiare, appartenente alla famiglia C: parentesi graffe, operatori e strutture di controllo.
Scheme e Self sotto una superficie familiare
Sotto questa superficie, JavaScript tratta le funzioni come valori di prima classe. Possono essere memorizzate in variabili, passate come argomenti o restituite come risultato. Questa flessibilità, tipica di Scheme, si adatta particolarmente bene a un browser guidato dagli eventi, dove una funzione può reagire a un clic, a un input o al completamento di un’operazione.
Per gli oggetti, Eich si ispira in parte a Self. Le classi non costituiscono il meccanismo fondamentale: un oggetto può delegare la ricerca delle proprietà a un altro oggetto attraverso una catena di prototipi. La sintassi class, introdotta molto più tardi, non sostituisce questo modello; offre un modo più familiare di lavorare sopra di esso.
JavaScript adotta inoltre la tipizzazione dinamica e numerose conversioni implicite. Queste scelte rendono rapida la scrittura di piccoli script, ma producono anche comportamenti sorprendenti. Alcune celebri stranezze del linguaggio si comprendono meglio come conseguenza del compromesso iniziale: JavaScript doveva essere accessibile, espressivo e soprattutto pronto in tempi strettissimi.
Eich sviluppa contemporaneamente il primo motore, antenato di SpiderMonkey. Progettare insieme sintassi e implementazione accelera la sperimentazione, ma lascia poco tempo per rivedere certe decisioni prima che pagine pubbliche inizino a dipenderne.
Quando le stranezze diventano contratti di compatibilità
Sul Web un errore pubblicato è difficile da cancellare. Quando migliaia di siti dipendono da un comportamento, modificarlo in modo incompatibile può romperli. Conversioni implicite, vecchie regole di scope, il comportamento di this o la coesistenza di null e undefined fanno quindi parte di un’eredità che JavaScript moderno deve gestire invece di eliminare semplicemente.
Questo vincolo spiega sia le asperità del linguaggio sia la sua straordinaria continuità. Gli standard tendono ad aggiungere meccanismi più chiari o sicuri senza rimuovere bruscamente quelli precedenti.
È inoltre essenziale distinguere due livelli: JavaScript non è il browser. Il linguaggio definisce valori, funzioni, oggetti e operazioni. API come DOM, eventi, fetch e archiviazione sono fornite dall’ambiente Web. Le incompatibilità storiche potevano quindi provenire dal linguaggio oppure dalle API del browser che lo circondavano.
Da JavaScript a ECMAScript
Il successo di Netscape produce rapidamente implementazioni concorrenti. Microsoft introduce JScript in Internet Explorer, mentre i browser sviluppano comportamenti e API proprietari. Senza una base comune, gli autori dei siti rischiano di dover scrivere codice diverso per browser diversi.
Nel 1996 Netscape sottopone il linguaggio a Ecma International. Nel 1997 viene pubblicata la prima edizione di ECMA-262 con il nome ECMAScript. È un passaggio decisivo: le regole centrali del linguaggio non dipendono più esclusivamente dal browser di un singolo produttore.
JavaScript resta il nome storico e di uso comune; ECMAScript è la specifica standardizzata. I browser implementano questa specifica e vi affiancano le API proprie del Web.
La standardizzazione non procede in linea retta. L’ambizioso progetto ECMAScript 4 si scontra negli anni Duemila con profondi disaccordi sull’entità dei cambiamenti. Il compromesso porta a ECMAScript 5 nel 2009. ECMAScript 2015 (ES6) rappresenta poi una tappa fondamentale con moduli, let e const, sintassi delle classi, arrow function e molte altre funzionalità. In seguito la specifica adotta un ritmo annuale.
Il fallimento di ES4 offre una lezione importante: far evolvere un linguaggio onnipresente è un problema di governance quanto di ingegneria. Occorre migliorare la piattaforma senza frammentare le implementazioni né abbandonare miliardi di righe di codice esistente.
La storia successiva di JavaScript va molto oltre Eich. Negli anni Duemila Ajax rende popolari interfacce capaci di comunicare con il server senza ricaricare l’intera pagina. Librerie e poi framework aiutano a strutturare applicazioni sempre più complesse.
Dal 2008 motori come V8 migliorano drasticamente le prestazioni attraverso compilazione just-in-time e altre ottimizzazioni. Nel 2009 Ryan Dahl crea Node.js, che utilizza V8 per eseguire JavaScript fuori dal browser. Il linguaggio arriva così sui server, negli strumenti di sviluppo e in ambienti che il progetto Netscape del 1995 non aveva mai previsto.
Eich non ha creato V8 né Node.js e non ha progettato personalmente le numerose funzionalità aggiunte in seguito a ECMAScript. Il suo ruolo storico è aver creato il nucleo iniziale e contribuito alla prima standardizzazione. La piattaforma moderna è un’opera collettiva di comitati di standardizzazione, team dei motori, produttori di browser, autori di librerie, sviluppatori e utenti.
Mozilla e il Web aperto
Dopo l’acquisizione di Netscape da parte di AOL, Eich diventa una figura importante del progetto Mozilla, assumendo responsabilità tecniche e dirigenziali. Firefox, lanciato nel 2004, contribuisce a ristabilire una forte concorrenza tra browser e a promuovere standard Web aperti.
Nel 2014 Eich diventa per breve tempo CEO di Mozilla, per poi dimettersi nel contesto di una controversia pubblica relativa a una donazione politica effettuata nel 2008. L’episodio fa parte della sua carriera professionale, ma è distinto dalla valutazione tecnica del suo ruolo in JavaScript.
Nel 2015 co-fonda Brave Software, che sviluppa il browser Brave, orientato tra l’altro alla protezione dal tracciamento e a un diverso modello di pubblicità online. Il progetto prosegue il suo coinvolgimento nel mondo dei browser, ma è separato dalla progettazione e dalla standardizzazione di JavaScript.
Perché Brendan Eich conta ancora nella storia del Web
Il contributo duraturo di Eich non consiste nell’aver progettato da solo JavaScript moderno. Consiste nell’aver dato al browser, in un momento decisivo dell’espansione del Web, un linguaggio abbastanza accessibile da diffondersi immediatamente e abbastanza espressivo da superare presto i piccoli script per cui sembrava destinato.
Le sue influenze spiegano parte di questa adattabilità: funzioni di prima classe, oggetti basati su prototipi e comportamento dinamico permettono stili di programmazione molto diversi. I compromessi iniziali spiegano anche molte difficoltà del linguaggio. Entrambi gli aspetti appartengono alla stessa storia.
JavaScript mostra soprattutto quanto rapidamente un linguaggio distribuito sul Web smetta di appartenere al proprio creatore. Diventa un contratto collettivo tra una specifica, diversi motori, API, strumenti e un’enorme quantità di software esistente. Il suo successo dipende tanto da questa continuità quanto dal progetto originario.
Cronologia
- 1961: Brendan Eich nasce a Pittsburgh.
- 1986: consegue un master alla University of Illinois Urbana-Champaign.
- Aprile 1995: entra in Netscape.
- Maggio 1995: realizza il prototipo Mocha in circa dieci giorni.
- 1995: Mocha diventa LiveScript e poi JavaScript.
- 1996: Netscape sottopone il linguaggio a Ecma International.
- 1997: viene pubblicata la prima edizione di ECMA-262.
- 1998: Eich contribuisce alla nascita del progetto Mozilla.
- 2004: viene lanciato Firefox.
- 2009: ECMAScript 5; Ryan Dahl lancia Node.js.
- 2014: breve mandato di Eich come CEO di Mozilla.
- 2015: ECMAScript 2015 e cofondazione di Brave Software.
- Oggi: ECMAScript continua a evolversi e JavaScript resta il linguaggio nativo universale dei browser Web.
Domande frequenti
Brendan Eich ha davvero creato JavaScript in dieci giorni?
Ha creato il primo prototipo, Mocha, in circa dieci giorni nel maggio 1995. Il linguaggio continuò a cambiare prima del lancio e poi per decenni attraverso standard e implementazioni diverse.
JavaScript è una versione di Java?
No. Il nome e parte della sintassi creano una somiglianza fuorviante. JavaScript è a tipizzazione dinamica e fondamentalmente basato sui prototipi; Java è stato progettato con un modello e un ambiente di esecuzione differenti.
Qual è la differenza tra JavaScript ed ECMAScript?
ECMAScript è la specifica standard che definisce il nucleo del linguaggio. JavaScript è il nome comune delle sue implementazioni. Nel browser, JavaScript lavora inoltre con API Web come il DOM.
Perché JavaScript usa i prototipi?
Eich si ispirò in parte a Self. Gli oggetti possono delegare la ricerca delle proprietà ad altri oggetti. La moderna sintassi delle classi non sostituisce questo meccanismo, ma vi si appoggia.
Brendan Eich ha creato Node.js?
No. Ryan Dahl ha creato Node.js nel 2009 utilizzando il motore V8. La sua importanza mostra quanto JavaScript sia andato oltre il ruolo originariamente previsto nelle pagine Web.
Perché le vecchie stranezze di JavaScript esistono ancora?
Perché la compatibilità all’indietro è un vincolo fondamentale del Web. Rimuovere o cambiare un vecchio comportamento potrebbe rompere siti ancora online, quindi il linguaggio tende a evolversi aggiungendo alternative migliori pur conservando gran parte del proprio passato.