10 points par GN⁺ 2025-06-30 | 3 commentaires | Partager sur WhatsApp
  • 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

 
carnoxen 2025-07-03

await operations proposal

C'est pour quand...

 
dohyun682 2025-06-30

Le pattern matching, c’est pour quand ?

 
click 2025-06-30

Il y a bien signals au stage 1, mais il semble que sa sortie officielle soit encore loin.