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

欢迎!请参阅关于页面了解更多关于这个工作的信息。

+8
Transducers
编辑

Rich在Clojure历史中说

我认为变压器是一个基本的原始类型,可以解耦关键逻辑与列表/序列的解析和构建,如果我要重新做Clojure,我会把它们放在底层。

这让我很感兴趣,我非常好奇以变压器为首的Clojure会是什么样子?我并不期望Rich在这里回答(我应该在他的HOPL演讲中提出这个问题...)但是或许那些更接近核心的人可能会有一些洞见。

我很想看到一个Clojure,其中变压器是默认且最简单的方式解决问题,所有教程、gists和示例代码都使用变压器,而上下文(向量、lazy、first等)只在选择边缘时使用。目前编写lazy代码比编写变压器代码更简单(但可能不是更简单)。

我想知道以变压器为首的Clojure是否会解决上面的问题,或者是主要针对clojure.core背后的管道,类似于现在的。

就我个人情况而言,我必须积极对抗懒惰 - 我认为我们的代码库中没有一处是使用懒惰有益的,但鉴于这仍然是编写Clojure最简单的方式,我必须额外努力以避免意外进入lazy世界,并在他人的PR中找到这些模式。

我很想有一个clojure.core2,其中变压器是默认的,编写变压器的代码更容易,可能还需要更少的打字/仪式,如comp和into []等。进入lazy世界始终是一个同意的事情,就像clojure的不纯部分 - STM、transients等。我不完全确定这样的核心库会是什么样子,但这是我愿意尝试的事情。

此外,还有一些专为变压器进行的优化,如https://github.com/cgrand/xforms#on-key-value-pairs可以考虑。也许还可以以某种方式使用map的多个参数作为变换器的一部分。

有可能会在函数中内置对 xform 参数的支持,这些函数目前接受一个集合进行预处理,如 run! 和 str/join -如果您积极地使用 transducer,您会开始注意到一些事情,比如“嘿,我甚至不需要一个集合”并开始寻找不同的 transducing 背景 - 因此,您会从((count (into [] xform input)))转变到((x/count xform input))

1 答案

0
by
by
谢谢,这确实是一个有趣的项目。它似乎仍然模仿 Clojure 的默认懒惰 API: https://github.com/pixie-lang/pixie/blob/master/pixie/stdlib.pxi#L152
...