Anders Hejlsberg, l'architecte en chef du langage TypeScript, qui a créé les langages C#, Delphi et Turbo Pascal, a présenté un projet visant à créer un nouveau compilateur pour TypeScript - typescript-go (tsgo), développé dans le langage Go. Comme l'ancien compilateur, le nouveau projet est distribué sous la licence Apache 2.0.
Le compilateur TypeScript d'origine est écrit en TypeScript et traduit en JavaScript, ce qui crée des problèmes de mise à l'échelle lorsqu'il est utilisé dans de très grands projets. Les développeurs doivent supporter de longs délais lors du chargement et de la vérification du code dans les IDE, et sacrifier l'expérience du développeur pour réduire la latence en désactivant les capacités de vérification du code dans les éditeurs. Il existe également un besoin croissant dans l’écosystème d’outils de ligne de commande permettant de créer rapidement du code pour tester ses fonctionnalités.
On s’attend à ce que la création d’un compilateur et d’outils natifs pour TypeScript augmente considérablement la vitesse de construction, réduise la consommation de mémoire et réduise le temps de démarrage des éditeurs de code. Les hautes performances de la boîte à outils rendront le processus de développement dans les éditeurs de code modernes plus pratique, permettront une vérification rapide du code de l'ensemble du projet et permettront la mise en œuvre de techniques de refactorisation et d'analyse de code plus avancées, dont l'inclusion était auparavant trop coûteuse en termes de consommation de ressources.
Selon les développeurs de TypeScript, la nouvelle boîte à outils réduira le temps de construction d'un ordre de grandeur. Dans sa forme actuelle, le nouveau compilateur tsc peut traiter la base de code d'un projet VS Code en 7.5 secondes, tandis que l'ancien compilateur prenait 77.8 secondes pour faire de même. Dans le cas de la base de code Playwright, le temps de chargement est passé de 11.1 à 1.1 s, TypeORM de 17.5 à 1.3 s, date-fns de 6.5 à 0.7 s, tRPC de 5.5 à 0.6 s et rxjs de 1.1 à 0.1 s.
Le nouveau compilateur est en développement depuis octobre 2024 par une équipe de 9 employés de Microsoft. À ce stade, un prototype fonctionnel est déjà disponible pour les tests. Un aperçu de la boîte à outils de ligne de commande, avec une nouvelle implémentation tsc qui prend en charge la vérification de type, est prévu pour être publié d'ici le milieu de l'année. La première version entièrement fonctionnelle, capable de créer des projets et de fournir des services LSP pour les environnements de développement, devrait être publiée d'ici la fin de l'année.
La branche TypeScript 6.x continuera d'être livrée avec l'ancien compilateur et inclura quelques modifications pour préparer la migration vers la nouvelle implémentation. La première version à migrer vers la nouvelle chaîne d'outils sera TypeScript 7. Pendant un certain temps, les bases de code TypeScript 6.x et TypeScript 7.x seront maintenues et coexisteront en parallèle jusqu'à ce que la branche TypeScript 7 atteigne un état mature prêt à remplacer complètement l'ancienne chaîne d'outils.
Avant de commencer à travailler sur le projet, les développeurs ont exploré la possibilité d'utiliser différents langages de programmation et ont expérimenté des prototypes dans différents langages. En conséquence, le langage Go a été choisi pour créer un nouveau compilateur, comme la meilleure option pour effectuer le travail de réécriture de la base de code de l'ancien compilateur. Comparé à des langages comme Rust, Go est plus proche de TypeScript en termes de sémantique et de structure de code, ce qui permet de préserver les modèles existants lors du portage. L'utilisation de Go facilite la migration des modifications entre les bases de code et réduit la tâche fastidieuse de maintenance des anciennes et nouvelles versions côte à côte.
Le langage Go offre de bonnes performances, est développé dans un souci de programmation multithread et de fonctionnement efficace sur les systèmes multicœurs, et dispose d'une protection intégrée contre les problèmes lors du travail avec la mémoire. Le prix de la sécurité de la mémoire est que le garbage collector peut introduire des retards lors de l'exécution, mais le compilateur ne se soucie pas de ces retards.
D'autres langages tels que Rust ont également été envisagés comme une option, mais ils sont trop différents conceptuellement de TypeScript et leur utilisation aurait entraîné le portage du compilateur à partir de zéro, rendant difficile l'obtention d'une compatibilité totale avec l'ancien compilateur, résolvant les problèmes déjà résolus dans l'ancienne base de code et nécessitant beaucoup plus de temps et de ressources.
Le langage TypeScript étend les capacités de JavaScript tout en restant entièrement rétrocompatible, ce qui facilite la migration des applications existantes vers TypeScript. L'application TypeScript résultante est compilée en JavaScript simple, qui peut être exécuté dans n'importe quel navigateur Web moderne ou utilisé avec les plates-formes Node.js, Bun et Deno. TypeScript diffère de JavaScript en ce qu'il fournit des outils pour définir explicitement les types, ainsi qu'une prise en charge de l'utilisation de classes et de modules à part entière. Le typage statique permet d'éviter de nombreuses erreurs lors du processus de développement, permet d'utiliser des techniques d'optimisation supplémentaires, simplifie le débogage, rend le code plus lisible et plus facile à affiner et à maintenir.
Source: opennet.ru
