欢迎!请参阅关于页面,了解更多关于这个功能的信息。
如果merge使用transients会更好。
补丁 - clj-1458-7.patch
方法 在核心库中迁移c.c/merge到transients和reduce之后。保留旧的版本作为merge1,用于在新定义之前的情况。使APersistentMap/conj和ATransitionMap/conn了解IKVReduce。
附带的补丁保留了merge的两个现有行为- 元数据传播- 合并的右侧可以是Map.Entry、大小为2的IPersistentVector和普通映射。
由
评论由:michaelblume做出
这是一个极其简单的合并测试,但我们需要更多的东西,这是开始
评论由:alexmiller做出
clj-1458-4.patch刷新并应用于master,没有更改。
评论由:gshayban做出
我想重新评估这个工单的范围。我们可以只处理'merge',并将'merge-with'推迟吗?这无疑是一个更常见的功能。我已经附上了一个新的简化补丁。
CLJ-1458-6.patch 是另一种更简洁的方案
请更新任务卡的方案部分,讨论 APersistentMap.cons / ASSOC 的更改。另外,请为一种或多种常见案例添加性能测试的前/后对比?
更新补丁以处理 core_print 中的 merge 使用,在 core 中还没有定义之前
如果有人愿意承担这项工作,请继续。我在这一方面遇到了统一性能改进的困难。显然,这需要新的基准测试。
是的,这需要一个基准测试来展示可证明的改进。这里的整体目标是提高性能 - 如果我们不能证明它持续更快,那么审查它都没有意义。
此任务卡需要帮助。第 0 步是编写一个基准测试驱动程序,该程序锻炼各种大小的映射以及以下各种多态参数。
在基准测试驱动程序之后,实现代码需要保留这种行为- 如果第一个参数不是 nil,则其元数据传播到结果中。- 参数可以是 Map.Entry、size=2 的 IPersistentVector 以及常规映射。- 当传递非映射作为第一个参数时,结果未定义。