欢迎!请查阅关于页面了解更多关于此的工作方式信息。
如果能使用transients将会很棒。
补丁 - clj-1458-7.patch
方法 将c.c/merge移至核心,在transients和reduce之后。保留旧版本作为merge1,用于在先于新定义的场合。使APersistentMap/conj和ATransientMap/cons了解IKVReduce。
附加的补丁保留了合并的两种现有行为- 元数据传播- 合并的右侧可以是Map.Entry,大小为2的IPersistentVector以及常规映射。
由以下人员审核
评论者:michaelblume
一个极其简单的合并测试,我们需要更多的,但这是开始。
评论者:alexmiller
clj-1458-4.patch已更新以应用至master,无改动。
评论者:gshayban
我想重新评估这个票据的范围。我们能否只解决'merge'并推迟'merge-with',因为它是使用最频繁的函数之一?我已经附上了一个新的简化补丁。
CLJ-1458-6.patch 是另一种更为清爽的方法
请更新工单方法部分以讨论 APersistentMap.cons / ASSOC 的变更。另外,您能否为一种或多种常见案例添加前后性能测试?
已更新补丁以处理在 core 定义前在 core_print 中使用 merge 的方法
如果有人愿意负责这项工作,请去做吧。我在此问题上遇到了难以保持性能改善的问题。显然,这需要新的基准测试。
是的,需要有一个基准测试来展示可证明的改进。这里的整体目标就是提升性能——如果我们无法证明它始终更快,那么审查它也没有意义。
此工单需要帮助。第 0 步是编写一个基准测试程序,该程序对各种大小和以下各种多态参数的映射进行测试。
在基准测试程序之后,实现代码需要保留此行为- 如果第一个参数不是 nil,则其元数据将传播到结果中。- 参数可以是 Map.Entry,大小为 2 的 IPersistentVector 和常规映射。- 当传递非映射作为第一个参数时,结果将未定义。