Erzeugen Machine-Learning-Modelle TypeScript-Typen, die typgeprüft sind?
Author
Venue
Europäische Konferenz für objektorientierte Programmierung (ECOOP) 2023
Abstract
Typenmigration ist der Prozess, bei dem Typen zu untypisiertem Code hinzugefügt werden, um Sicherheit bei der Kompilierung zu erlangen. TypeScript und andere graduelle Typsysteme erleichtern die Typenmigration, indem sie es Programmierern ermöglichen, mit ungenauen Typen zu beginnen und diese schrittweise zu verfeinern. Das Hinzufügen von Typen ist jedoch ein manueller Aufwand, und es wurde berichtet, dass mehrere Migrationen in großen, industriellen Codebasen mehrere Jahre in Anspruch genommen haben. In der Forschungsgemeinschaft besteht großes Interesse daran, maschinelles Lernen zur Automatisierung der TypeScript-Typenmigration einzusetzen. Bestehende Modelle des maschinellen Lernens weisen eine hohe Genauigkeit bei der Vorhersage einzelner TypeScript-Typangaben auf. In diesem Artikel argumentieren wir jedoch, dass Genauigkeit irreführend sein kann und wir uns einer anderen Frage zuwenden sollten: Kann ein automatisches Tool zur Typenmigration Code erzeugen, der den TypeScript-Typ-Checker besteht? Wir stellen TypeWeaver vor, ein Tool zur TypeScript-Typenmigration, das mit einem beliebigen Modell zur Typvorhersage verwendet werden kann. Wir evaluieren TypeWeaver mit drei Modellen aus der Literatur: DeepTyper, ein rekurrentes neuronales Netzwerk; LambdaNet, ein graphisches neuronales Netzwerk; und InCoder, ein universeller, mehrsprachiger Transformer, der „Fill-in-the-Middle“-Aufgaben unterstützt. Unser Tool automatisiert mehrere Schritte, die für die Verwendung eines Typvorhersagemodells erforderlich sind: (1) Importieren von Typen für die Abhängigkeiten eines Projekts; (2) Migrieren von JavaScript-Modulen in die TypeScript-Notation; (3) Einfügen von vorhergesagten Typ-Annotationen in das Programm, um bei Bedarf TypeScript zu erzeugen; und (4) Verwerfen von Nicht-Typ-Vorhersagen, wenn erforderlich. Wir evaluieren TypeWeaver anhand eines Datensatzes von 513 JavaScript-Paketen, darunter auch Pakete, die zuvor noch nie typisiert wurden. Mit dem besten Typvorhersagemodell stellen wir fest, dass nur 21 % der Pakete die Typprüfung bestehen, aber erfreulicherweise bestehen 69 % der Dateien die Typprüfung erfolgreich.
