Une proposition présentée à l’ECMA International (European Computer Manufacturers Association), l'organisme de normalisation qui supervise le développement de standards pour les langages de programmation, vise à doter JavaScript des valeurs de types « Record » et « Tuple ». Ces dernières introduiraient deux structures de données profondément immuables dans JavaScript : Record, une structure de type objet, et Tuple, une structure de type tableau. Une ébauche du projet a été soumise au Comité technique 39 de l'ECMA, lequel a en charge l'ECMAScript, la norme sous-jacente de JavaScript.

Selon la proposition, les « records » et « tuples » ne peuvent contenir que des primitives et d'autres « records » et « tuples ». Ils peuvent être considérés comme des « primitives composées ». Et comme ces types sont entièrement basés sur des primitives, ils sont profondément immuables. Selon la proposition, à l’instar des objets et des tableaux, les records et les tuples supportent des expressions idiomatiques fonctionnelles pour la construction, l'utilisation et la manipulation. Ils sont comparés par leur contenu plutôt que par leur identité.

Une optimisation dans le développement et l’ergonomie

Les moteurs JavaScript pourraient effectuer certaines optimisations sur la construction, la manipulation et la comparaison des records et des tuples, à la manière dont les chaînes de caractères sont implémentées. Les records et tuples sont destinés à être utilisés et compris par des supersets de typage externe comme TypeScript ou Flow.

Actuellement, les bibliothèques de type « userland » comme immutable.js exploitent des concepts similaires. Une précédente proposition de l'ECMA pour les structures de données immuables, déjà explorée, a été abandonnée en raison de la complexité et du manque de cas d’usage suffisants, comme l’indique la proposition. La nouvelle proposition introduit des changements importants et offre plusieurs avantages en termes de convivialité par rapport aux bibliothèques « userland » :

- Les records et tuples sont facilement analysables dans un débogueur.

- Aucun branchement supplémentaire n'est nécessaire pour écrire une bibliothèque générique qui consomme des objets immuables et JS.

- Les cas d’usages sont évités quand les développeurs doivent effectuer des conversions coûteuses entre des objets JS ordinaires et des structures immuables.

Les records et tuples interagissent bien avec les objets et les tableaux. Ils peuvent être lus de la même manière que les objets et les tableaux. La principale différence réside dans l'immuabilité profonde et la comparaison par valeur plutôt que par identité. De plus, la syntaxe proposée améliore considérablement l'ergonomie de l'utilisation de Record et Tuple dans le code. La version 2020 la plus récente de la spécification ECMAScript a été adoptée au mois de juin. Elle comporte des fonctionnalités utilisées dans des domaines comme le chargement de modules et inclut un nouveau type BigInt.