javascript weakmaps 应该是可迭代的 — wingolog

主要观点:JavaScript 的 WeakMap 不应不可迭代,应予以修复。
关键信息:

  • WeakMap 用键关联值,只要键在程序中可访问。早期曾有将其作为对象属性实现的想法,这样关联就无法从映射本身枚举,所以 ES6 规定 WeakMap 不可迭代。
  • 随着时间推移,分布式 WeakMap 实现策略未成功,大家都将其作为独立对象实现,且有了 WeakRef 和 FinalizationRegistry,可构建可迭代的 WeakMap。
  • 现有的可迭代 WeakMap 不如浏览器提供的好,存在诸多问题,如实现复杂、需通过网络传输、占用更多内存、单线程高延迟等,而 JS 标准中其他集合都已标准化可迭代性,WeakMap 也应如此。
    重要细节:
  • 早期实现想法下,添加键值关联到映射会设置 key[M] = value,GC 可处理死映射及相关联对象。
  • 提到自己曾参与 ES6 相关工作但目前不做 JS 语言工作。
  • 今早写了另一个可迭代的 WeakSet,存在与 WeakMap 相同问题。
  • 感谢 Philip Chimento 提供时间线笔记和 Joyee Cheung 提供可迭代 WeakMap 实现相关笔记。
阅读 34
0 条评论