- Lors de la récente 108e réunion du TC39, 9 propositions qui façonneront l’avenir de JavaScript ont progressé à différentes étapes du processus de standardisation
- En Stage 4 (approbation finale), on trouve des fonctionnalités comme
using, Array.fromAsync et Error.isError, qui améliorent la productivité et la sûreté du développement
- Du Stage 3 au Stage 1, diverses propositions utiles sont en discussion, notamment les
ArrayBuffer immuables, le random avec seed, clamp, des améliorations de NumberFormat et des fonctions Random
- Deno adopte activement les standards les plus récents et expérimente rapidement ces nouveautés ; certaines sont déjà disponibles dans Deno et dans les navigateurs modernes
- Les discussions de standardisation doivent se poursuivre, et l’écosystème JavaScript devrait continuer à évoluer vers davantage de sûreté et de concision
Dernières avancées de standardisation du TC39 et principales nouveautés de JavaScript
Stage 4 : fonctionnalités en voie d’adoption officielle
Gestion explicite des ressources (using)
- La déclaration
using garantit le nettoyage automatique à la fin du cycle de vie d’objets de ressource tels que des fichiers ou des sockets réseau
- Inspiré de structures présentes en C# et Python, ce mécanisme appelle
[Symbol.dispose]() ou [Symbol.asyncDispose]() à la fin du bloc si l’objet implémente ces méthodes
- Le nettoyage est automatique même en cas d’exception, ce qui réduit les risques de fuite de ressources comme les descripteurs de fichiers
- Déjà pris en charge dans Chrome 134, Firefox 134, Deno v2.3, etc. ; dans Deno, il peut être utilisé immédiatement en production pour les fichiers, sockets et autres ressources
Array.fromAsync
- Méthode standard qui convertit un iterable asynchrone en tableau et renvoie une
Promise
- Elle collecte les valeurs de manière séquentielle depuis, par exemple, un async generator, puis fournit le tableau final via une
Promise
- Son usage est proche de celui de
Array.from en synchrone, avec prise en charge d’une fonction de mapping et de thisArg
- Pris en charge par tous les principaux navigateurs, Node v22 et Deno v1.38 ou version ultérieure
Error.isError
- Fonction intégrée permettant de déterminer simplement si une valeur est un véritable objet
Error
- Fonctionne de manière fiable même dans des cas complexes, comme le cross-realm ou les erreurs issues de sous-classes
- Améliore la fiabilité des polyfills et du développement de bibliothèques
Stage 3 : ArrayBuffer immuable
Immutable ArrayBuffer
- Ajout prévu des méthodes
transferToImmutable() et sliceToImmutable() pour prendre en charge l’immutabilité de ArrayBuffer
- Un buffer immuable ne peut plus être modifié ni détaché après sa création, ce qui favorise un partage sûr entre threads et workers ainsi que de meilleures performances
- Dans Deno, par exemple, cela permet de traiter des données binaires plus efficacement, sans copies inutiles
Stage 2 : nouvelles fonctionnalités proposées
Random.Seeded
- PRNG basé sur une seed (
Random.Seeded(seed)) permettant de générer la même séquence aléatoire d’une exécution à l’autre
- Utile dans les domaines où la reproductibilité est importante, comme les jeux ou les simulations
- Contrairement à
Math.random(), il offre des fonctions avancées comme la définition de seed ou la duplication de l’état
Number.prototype.clamp
- Méthode de limitation de plage numérique qui ajuste automatiquement une valeur dans l’intervalle minimum-maximum défini
- Remplace de façon plus courte et plus claire le motif
Math.min(Math.max(x, min), max)
Stage 1 : propositions en discussion initiale
Keep Trailing Zeros
- Nouvelle option de
Intl.NumberFormat pour contrôler finement la conservation ou suppression des zéros après la virgule
- Renforce les possibilités d’affichage voulues dans les interfaces, notamment pour les montants ou les nombres à virgule fixe
Comparisons
- Vise à standardiser une représentation lisible par l’humain des valeurs ainsi que l’affichage des diff, à la manière de
util.inspect de Node.js
- Apporterait de la cohérence dans les frameworks de test et les sorties console
Random Functions
- Introduction d’un nouvel espace de noms
Random, regroupant des fonctions liées à l’aléatoire, à l’échantillonnage et au mélange, de manière sûre et concise
- Doit éviter les erreurs de type off-by-one et prendre en charge intuitivement divers motifs de collecte et d’échantillonnage
L’avenir de Deno et de l’écosystème JavaScript
- Deno participe activement aux discussions de standardisation et intègre rapidement les nouvelles fonctionnalités dans les usages concrets
- Exemples : propagation du contexte asynchrone, OpenTelemetry intégré, nouveaux modèles de gestion des ressources
- Les discussions de standardisation devraient se poursuivre lors des prochaines réunions du TC39 après septembre
- Les développeurs JavaScript pourront à l’avenir bénéficier d’un langage encore plus puissant, plus sûr et plus pratique
3 commentaires
await operations proposal
C'est pour quand...
Le pattern matching, c’est pour quand ?
Il y a bien
signalsau stage 1, mais il semble que sa sortie officielle soit encore loin.