请在2024 年 Clojure 状态调查中分享您的想法!

欢迎!请查看关于页面,了解更多这个平台的工作原理。

+1
Clojure

如果合并使用transients会更好。

补丁
- clj-1458-7.patch

方法
在transients和reduce之后,将c.c/merge迁移到核心代码库。将旧版本作为merge1保留,以便在使用新定义之前的案例中使用。让APersistentMap/conj和ATransientMap/cons知道IKVReduce。

附带的补丁保留了merge的两个现有行为
- 元数据传播
- 合并的右侧可以是Map.Entry,size=2的IPersistentVector,以及常规映射。

由谁审核

25 个答案

0

评论者:michaelblume

这是一个非常简单的合并测试,我们需要的不仅仅是这个,但这是一个开始

0

评论者:alexmiller

clj-1458-4.patch 已更新,以适用于master分支,没有更改。

0

评论者:gshayban

我想重新评估这张票的范围。我们能否只解决'merge',并推迟'merge-with'?这是最常用的功能。我已附上一个新的简化补丁。

0

评论者:gshayban

CLJ-1458-6.patch是另一种更简洁的方法

0

评论者:alexmiller

请更新工单方法部分,讨论APersistentMap.cons / ASSOC的变化。此外,请对一个或多个常见情况进行前后性能测试?

0

评论者:michaelblume

更新补丁以处理在core定义之前在core_print中使用merge

0

评论者:gshayban

如果有人想要负责这项工作,请继续进行。我在此方面遇到了困难,无法取得一致的性能改进。显然,这需要新的基准测试。

0

评论者:alexmiller

是的,这需要一个显示改进基线性能的基线。这里的整个目标都是提高性能-如果我们无法证明其一致性更快的速度,则根本没有必要对其进行审查。

0

评论者:gshayban

此工单需要帮助。步骤0是编写一个基准测试框架,该框架执行各种大小和下列各种多态参数的映射。

在基准测试框架之后,实现代码需要保留此行为。
- 如果第一个参数不是nil,则其元数据传播到结果。
- 参数可以是Map.Entry、size=2的IPersistentVector和常规映射。
- 当将非映射作为第一个参数传入时,结果为未定义。

0
参考: https://clojure.atlassian.net/browse/CLJ-1458 (由 alex+import 报告)
...