2024Clojure状态调查!中分享您的想法。

欢迎!有关此功能的更多信息,请参阅关于页面。

0投票
集合

展开小映射增强的占位符(CLJ-1517中向量的配套)。

3 答案

0投票

评论者:jafingerhut

是否期望这些的性能比PersistentArrayMap更好?

0投票

评论者:ztellman

是的,在某些情况下,性能显著提高,原因如下(按重要性排序):

  • 位置构造函数,不需要数组实例化和/或填充
  • 使用哈希比较来短路等价性检查
  • 任何操作都不需要迭代

https://github.com/ztellman/cambrian-collections/blob/master/test/cambrian_collections/map_test.clj#L64-L148中有一系列基准,比较操作与带关键字(这些关键字不受益于哈希比较)和符号(这些关键字受益于)的映射。7个条目的映射造成展开映射溢出,所以它们只是为了测试溢出机制而存在。

我已经在我的笔记本电脑上运行了基准套件,结果可在https://gist.github.com/ztellman/961001e1a77e4f76ee1d找到。一些值得注意的结果

其余基准测试因展开操作而略快,但大部分性能提升来自于上述行为。在一个不太合成的基准测试中,我发现Cheshire JSON解码(占33%的JSON词法分析和66%的数据结构构建)的速度提高了大约30-40%。

0投票
参考资料: https://clojure.atlassian.net/browse/CLJ-1610(由alexmiller报告)
...