写点什么

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

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

关注

评论

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

星环 KunDB 2.2 发布,为高并发事务与查询混合的业务系统提供一个新选择

星环科技

数据库

Python 中 base64 编码与解码

AlwaysBeta

Python 程序员 编程语言 base64

用好这28个工具,开发效率爆涨|云效工程师指北

阿里云云效

云计算 阿里云 云原生 研发工具 研发

一文带你看懂HarmonyOS应用上架

HarmonyOS开发者

HarmonyOS 应用开发

易观分析对《关于银行业保险业数字化转型的指导意见》的解读

易观分析

银行 数字化

C++学习网站

C语言与CPP编程

c++

跨团队协作:提高团队生产力的 7 种策略

小炮

团队管理 知识管理 团队协作 办公效率

新思科技最新报告显示97%的应用存在漏洞

InfoQ_434670063458

新思科技 应用安全

徐徐春风迎3月,月度更文活动准点发车啦!

InfoQ写作社区官方

3月程序媛福利 3月月更 热门活动

Android包体积优化上篇- 资源混淆优化

百度Geek说

百度 前端 后端 优化 包体积

组件简介 - 大屏云极简使用手册

shulinwu

数据可视化 大屏可视化 智慧大屏可视化 大屏

BFS/DFS/DP 算法案例 LeetCode题目:传递信息

OpenHacker

LeetCode 动态规划 深度优先搜索 算法解析 广度优先搜素

Nebula Graph 的 KV 存储分离原理和性能测评

NebulaGraph

图数据库 分布式图数据库

数据系统提供商极道科技加入龙蜥社区

OpenAnolis小助手

Linux 开源 数据系统

低代码平台设计探索,如何更好赋能开发者

雯雯写代码

低代码 开发平台 开发者,

教你如何使用flask实现ajax数据入库

华为云开发者联盟

Python 数据库 flask 文件上传 ajax数据

阿里云智能编码插件,更Cosy的开发体验

阿里云云效

Java 阿里云 程序员 开发 研发

融云 IM 在 Electron 平台上的设计实践

融云 RongCloud

赋能金融领域,国密改造让安全合规更加牢固

电子信息发烧客

安全

活动预告 | DataOps + MLOps Meetup

第四范式开发者社区

人工智能 机器学习 开源 DevOps MLOps

星环科技ArgoDB 3.2正式发布,全面升级易用性、性能和安全

星环科技

数据库

“碳中和”背后的创新科技!

青云技术社区

云计算 碳中和

布局说明 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

【案例】基于星环科技数据云平台TDC为富国基金建设万能的数据湖

星环科技

数据库

实践GoF的23种设计模式:SOLID原则(上)

华为云开发者联盟

设计模式 GoF SOLID SOLID原则 分布式应用系统

数据可视化大屏 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

梦想橡皮擦

Python 3月月更

虎符研究院关于 Manta Network平行链解决方案的分享

区块链前沿News

虎符交易所 币圈后浪

应用数仓ODBC前,这些问题你需要先了解一下

华为云开发者联盟

数据库 GaussDB(DWS) 驱动 ODBC 驱动管理器

Web 键盘输入法应用开发指南 (2) —— 键盘事件

天择

JavaScript 键盘 输入法 3月月更

ironSource 新功能发布,开发者可在同一会话中实时调整广告策略

极客天地

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