Vue rapprochée des mains d'un développeur travaillant sur une tablette avec du code, dans un bureau éclairé par une lumière chaude.

GitHub propose une gestion explicite des ressources en JavaScript

Le projet TC39 a déposé une proposition visant à uniformiser la gestion des ressources critiques en JavaScript, en introduisant une syntaxe de type using pour simplifier le nettoyage des objets en mémoire ou en entrée/sortie. Cette initiative, qui subsume l’ancienne proposition Async Explicit Resource Management, entend pallier les schémas incohérents actuellement utilisés par les développeurs pour garantir la libération de ressources comme les descripteurs de fichiers ou les flux de données.

Actuellement, le cycle de vie des ressources nécessite des constructions complexes, souvent basées sur les blocs try...finally ou les méthodes return() des générateurs. Par exemple, pour gérer un descripteur de fichier, il faut souvent encapsuler l’acquisition dans un try et appeler explicitement handle.release() dans le finally. La proposition propose de remplacer cette lourdeur par une syntaxe déclarative, comme using handle = acquireFileHandle();, le nettoyage se produisant automatiquement à la sortie du bloc.

Cette nouvelle syntaxe ne s’arrête pas aux fonctions synchrones. Pour les opérations asynchrones, elle introduit await using, permettant une gestion propre des flux qui nécessitent des opérations await avant leur fermeture, tel qu’un await stream.close().

Vue large d'un espace de travail moderne et ouvert baigné par la lumière dorée du soleil couchant.

Simplifier la gestion des multiples ressources

Le problème des ressources multiples est particulièrement vicieux. Quand on a deux ressources, A et B, et que la fermeture de B dépend de l’état de A, ou inversement, une exception lancée lors de la fermeture de A peut empêcher la fermeture de B, le code devient un casse-tête. Ron Buckton, champion de cette proposition, explique que l’approche actuelle force des structures imbriquées complexes pour s’assurer que les ressources sont purgées dans le bon ordre et en cas d’erreur.

GitHub.com introduit également deux conteneurs dédiés pour adresser cette complexité : DisposableStack et AsyncDisposableStack. Ces structures de type pile permettent de gérer plusieurs ressources disposables en une seule entité, en assurant l’ordre de destruction voulu, même si une fermeture intermédiaire échoue. C’est une réponse directe à ce que l’on appelle les « footguns » du développement.

La recherche de précision dans le langage

Si cette proposition vise à renforcer la robustesse des algorithmes de gestion des ressources, il est important de souligner que le langage JS continue d’évoluer sur d’autres plans techniques. Parallèlement, des outils tels que Math.sumPrecise(), récemment mis à disposition, permettent d’aborder la précision numérique avec une rigueur accrue. Selon la documentation de Mozilla Developer Network, cette méthode prévient la perte de précision intermédiaire lors de la somme d’une collection de nombres, surpassant ainsi ce qu’offre une simple boucle d’addition.

Cette recherche de précision, qu’elle soit mathématique ou structurelle, est un fil conducteur. Node.js, par exemple, a récemment intégré des changements dans V8 qui affinent le comportement de certaines fonctions mathématiques, comme mentionné dans un article de Node.js datant de novembre 2026, où les résultats de certaines opérations mathématiques peuvent légèrement différer selon la version du moteur.

Cette nouvelle gestion explicite des ressources, en adoptant une approche déclarative, suggère une maturation de l’écosystème JavaScript. Celle-ci cherche à rendre les opérations fondamentales, souvent chaotiques, plus prévisibles et sécurisées.

Sources