TypeScript Weekly #4 : Bun adopte la compilation AOT en code machine, Vercel dévoile tsc-ts auto-hébergé et le cœur officiel allège sa mémoire de 30 %

TypeScript · Weekly #4

TypeScript Weekly #4 : Bun adopte la compilation AOT en code machine, Vercel dévoile tsc-ts auto-hébergé et le cœur officiel allège sa mémoire de 30 %

TypeScriptHebdomadaire LangagesCompilateurAOT

Sources:GitHub Releases + 官方博客 + HN

📦 Actualités et Versions

Évolution de la version stable officielle et gouvernance mémoire de la branche principale

La dernière version stable officielle est TypeScript 7.0.2 (publiée le 20 août 2026, tag v7.0.2), dont l’extension associée pour VS Code, vscode-typescript/v1.0.1, a achevé son déploiement général le 30 septembre. La branche de développement principale poursuit son cycle 7.1.0-dev (miroir npm : 7.1.0-dev.20261018.1). Pour une analyse approfondie des évolutions d’architecture apportées par la série 7.0, consultez : TypeScript 7.0 : analyse détaillée des nouveautés.

Au cours des 7 derniers jours, la branche 7.1 a intégré d’importants remaniements de bas niveau touchant au modèle mémoire et aux communications inter-processus (IPC). Les principales modifications et leurs impacts techniques concrets se résument ainsi :

