I modelli di machine learning producono tipi TypeScript che superano il controllo dei tipi?
Author
Venue
Conferenza europea sulla programmazione orientata agli oggetti (ECOOP) 2023
Abstract
La migrazione dei tipi è il processo di aggiunta di tipi a codice non tipizzato per ottenere garanzie in fase di compilazione. TypeScript e altri sistemi di tipi graduali facilitano la migrazione dei tipi consentendo ai programmatori di iniziare con tipi imprecisi e di rafforzarli gradualmente. Tuttavia, l'aggiunta di tipi è un'operazione manuale e diverse migrazioni su codici di grandi dimensioni utilizzati nell'industria hanno richiesto diversi anni. Nella comunità di ricerca, c'è stato un notevole interesse nell'utilizzo dell'apprendimento automatico per automatizzare la migrazione dei tipi in TypeScript. I modelli di machine learning esistenti riportano un alto grado di accuratezza nella previsione delle singole annotazioni di tipo TypeScript. Tuttavia, in questo articolo sosteniamo che l'accuratezza possa essere fuorviante e che dovremmo affrontare una questione diversa: uno strumento di migrazione automatica dei tipi può produrre codice che superi il type checker di TypeScript? Presentiamo TypeWeaver, uno strumento di migrazione dei tipi TypeScript che può essere utilizzato con un modello di previsione dei tipi arbitrario. Valutiamo TypeWeaver con tre modelli presenti in letteratura: DeepTyper, una rete neurale ricorrente; LambdaNet, una rete neurale grafica; e InCoder, un trasformatore multi-linguaggio generico che supporta attività di "fill-in-the-middle". Il nostro strumento automatizza diversi passaggi necessari per l'utilizzo di un modello di previsione dei tipi: (1) importazione dei tipi per le dipendenze di un progetto; (2) migrazione dei moduli JavaScript alla notazione TypeScript; (3) inserimento delle annotazioni di tipo previste nel programma per generare TypeScript quando necessario; e (4) rifiuto delle previsioni non relative al tipo quando necessario. Valutiamo TypeWeaver su un set di dati di 513 pacchetti JavaScript, inclusi pacchetti che non sono mai stati tipizzati prima. Con il miglior modello di previsione dei tipi, riscontriamo che solo il 21% dei pacchetti supera il controllo dei tipi, ma, cosa più incoraggiante, il 69% dei file supera il controllo dei tipi con successo.
