Immagine AI

Anders Hejlsberg, creatore di TypeScript e C#, ritiene che gli attuali sistemi di intelligenza artificiale siano ancora lontani dal poter realizzare autonomamente software della complessità del compilatore TypeScript. Intervenendo sul ruolo dell’IA nello sviluppo software, Hejlsberg ha spiegato che i modelli possono già produrre grandi quantità di codice e, per determinate categorie di applicazioni, arrivare persino a scriverne praticamente la totalità. Il problema cambia però quando si passa dal volume di codice prodotto alla realizzazione di software altamente specializzato, nel quale occorre sviluppare algoritmi, strutture e soluzioni che non possono essere semplicemente ricostruiti a partire da schemi già ampiamente presenti nei dati di addestramento.

Hejlsberg porta come esempio diretto proprio il compilatore TypeScript. Il team ha sperimentato l’impiego dell’intelligenza artificiale su questo tipo di attività, ma secondo il progettista i sistemi attuali non sono in grado di costruire autonomamente il compilatore. Si tratta infatti di una base software molto diversa dalle applicazioni più comuni: il compilatore deve analizzare il codice sorgente, costruirne una rappresentazione interna, risolvere simboli e dipendenze, applicare le regole del sistema di tipi, produrre diagnostica coerente e mantenere la compatibilità semantica con una quantità estremamente elevata di codice già esistente. A questo si aggiunge la necessità di gestire casi limite accumulati nel corso di oltre un decennio di sviluppo del linguaggio.

La questione emerge con particolare evidenza nel passaggio da TypeScript 6 a TypeScript 7. La nuova generazione del compilatore non consiste in una semplice ottimizzazione della precedente implementazione, ma nel trasferimento dell’intera infrastruttura da una codebase TypeScript compilata in JavaScript a una nuova implementazione nativa sviluppata in Go. Microsoft ha condotto il port cercando di preservare il più fedelmente possibile struttura e logica del compilatore originale, proprio per evitare variazioni nel comportamento del sistema di tipi e mantenere la compatibilità tra le due generazioni. La logica di type checking di TypeScript 7 è stata quindi trasferita metodicamente anziché riprogettata da zero.

La scelta di Go ha consentito al team di sfruttare sia l’esecuzione nativa sia il parallelismo basato su memoria condivisa. Il risultato è un incremento delle prestazioni che in numerosi progetti si avvicina a un fattore dieci rispetto a TypeScript 6. Nei test pubblicati dal team TypeScript, per esempio, la compilazione del progetto Visual Studio Code è passata da circa 89 secondi con TypeScript 6 a meno di 9 secondi con TypeScript 7, mentre Sentry è passato da oltre 133 secondi a poco più di 16. Miglioramenti analoghi sono stati rilevati su TypeORM e Playwright, con accelerazioni comprese indicativamente tra sette e dieci volte.

Il nuovo compilatore sfrutta inoltre il parallelismo non soltanto all’interno di un singolo progetto, ma anche nella gestione simultanea di più progetti. Funzioni come build incrementali, project references e modalità --build sono state trasferite nella nuova implementazione, permettendo alla toolchain di distribuire maggiormente il lavoro sull’hardware disponibile. L’intervento riguarda anche il language service utilizzato dagli editor per funzioni come completamento automatico, ricerca delle definizioni, riferimenti, rinomina dei simboli, informazioni contestuali e correzioni rapide.

Il lavoro necessario per ottenere questa compatibilità evidenzia il tipo di problema al quale Hejlsberg fa riferimento quando distingue il codice che l’IA può già generare da quello che continua a richiedere un intervento ingegneristico altamente specializzato. TypeScript dispone di circa 20.000 test dedicati al compilatore e il nuovo port è stato verificato proprio confrontandone sistematicamente il comportamento con quello della precedente implementazione. Già durante lo sviluppo di TypeScript 7 il team indicava una corrispondenza quasi completa nella rilevazione degli errori, mentre le differenze residue erano riconducibili principalmente a funzionalità ancora in fase di completamento oppure a cambiamenti intenzionali tra le versioni.

Hejlsberg non esclude quindi che l’intelligenza artificiale possa produrre una percentuale sempre maggiore del codice software complessivamente scritto. Sottolinea però che una percentuale calcolata sul volume di codice può essere fuorviante, perché la stessa diffusione degli strumenti generativi sta facendo aumentare enormemente la quantità totale di codice prodotto. Applicazioni relativamente standardizzate possono essere generate quasi interamente dall’IA, mentre rimane molto più complesso affidarle software che richiede algoritmi nuovi, garanzie semantiche, compatibilità su larga scala e decisioni architetturali difficili da ricavare semplicemente da esempi precedenti.

Il caso TypeScript rappresenta precisamente questa differenza. La nuova versione del compilatore raggiunge prestazioni circa dieci volte superiori non perché un modello abbia rigenerato automaticamente la codebase, ma attraverso un port controllato in Go nel quale il team ha conservato deliberatamente la struttura e la semantica del sistema esistente, verificando il risultato attraverso una vasta suite di test e su codebase composte da milioni di righe. È questo livello di lavoro che, secondo Hejlsberg, rimane ancora fuori dalla portata della generazione automatica completa da parte degli attuali sistemi di intelligenza artificiale.

Questo articolo è stato redatto con il supporto di strumenti di intelligenza artificiale (AI)

Di Fantasy