请在2024 Clojure调查问卷!中分享您的想法。

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

+1投票
Clojure

如果能使用短暂状态的话,使用merge会更好。

补丁
- clj-1458-7.patch

方法
在核心中迁移c.c/merge,在短暂状态和reduce之后。保留旧版本作为merge1,用于在新的定义之前使用的情况。让APersistentMap/conj和ATransientMap/cons了解IKVReduce。

附加的补丁保留了合并的两种现有行为
- 元数据传播
- 合并的右侧可以是Map.Entry、尺寸为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中使用的合并

0投票

评论者:gshayban

如果有人想接管它,请继续。我在此问题上遇到了性能改进不令人满意的问题。显然,这需要新的基准测试。

0投票

评论者:alexmiller

是的,这需要 benchmark 来证明改进的有效性。这里的目标是改进性能 - 如果我们不能证明它可以持续更快,那么即使是审查也没有意义。

0投票

评论者:gshayban

此票据需要帮助。步骤0是编写一个基准测试框架,该框架可以针对不同大小和以下多态参数的映射进行测试。

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

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