2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Clojure 1.7 引入 Transducers,提高跨平台支持度

  • 2015-08-05
  • 本文字数:861 字

    阅读完需:约 3 分钟

Cognitect 的 Alex Miller:Transducers 和reader conditionals 是Clojure 1.7 最重要的两个特性。 Transducers 的目标是使不同的集合可组合算法转换, 而 reader conditionals 可以用来改善 Clojure 跨 JVM 和 JavaScript 平台的可移植性。

Transducers

Transducers 是一种减量函数转换器(reducing function transformers),获取一种减量函数并返回另一种的函数。减量函数仅仅是一种可以用来 reduce 的函数。Rich Hickey解释说: transducers 的主要优势是它们允许分离三个主要问题:

  • 减量函数是什么;
  • 应用在哪些集合中;
  • reduce 的输入。

在 Clojure 1.7 中,为了支持 Transducers,像 map、cat、filter 等大多数序列函数,在输入集合中都添加了一个新的参数。例如,

(def tr1 (map f))将会返回一个 map transducer。此外,Transducers 可以通过 Comp 函数组合:

(def xform (comp (filter odd?)(map inc)))来提供一个新的 Transducers。一旦你有了一个 Transducers,你可以把它应用在几个方面,例如矢量数据。

(Sequence Xform data)使用 Transducers 函数替代 sequence,你将会获得跟将 reduce 应用在 data 上同样的结果并获得组合函数原型。

上面示例的主要好处是:如果使用简单的组合功能,当它运行时,仅仅建立一个 lazy sequence 而不是三个。

Reader conditionals

Reader conditionals 是 Clojure 1.7 引入的一种新的格式,可以由 Clojure 和 ClojureScript 加载,并可以应用在.cljc 文件语境中。把多个 Clojure 平台使用一种代码库作为目标的方法,使得拥有库和应用程序成为可能,并且 Reader conditionals 提供的机制让处理平台特定代码时更加容易。

类似于 cond 形式,Reader conditionals 表达式允许为每一个平台指定应该使用的平台特定代码。例如下面的表达式:

[1 2 #?@(:clj [3 4] :cljs [5 6])]在 Clojure 上我们将会得到 [1 2 3 4],在 ClojureScript 上是 [1 2 5 6]。

Clojure 1.7 除了 Transducers 和 Reader conditionals,还包含了更多新的特性和增强功能。

查看英文原文 Clojure 1.7 Introduces Transducers, Improves Cross-platform Support

2015-08-05 07:082306
用户头像

发布了 92 篇内容, 共 31.2 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

SD-WAN组网:企业网络的首选

Ogcloud

网络 SD-WAN 组网 WAN

一文解释JS如何获取当前系统电量

伤感汤姆布利柏

Java 低代码 js

软件测试/测试开发|Ubuntu系统入门教程

霍格沃兹测试开发学社

软件测试/测试开发|一文教会你使用npm

霍格沃兹测试开发学社

与 Team Finance 整合,Casper Network 让 Token 的创建、发行更加高效

股市老人

解除Java反复编译的困扰方法,优化开发效率

互联网工科生

Java 编译

SD-WAN组网案例:异地组网跨境访问

Ogcloud

网络 SD-WAN 组网

如何正确使用缓存来提升系统性能

伤感汤姆布利柏

后端

利用GitLab快速搭建一个代码托管平台

想要飞的猪

Redis故障演练-主从切换

腾讯云混沌演练平台

混沌工程 Redis主从切换

一个有点东西的后台管理系统,基于vue3+vite。

23朵

Vue Element Plus

2023 Tech Sanya大赛半决赛暨中国企业战略投资峰会即将盛势来袭

创业邦

中小型企业怎么选SD-WAN?

Ogcloud

网络 SD-WAN 组网

淘宝获得商品详情 API:打开电商精细化运营的大门

技术冰糖葫芦

API

腾讯云向开放原子开源基金会捐赠OpenTenBase,推动关键数字基础设施加速突破

极客天地

Gemini 自曝中文用百度文心一言训练丨 RTE 开发者日报 Vol.109

声网

什么是动态ip代理,动态ip代理有哪些特点?

巨量HTTP

代理IP 动态IP http代理

软件测试/测试开发|Ubuntu虚拟机打不开Ubuntu software

霍格沃兹测试开发学社

给网站引入各大搜索引擎的关键字提示,白给的接口薅他羊毛。

23朵

js 搜索

持续集成平台搭建(jenkins)

想要飞的猪

服务宕机灾难预防手段:混沌工程

腾讯云混沌演练平台

混沌工程 服务宕机

你真的会写 Prompt ? 剖析 RAG 应用中的指代消解

Zilliz

Zilliz AIGC ChatGPT Prompt rag

我的2023年终总结

南哥

Clojure 1.7引入Transducers,提高跨平台支持度_后端_Sergio De Simone_InfoQ精选文章