14 votes

Pourquoi les WeakMap de ES6 ne seront pas énumérables ?

Avant de me remettre au JavaScript (et à ce qui s'y rapporte), j'ai fait beaucoup d'ActionScript 3 et il y avait un objet Dictionary qui avait des clés faibles tout comme le WeakMap à venir ; mais la version AS3 était encore énumérable comme un objet générique ordinaire alors que le WeakMap n'en a pas. .keys() o .values() .

La version AS3 nous a permis de créer des constructions vraiment intéressantes et utiles, mais je pense que la version JS est quelque peu limitée. Comment cela se fait-il ?

Si la VM Flash peut le faire, qu'est-ce qui empêche les navigateurs de le faire ? J'ai lu que ce serait "non déterministe" mais c'est un peu le but, non ?

3voto

Bartvds Points 406

J'ai enfin trouvé la vraie réponse : http://tc39wiki.calculist.org/es6/weak-map/

L'une des principales propriétés des cartes faibles est l'impossibilité d'énumérer leurs clés. Cela est nécessaire pour empêcher les attaquants d'observer le comportement interne d'autres systèmes dans l'environnement qui partagent des objets faiblement mappés. Si le nombre ou les noms des éléments de la collection peuvent être découverts à partir de l'API, même si les valeurs ne le sont pas, les instances WeakMap peuvent créer un canal latéral là où il n'y en avait pas auparavant.

-1voto

user3550896 Points 1

C'est un compromis. Si vous introduisez des dictionnaires objet <-> objet qui supportent l'énumérabilité, vous avez deux options par rapport au garbage collection :

  1. Considérez l'entrée de la clé comme une référence forte qui empêche la récupération de l'objet utilisé comme clé.

  2. Faites-en une référence faible qui permet à ses clés d'être collectées à la poubelle dès que toutes les autres références ont disparu.

Si vous faites le numéro 1, il vous sera extrêmement facile de vous tirer une balle dans le pied en faisant fuir de gros objets en mémoire partout. D'autre part, si vous choisissez l'option 2, votre dictionnaire de clés devient dépendant de l'état du garbage collection dans l'application, ce qui conduira inévitablement à des bugs impossibles à détecter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X