欢迎!请参阅关于页面以了解更多有关此功能的信息。
如果merge使用临时状态会更好。
补丁 - clj-1458-7.patch
方法 在核心中迁移c.c/merge到transients和reduce之后。将旧版本保留为merge1,用于在括号内的新版本之前的情况。让APersistentMap/conj和ATransientMap/cons感知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中使用合并的情况
如果有人想负责此事,请继续。我在这一方面遇到了使性能持续改进困难。显然,这需要进行新的基准测试。
是的,这需要一个基准测试来展示实际改进。这里的整体目标是提高性能 - 如果我们无法证明其速度始终保持一致,那么甚至根本无需审查它。
此工单需要帮助。第一步是编写一个基准测试适配器,它对各种大小和以下各种多态参数使用映射。
基准测试适配器之后,实现代码需要保留此行为- 如果第一个参数不是nil,其元数据将传播到结果。- 参数可以是Map.Entry、size=2的IPersistentVector和常规映射。- 当传递非映射作为第一个参数时,结果未定义。