【ArchSummit架构师峰会】基于大模型的基础框架、中台、应用层等专题全覆盖 >>> 了解详情
写点什么

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

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

关注

评论

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

如何使用Go语言实现面向对象编程中的封装、继承和多态

Jack

mac上哪款系统仪表板好用?实用软件推荐~

真大的脸盆

Mac Mac 软件 系统监测 仪表盘工具

MySQL好玩新特性:离线模式

GreatSQL

MySQL greatsql greatsql社区

Java Web实战 | JDBC案例:实现图书管理

TiAmo

JDBC DAO JavaBean

GreatSQL社区月报 | 2023.04

GreatSQL

greatsql社区

开发中关于HTTPS不得不规避的2个大坑

北桥苏

https TCP/IP ssl

如何解决由于TLS版本不兼容导致的问题

JefferLiu

Java TLS

软件测试 | admin后台管理

测吧(北京)科技有限公司

测试

快来答题!看看你是开源几级选手?

开放原子开源基金会

极氪汽车引入瓴羊Quick BI,数据可视化助力企业数字转型

小偏执o

“数字裂变”宇宙,华为云与和伙伴组成“银河护卫队”

脑极体

华为云

从 yield 开始入门协程

乌龟哥哥

三周年连更

阿里云李钟:弹性计算控制系统团队的提效之路

云布道师

阿里云 弹性计算

GPT时代,我们应该怎么办?| 社区征文

AIWeker

AI GPT 三周年征文

Java 是如何毁掉你的编程思维的?

Java你猿哥

Java 程序员 ssm

Java 8 之后的新特性都是鸡肋吗?

Java你猿哥

Java ssm API Java 8 java 8 的新特性

《 Istio 权威指南 》新著重磅发行!华为云云原生团队匠心力作

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

【开发点滴】在vscode的python调试中,如何让调试程序以sudo方式运行?

无人之路

Python vscode ChatGPT

Java面试通关:阿里内部实战模拟面试精讲题库,竟被上传GitHub!

Java你猿哥

Java 数据库 微服务 Spring Boot java面试

穿越数据智能“海峡”,企业更需要什么样的数智底座?

用友BIP

数据治理三大模式详解,治理新范式释放数据潜能

袋鼠云数栈

数据治理

瓴羊Quick BI、帆软横向对比,国内商业BI工具崛起

巷子

智能化生产应用搭建的实战案例

华为云开发者联盟

后端 物联网 华为云 华为云开发者联盟 企业号 5 月 PK 榜

硬核!阿里最新出品架构核心场景实战手册,解决99%的架构问题

Java你猿哥

软件测试是青春饭吗?

测吧(北京)科技有限公司

测试

构建自己的思维逻辑体系

老张

逻辑思维 如何解决问题

智慧园区移动应用发展面临瓶颈,如何解决?

没有用户名丶

详解集群级备份恢复:物理细粒度备份恢复

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

京东短网址高可用提升最佳实践 | 京东云技术团队

京东科技开发者

最佳实践 高可用设计 企业号 5 月 PK 榜 短网址

一种KV存储的GC优化实践

vivo互联网技术

KV存储 GC设计

【5.05-5.12】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

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