2024年Clojure问卷调查中分享您的想法!

欢迎!请查阅关于页面了解更多关于此的工作方式信息。

+1 投票
Clojure

如果能使用transients将会很棒。

补丁
- clj-1458-7.patch

方法
将c.c/merge移至核心,在transients和reduce之后。保留旧版本作为merge1,用于在先于新定义的场合。使APersistentMap/conj和ATransientMap/cons了解IKVReduce。

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

由以下人员审核

25 个回答

0 投票

评论者:

一个极其简单的合并测试,我们需要更多的,但这是开始。

0 投票

评论者:

clj-1458-4.patch已更新以应用至master,无改动。

0 投票

评论者:

我想重新评估这个票据的范围。我们能否只解决'merge'并推迟'merge-with',因为它是使用最频繁的函数之一?我已经附上了一个新的简化补丁。

0 投票

评论者:

CLJ-1458-6.patch 是另一种更为清爽的方法

0 投票

评论者:

请更新工单方法部分以讨论 APersistentMap.cons / ASSOC 的变更。另外,您能否为一种或多种常见案例添加前后性能测试?

0 投票

评论者:

已更新补丁以处理在 core 定义前在 core_print 中使用 merge 的方法

0 投票

评论者:

如果有人愿意负责这项工作,请去做吧。我在此问题上遇到了难以保持性能改善的问题。显然,这需要新的基准测试。

0 投票

评论者:

是的,需要有一个基准测试来展示可证明的改进。这里的整体目标就是提升性能——如果我们无法证明它始终更快,那么审查它也没有意义。

0 投票

评论者:

此工单需要帮助。第 0 步是编写一个基准测试程序,该程序对各种大小和以下各种多态参数的映射进行测试。

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

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