2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取更多有关如何操作的信息。

+1投票
Clojure

如果merge使用transients将更好。

补丁
- clj-1458-7.patch

方法
在transients、reduce之后的core中迁移c.c/merge。将旧版本作为merge1保留,用于支持新定义之前的情况。使APersistentMap/conj和ATransientMap/cons意识到IKVReduce。

附带的补丁保留了merge的两个现有行为
- 元数据传播
- 合并的右侧可以是Map.Entry、大小为2的IPersistentVector和普通映射。

由以下人员审查

25 个答案

0 投票

评论者:michaelblume

这是一个非常简单的merge测试,我们需要更多,但这是个开始。

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 之前定义 merge 时的使用

0 投票

评论者:gshayban

如果有人想负责这个项目,请继续。我在此项目上实现一致的性能提升方面遇到了困难。显然,这需要新的基准测试。

0 投票

评论者:alexmiller

是的,这需要一项基准测试,以证明可实现的改进。这里的整个目标都是改进性能 - 如果我们无法证明它是持续更快的,那么即使审查也无意义。

0 投票

评论者:gshayban

这个工单需要帮助。第一步是编写一个基准测试 harness,该 harness 锻炼各种大小的映射和以下各种多态参数。

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

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