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

这是一个非常简单的合并测试,我们需要的不仅仅是这个,但这是一个开始。

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_before 定义 merge 之前在 core 中的使用

0

评论者:gshayban

如果有人想负责这项工作,请继续。我在这个项目中遇到了性能提升不稳定的问题。显然这需要新鲜的基准测试。

0

评论者:alexmiller

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

0

评论者:gshayban

这个工单需要帮助。步骤0是编写一个基准测试套件,该套件练习各种大小和下列多态参数的映射。

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

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