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

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

+1
Clojure

如果merge使用transients会更好。

补丁
- clj-1458-7.patch

方法
在transients和reduce之后迁移c.c/merge到核心。将旧版本作为merge1保留,以便在新定义的前面使用。让APersistentMap/conj和ATransientMap/cons了解IKVReduce。

附带的补丁保留了merge的两个现有行为
- 元数据传播
- 合并右侧可以是Map.Entry、大小为2的IPersistentVector和普通映射。

通过

25 答案

0

评论者:michaelblume

这是一个非常简单的merge测试,但我们需要的不仅仅是这个,这是开始的地方

0

评论者:alexmiller

clj-1458-4.patch已刷新以应用于master,没有变化。

0

评论者:gshayban

我想重新评估这个ticket的范围。我们能否只处理'merge'并推迟'merge-with'?这是一个更常见的功能。我附了一个新的简化补丁。

0

评论者:gshayban

CLJ-1458-6.patch是另一种更简洁的方法

0

评论者:alexmiller

请更新票据方法部分,讨论APersistentMap.cons / ASSOC的变化。另外,您能添加一个关于一个或多个常见情况的“前后”性能测试吗?

0

评论者:michaelblume

更新补丁以处理在core中定义前在core_print中使用merge的情况

0

评论者:gshayban

如果有人愿意负责这个问题,请继续。我在这个问题上遇到了在性能提升上保持一致性的困难。显然,这需要一个全新的基准测试。

0

评论者:alexmiller

是的,这需要一个显示性改进的基准测试。这里整个的目标是提升性能 —— 如果我们不能证明它始终更快,那么甚至没有必要审查它。

0

评论者:gshayban

这个任务需要帮助。第0步是编写一个基准测试驱动程序,该程序测试各种大小和以下多态参数的映射。

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

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