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

欢迎!请参阅关于页面以了解更多有关此功能的信息。

+1
Clojure

如果merge使用临时状态会更好。

补丁
- clj-1458-7.patch

方法
在核心中迁移c.c/merge到transients和reduce之后。将旧版本保留为merge1,用于在括号内的新版本之前的情况。让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_print中使用合并的情况

0

评论者:gshayban

如果有人想负责此事,请继续。我在这一方面遇到了使性能持续改进困难。显然,这需要进行新的基准测试。

0

评论者:alexmiller

是的,这需要一个基准测试来展示实际改进。这里的整体目标是提高性能 - 如果我们无法证明其速度始终保持一致,那么甚至根本无需审查它。

0

评论者:gshayban

此工单需要帮助。第一步是编写一个基准测试适配器,它对各种大小和以下各种多态参数使用映射。

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

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