欢迎!请参阅关于页面了解更多有关如何操作的信息。
如果能使用短暂状态的话,使用merge会更好。
补丁 - clj-1458-7.patch
方法 在核心中迁移c.c/merge,在短暂状态和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中使用的合并
如果有人想接管它,请继续。我在此问题上遇到了性能改进不令人满意的问题。显然,这需要新的基准测试。
是的,这需要 benchmark 来证明改进的有效性。这里的目标是改进性能 - 如果我们不能证明它可以持续更快,那么即使是审查也没有意义。
此票据需要帮助。步骤0是编写一个基准测试框架,该框架可以针对不同大小和以下多态参数的映射进行测试。
在基准测试框架之后,实现代码需要保留此行为- 如果第一个参数不是nil,则其元数据将传播到结果中。- 参数可以是一个Map.Entry,一个size=2的IPersistentVector,以及常规映射。- 当将非映射作为第一个参数传递时,结果将是未定义的。