ModificationÉvolution de conceptionImpact technique concret
Refonte des frontières d’allocation Typed-ArenaRemplacement des blocs fixes de 256 objets par des quotas stricts de 512 octets ; déport des champs de types optionnels vers un stockage froid (PR #64734).Diminution de l’empreinte mémoire du tas de 22,15 % à 29,66 % sur l’ensemble des bancs d’essai officiels, éliminant les variations brutales de mémoire et les pauses GC lors des vérifications multi-cœurs concurrentes.
API programmatique inter-processusAdoption des tubes nommés et des sockets de domaine Unix ; ajout de la collecte de métriques TS_API_TIMING_DIR (PR #64818, #64846).Offre un protocole normalisé pour relier typescript-eslint et les bundlers au cœur Go, supprimant la dépendance aux anciens mécanismes d’alias doubles.
Interdiction de résolution des chemins réseau distantsLe compilateur bloque strictement les chemins réseau distants (partages UNC et montages réseau) lors de la phase de résolution de modules (PR #64832).Prévient les attaques par empoisonnement de partages réseau et contraint le résolveur à opérer uniquement dans des topologies de systèmes de fichiers locaux de confiance.

La fragmentation de l’écosystème consécutive au retrait des API Node.js dans la version 7.0 est désormais comblée par des solutions IPC natives, tandis que la refonte de la mémoire repousse nettement le plafond des vérifications concurrentes au sein des conteneurs d’intégration continue (CI).

📝 Analyses Détaillées

La PR Bun #45631 introduit la compilation AOT en code machine avec bun build --compile --aot

Ce qui s’est passé : Le 17 octobre, Jarred Sumner a ouvert la PR #45631 sur Bun, inaugurant la commande bun build --compile --aot. Cette fonctionnalité contourne entièrement le JIT et le bytecode pour compiler directement du code TypeScript strictement typé en code machine natif grâce au backend B3 de JavaScriptCore. Les tests menés sur l’application de référence test/aot/backend/tracker (2 000 lignes de pur TypeScript) affichent : un débit monocœur atteignant 4 420 req/s (+48 % par rapport aux 2 987 req/s de Bun 1.4.3), une mémoire résidente (RSS) diminuée de 99 Mo à 63 Mo (-36 %) et un temps de réponse à froid réduit à 24 ms, atteignant 83 % des performances d’une implémentation Go native (5 300 req/s).

Pourquoi c’est important : Les environnements d’exécution légers se limitaient jusqu’ici à l’effacement de types et à la création d’archives à processus unique. Bun connecte désormais l’analyse sémantique statique aux représentations intermédiaires SSA, dispensant le runtime de demander de la mémoire exécutable lors de l’exécution (conforme aux bacs à sable W^X). Cette avancée offre aux microservices backend une forme de distribution native digne des langages compilés, réduisant significativement la charge mémoire permanente des conteneurs.

Qui est concerné : Les équipes full-stack opérant sur des architectures serverless ou conteneurisées, attentives aux temps de démarrage à froid et aux coûts de mémoire, ainsi que les architectes de plateformes en quête de débits extrêmes.

Lien : Bun PR #45631: Compile TypeScript to machine code ahead of time

L’avis de la rédaction : La compilation AOT native comprime spectaculairement l’empreinte mémoire d’exécution. Toutefois, dès lors que le code exploite eval ou la réflexion dynamique, il doit rétrograder en mode interprété ; la latence d’interprétation WebAssembly se trouve fortement accrue et les paquets npm non typés nécessitent encore des caches en ligne statiques pour éviter des chutes de régime.

Vercel Labs publie tsc-ts et scriptc en open source : vers un auto-hébergement de TypeScript

Ce qui s’est passé : Vercel Labs a officialisé le projet expérimental tsc-ts et son compilateur AOT scriptc. Rédigé en syntaxe TypeScript conventionnelle, tsc-ts reproduit intégralement le cœur en langage Go de TypeScript 7.0.2 (TypeScript-Go) et se compile, via scriptc par l’intermédiaire de LLVM/C, en un exécutable natif indépendant. Sur l’ensemble des 12 500 fichiers de tests officiels (17 000 unités), l’analyse syntaxique, la liaison des symboles et la vérification des types se sont révélées 100 % conformes à la version officielle en Go.

Pourquoi c’est important : Bien que la réécriture du compilateur TS en Go par Microsoft ait décuplé les performances, elle a éloigné les développeurs frontend de la maintenance du code source du compilateur. Vercel démontre qu’à l’aide d’un sous-ensemble statique rigoureux et d’une infrastructure AOT, un compilateur écrit en TypeScript lui-même peut produire des exécutables de premier ordre sans machine virtuelle sous-jacente, restaurant la possibilité d’un auto-hébergement pour l’outillage linguistique.

Qui est concerné : Les ingénieurs en infrastructure frontend, les mainteneurs de compilateurs et de bundlers, ainsi que les architectes souhaitant diffuser des outils natifs indépendants de Node.js ou de Go.

Liens : Vercel Labs tsc-ts, Site officiel de scriptc

L’avis de la rédaction : L’ancien architecte de JavaScriptCore Filip Pizlo a constaté lors d’essais réels une rapidité d’exécution surpassant légèrement la version Go officielle. Cependant, le projet s’appuie fortement sur les hypothèses d’inférence statique de scriptc et proscrit le typage dynamique implicite ; maintenir la parité avec les fonctionnalités complexes à venir dans la version 7.1 exigera des efforts d’ingénierie conséquents.

Jake Bailey pilote la refonte mémoire du compilateur Go : près de 30 % d’économie sur le tas

Ce qui s’est passé : Le mainteneur principal de Microsoft Jake Bailey a validé la série de PR #64734 consacrée à l’optimisation mémoire. Cette modification réorganise le groupe Typed-Arena — auparavant configuré par blocs fixes de 256 objets — autour d’un système de quotas calibrés à 512 octets, tout en sortant les formes structurelles optionnelles des chemins critiques pour les placer en mémoire froide. Les tests sous charge du perf-bot officiel sur 9 scénarios représentatifs révèlent un gain de mémoire de 22,15 % à 29,66 % sur l’ensemble des cas d’usage.

Pourquoi c’est important : Si Go facilite l’exécution de vérifications concurrentes, la création d’objets fragmentés et éphémères au sein d’AST monumentaux provoquait d’importants pics d’analyse lors du ramasse-miettes (GC). Après cette refonte, la mémoire requise pour inspecter la documentation de MUI diminue de 29,66 % (durée d’analyse raccourcie de 10,86 %), tandis que le tas alloué au code source de VS Code recule de 27,19 % (volume scanné par le GC en baisse de 10,44 %, nombre d’instructions réduit de 9,43 %). Le risque d’erreur de mémoire insuffisante (OOM) lors des vérifications multithreads sur de vastes monorepos s’en trouve nettement atténué.

Qui est concerné : Les responsables de pipelines CI confrontés à des pannes récurrentes d’OOM sur des conteneurs de 4 Go ou 8 Go, ainsi que les utilisateurs de daemons LSP sur de grands projets.

Lien : TypeScript PR #64734: Various memory optimizations

L’avis de la rédaction : Bien que le fractionnement de l’arène par quotas d’octets augmente légèrement les allocations d’environ 13,9 %, il empêche efficacement les références vers des objets obsolètes d’immobiliser des blocs entiers de mémoire. Dans des conteneurs aux ressources contraintes, les équipes peuvent désormais élever en toute sérénité le degré de concurrence du paramètre --checkers.

Sortie de tsc-rs 0.7.0 : lever les verrous mémoire de WASM pour la vérification dans le navigateur

Ce qui s’est passé : L’équipe emmenée par Theo Browne a mis à disposition la version 0.7.0 de son compilateur TS écrit en Rust, tsc-rs. En intégrant la PR #82, cette version affine la disposition mémoire du vérificateur de types pour la cible wasm32-unknown-unknown, réduit le coût d’allocation dans les segments de mémoire linéaire et intègre au banc d’essai les performances monocœur sous le mode --fast.

Pourquoi c’est important : La compilation du compilateur officiel Go en WebAssembly engendre des binaires volumineux et une gestion mémoire grossière, compromettant le déploiement d’un vérificateur complet dans le navigateur. tsc-rs tire parti du cycle de vie statique de Rust et de ses abstractions à coût nul pour supprimer les interruptions de GC, rendant crédible l’exécution directe sous WASM des 180 000 tests officiels au sein d’un navigateur.

Qui est concerné : Les équipes concevant des plateformes de code interactives, les architectes d’IDE en ligne (tels que StackBlitz) et les ingénieurs évaluant la validation de types légère en périphérie de réseau (Edge).

Lien : Notes de version de tsc-rs v0.7.0

L’avis de la rédaction : Rust offre un avantage structurel indéniable quant à la densité de compression des instructions pour WASM. Néanmoins, l’analyse d’AST totalisant plusieurs millions de lignes au sein d’un espace d’adressage en 32 bits côtoie encore la limite des 4 Go de mémoire virtuelle ; une stratégie de déchargement incrémental des nœuds d’AST demeurera indispensable à terme.

🔥 Débats Communautaires

tsc-ts de Vercel relance la controverse sur les réécritures de compilateurs et les “poupées russes”

Le 17 octobre, la présentation de tsc-ts par Vercel Labs s’est hissée en tête de Hacker News (49 points, 51 commentaires), alimentant de riches débats techniques entre théoriciens des compilateurs et acteurs de l’écosystème frontend.

  • Partisans du sous-ensemble natif : Sous l’impulsion de Filip Pizlo, spécialiste reconnu des machines virtuelles, certains ingénieurs soulignent que surpasser la version Go en débit monocœur démontre la pertinence d’un typage restreint conjugué à l’AOT. TypeScript délimitant rigoureusement les types, se séparer du dynamisme incertain pour produire du code machine prouve qu’il est possible de conjuguer syntaxe TypeScript et rendements d’un langage système industriel.
  • Détracteurs de la dérive sémantique : Des observateurs plus réservés font remarquer que passer du JS/TS au Go de Microsoft, puis aux réécritures communautaires en Rust et en C#, pour enfin réencapsuler TypeScript via un compilateur ad hoc constitue un empilement en “poupées russes” énergivore pour la communauté. Par ailleurs, scriptc ne prenant en charge qu’un dialecte épuré de TypeScript, les nuances d’interprétation non éprouvées à grande échelle en production risquent d’induire des diagnostics subtilement erronés dans les bases de code d’entreprise.

Lien : HN: Tsc-ts: TypeScript written in TypeScript

Parution du jeu de règles Deslop : un linting préventif face à l’érosion du code généré par l’IA

Le 13 octobre, la suite de règles Oxlint deslop, pensée pour endiguer la perte de qualité liée au code rédigé par IA, a suscité un écho notable (Hacker News 32 points, 8 commentaires).

  • Défenseurs de règles rigides : Leurs promoteurs relèvent que les assistants de génération de code, focalisés sur la réussite immédiate de la commande, recourent massivement aux casts any, dupliquent inutilement des structures de données similaires et conçoivent des tests unitaires factices aux assertions trompeuses. Lorsque des équipes intègrent ces outils, l’emploi de linters ultra-rapides en Rust (comme Oxlint ou ast-grep) dès la phase de pré-commit constitue une barrière essentielle pour préserver l’architecture des types.
  • Partisans des tests d’intégration : À l’opposé, plusieurs équipes agiles estiment qu’un carcan statique inflexible oblige les agents d’IA à consommer des jetons et un temps précieux sur des micro-ajustements de typage, freinant l’itération fonctionnelle. La solidité du code devant émaner de tests d’intégration de bout en bout et d’assertions dynamiques, un dogmatisme excessif au niveau de la compilation apparaît alors contre-productif.

Liens : HN: Show HN: Deslop – Oxlint rules for AI-generated TypeScript, GitHub deslop

🔭 À Suivre la Semaine Prochaine

  • Mesures concrètes du coût IPC dans TypeScript 7.1 : Évaluation des pertes de débit et du coût de sérialisation mémoire lors de l’échange de gros arbres syntaxiques via l’API sockets Unix / tubes nommés d’Andrew Branch (PRs #64818 et #64846) ;
  • Intégration du cache en ligne pour Bun PR #45631 : Suivi des correctifs de Jarred Sumner visant à accélérer l’accès aux propriétés des paquets tiers npm non typés, afin d’évaluer le gain de débit du code machine AOT sur des frameworks de référence (Express, Fastify).