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

欢迎!请查阅关于页面,以了解更多有关此内容的信息。

+1投票
Clojure

如果merge使用临时映射会更好。

补丁
- clj-1458-7.patch

方法
在 core 中迁移 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 中定义之前 merge 在 core_print 中的使用

0投票

评论由:gshayban 制作

如果有任何人想负责这件事,请继续。我在这个问题上遇到了连续提高性能的困难。显然,这需要对它进行新的基准测试。

0投票

评论由:alexmiller 制作

是的,这需要一个展示明显改进的基准测试。这里的整个目标是提高性能 - 如果我们不能证明它始终更快的,那么审查它都没有意义。

0投票

评论由:gshayban 制作

这个问题单需要帮助。第一步是编写一个基准测试 harness,该 harness 练习各种大小的映射以及下面的各种多态参数。

基准测试 harness 之后,实现代码需要保留这种行为
- 如果第一个参数不是 nil,其元数据传播到结果。
- 参数可以是 Map.Entry、大小为 2 的 IPersistentVector 以及普通映射。
- 当传递非映射作为第一个参数时,结果是未定义的。

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