亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

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

关注

评论

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

Nacos 多语言体系再添新员:首个 Rust 语言版本正式发布!

阿里巴巴云原生

阿里云 云原生 nacos

python的基本操作

乔乔

11月月更

BI智慧工程行业应用方案丨文末获取三重资源包

葡萄城技术团队

头一次见!阿里牛人上传的600页JVM垃圾优化笔记飙升GitHub榜首

程序知音

Java JVM 性能调优 java架构 后端技术

动态路由协议一

初学者

协议 路由 11月月更

Hexo框架+Github 搭建免费静态博客教程(一)

程序员余白

Hexo Github' 博客搭建 11月月更

华为首发微存储新品,破解互联网海量数据高效存储难题

科技热闻

14位资深大咖,11 场技术演讲!龙蜥云原生专场精彩回顾来了

OpenAnolis小助手

开源 技术分享 龙蜥社区 2022云栖大会 云原生专场

“基础-中级-高级”Java后端25个技术栈面试题集结

程序知音

Java java面试 后端技术 Java面试八股文

动态路由协议

初学者

协议 路由 11月月更

深圳区块链DAPP程序开发未来发展简介

W13902449729

dapp开发

复杂A/B实验如何设计?火山引擎DataTester帮你落地!

字节跳动数据平台

大数据 数据 火山引擎 A/B测试

一个 fault injection 测试的三次演化

QE_LAB

硬件 测试环境

华为阅读年度会员4折,万元好礼抢先看

叶落便知秋

记一次多个Java Agent同时使用的类增强冲突问题及分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

Java面试题解析:如何使用ReentrantLock的条件变量,让多个线程顺序执行?

千锋IT教育

2022最全Java面试八股文,已经帮助512人进入大厂(备战明年春招必看)

程序知音

Java java面试 java架构 后端技术 Java面试八股文

不只是负载均衡,活字格智能集群的架构与搭建方案

葡萄城技术团队

钉钉全栈化实践总结-前端篇

阿里技术

前端 钉钉 全栈

5款宝藏办公软件,高质量打工人必备!

淋雨

OCR 办公软件 IDM

完美避开,99%的PCB工程师都踩过的坑!

华秋PCB

工具 PCB PCB设计

大咖分享 | 如何构建 Alluxio 审计日志分析系统

Alluxio

分布式 Alluxio 大数据 开源 数据编排 审计日志

啃透这份“高并发编程核心笔记”,跳槽阿里直接涨10K

小小怪下士

Java 编程 程序员 高并发 阿里

一站式工业边缘数据采集处理与设备反控实践

EMQ映云科技

物联网 IoT neuron 11月月更 eKuiper

断连?消息丟失?不用愁!教你快速在物联网平台上排查问题——设备管理运维类

阿里云AIoT

阿里云 物联网平台 设备上云

如何开发一个标准的云原生应用?

阿里巴巴云原生

阿里云 微服务 云原生

大数据生态中的 RocketMQ 5.0

Apache RocketMQ

消息队列 Apache RocketMQ

探究多线程和异步

C++后台开发

多线程 后端开发 异步 linux开发 C++开发

生于云,长于云,华为云推动开发者数字化创新

科技热闻

直播预告 | PolarDB for PostgreSQL - 共享存储在线扩容

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

浅谈Kotlin编程01.初识Kotlin和入门示例

南巷羽

android kotin 11月月更

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