欢迎!有关如何工作的更多信息,请参阅关于页面。
如果merge使用transients会更好。
补丁 - clj-1458-7.patch
方法 在transients和reduce之后迁移c.c/merge到核心。将旧版本作为merge1保留,以便在新定义的前面使用。让APersistentMap/conj和ATransientMap/cons了解IKVReduce。
附带的补丁保留了merge的两个现有行为- 元数据传播- 合并右侧可以是Map.Entry、大小为2的IPersistentVector和普通映射。
通过
评论者:michaelblume
这是一个非常简单的merge测试,但我们需要的不仅仅是这个,这是开始的地方
评论者:alexmiller
clj-1458-4.patch已刷新以应用于master,没有变化。
评论者:gshayban
我想重新评估这个ticket的范围。我们能否只处理'merge'并推迟'merge-with'?这是一个更常见的功能。我附了一个新的简化补丁。
CLJ-1458-6.patch是另一种更简洁的方法
请更新票据方法部分,讨论APersistentMap.cons / ASSOC的变化。另外,您能添加一个关于一个或多个常见情况的“前后”性能测试吗?
更新补丁以处理在core中定义前在core_print中使用merge的情况
如果有人愿意负责这个问题,请继续。我在这个问题上遇到了在性能提升上保持一致性的困难。显然,这需要一个全新的基准测试。
是的,这需要一个显示性改进的基准测试。这里整个的目标是提升性能 —— 如果我们不能证明它始终更快,那么甚至没有必要审查它。
这个任务需要帮助。第0步是编写一个基准测试驱动程序,该程序测试各种大小和以下多态参数的映射。
在基准测试驱动程序之后,实现代码需要保留这个行为- 如果第一个参数不是nil,其元数据将传播到结果。- 参数可以是Map.Entry、大小为2的IPersistentVector和常规映射。- 当第一个参数传递一个非映射时,结果未定义。