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

欢迎!请查看关于页面以获取更多关于这个工作方式的信息。

+1
Clojure

如果能使用瞬态列表(transients)使用merge功能将会更美好。

补丁
- clj-1458-7.patch

方法
在transients和reduce之后将c.c/merge迁移到core中。保留旧版本以供在新定义之前使用。让APersistentMap/conj与ATransientMap/cons了解IKVReduce。

附件中的补丁保留了merge的两种现有行为
- 元数据传播
- 合并的右侧可以是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中定义之前处理核心打印中的合并使用

0

评论者:gshayban

如果有人想承担这一责任,请继续。我在此方面遇到了一致的性能改善困难。显然,这需要新的基准测试。

0

评论者:alexmiller

是的,这需要一项基准测试,以展示明显的改进。此处的整个目标都是改进性能 - 如果我们无法证明它始终更快,那么甚至没有必要对其进行审查。

0

评论者:gshayban

此票据需要帮助。第0步是编写一个基准测试执行文件的 harness,该 harness 练习各种大小的映射和以下各种多态参数。

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

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