在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:082363
用户头像

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

关注

评论

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

CompusAss校园社团小程序解决方案

CC同学

高精度轻量级目标检测产业应用,实现多类通信塔识别

百度大脑

「架构实战营」模块四作业 考试试卷存储方案

hxb

「架构实战营」

服务器被入侵了?反手溯源出入侵者画像【网络安全】

H

黑客 网络安全

Amazon Graviton2上数据压缩算法性能比较

亚马逊云科技 (Amazon Web Services)

数据 应用性能

如何避免在面试中看走眼

Hockor

个人成长 面试经验

免费硬件、专属导师、豪华大礼|AI达人创造营第二期项目征集启动啦!

百度大脑

appsmith 怎么用?评价如何

蒋川

appsmith

AI人脸识别测温一体机设计

DS小龙哥

3月月更

《大饼卷一切》爆笑相声剧 今晚开票!

InfoQ 天津

2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA

冴羽

JavaScript Vue 前端 vuepress PWA

java高级用法之:无所不能的java,本地方法调用实况

程序那些事

Java Netty 程序那些事 3月月更

Hoo虎符研究院|区块链简报20220307期

区块链前沿News

Hoo 虎符交易所 虎符研究院

selenium操作元素遇到的异常

红毛丹

selenium

12 款最棒 Vue 开源 UI 库测评 - 特别针对国内使用场景推荐

蒋川

Vue vue admin

大画 Spark :: 网络(5)-Spark中的server端和client端

dclar

大数据 hadoop spark Spark 源码 大数据开发

小程序的第六年,我们还能怎么玩?

知晓云

小程序 微信 小程序生态 小程序运营

python 编辑器提示 do not use bare except

AlwaysBeta

Python vscode 编辑器 pycharm Python PEP

微服务工程中,基础组件应用

架构 分布式 微服务

关于中国芯片,这些话如鲠在喉

脑极体

如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

蒋川

Vue PDF pdf阅读器

React Draggable 实现拖拽 - 最详细中文教程 - 卡拉云

蒋川

React

Web 键盘输入法应用开发指南 (6) —— 开发实战(一)

天择

JavaScript 键盘 实战 输入法 3月月更

安全代码审计-PHP

网络安全学海

网络安全 信息安全 渗透测试 漏洞 代码审计

社区人物志|缪翎:见证开源世界的女性力量

ApacheDoris

大数据 开源 数据分析 OLAP apache doris

springsecurity默认用户生成

急需上岸的小谢

Flutter 容器盒子布局模型

岛上码农

flutter ios 安卓 移动端开发 3月月更

业内首家!百度智能云智慧金融业务通过ISO37301合规管理体系认证

百度大脑

全网渗透率达80%!“耳朵经济”将成为当下市场的流行趋势

易观分析

耳朵经济 在线音频

Tech Talk 活动预告 | 为什么说 Serverless 是应用开发的未来?

亚马逊云科技 (Amazon Web Services)

Serverless

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