写点什么

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

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

关注

评论

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

能源势动:电力行业的碳中和该如何实现?

脑极体

服务线上治理

阿泽🧸

微服务 7月月更

算法入门很简单:链表题套路及精选题目

宇宙之一粟

链表 7月月更

图解网络:什么是网关负载均衡协议GLBP?

wljslmz

网络协议 7月月更 GLBP 图解网络 网关负载均衡协议

广电五舟与华为签署合作协议,共同推进昇腾AI产业持续发展

极客天地

玩转gRPC—深入概念与原理

闫同学

gRPC 网络协议 后端开发

TLA+ 入门教程(1):形式化方法简介

多颗糖

分布式系统 TLA+

leetcode 72. Edit Distance 编辑距离(中等)

okokabcd

LeetCode 动态规划 算法与数据结构

【愚公系列】2022年7月 Go教学课程 003-IDE的安装和基本使用

愚公搬代码

7月月更

蓝队攻防演练中的三段作战

穿过生命散发芬芳

攻防演练 7月月更

可视化任务编排&拖拉拽 | Scaleph 基于 Apache SeaTunnel的数据集成

Apache SeaTunnel

数据同步 数据集成 可视化开发 数据集成平台 拖拉拽

质量体系建设之路的分分合合

声网

创业讲堂 生态专栏

可观测|时序数据降采样在Prometheus实践复盘

阿里巴巴云原生

阿里云 云原生 Prometheus 可观测

认识ThreadPoolExecutor

zarmnosaj

7月月更

C语言中sizeof操作符的坑

Albert Edison

c++ C语言 7月月更 sizeof

湘江鲲鹏加入昇腾万里伙伴计划,与华为续写合作新篇章

极客天地

2022-Java后端工程师面试指南-(Java基础篇)

自然

Java’ 7月月更

牛客java选择题每日打卡Day6

京与旧铺

7月月更

后CentOS时代的操作系统漫谈

冯骐

centos 开源 openEuler 国产化 Anolis

HUAWEI nova 10系列发布 华为应用市场筑牢应用安全防火墙

最新动态

关于栈区、堆区、全局区、文字常量区、程序代码区

NewBoy

前端 移动端 iOS 知识体系 7月月更

繁华落尽、物是人非:个人站长该何去何从

石头IT视角

HPDC智能基座人才发展峰会随笔

乌龟哥哥

7月月更

智洋创新与华为签署合作协议,共同推进昇腾AI产业持续发展

极客天地

赋能数字经济 福昕软件出席金砖国家可持续发展高层论坛

联营汇聚

使用 BlocConsumer 同时构建响应式组件和监听状态

岛上码农

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

Vuex(三)

小恺

7月日更

浅聊一下中间件

为自己带盐

中间件 7月月更 dotnetcore

跨域请求

Jason199

跨域 7月月更

【Docker 那些事儿】容器为什么傲娇?全靠Hub撑腰

Albert Edison

7月月更

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