写点什么

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

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

关注

评论

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

还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!

快乐非自愿限量之名

php Linux 运维

为什么真全闪分布式存储离不开 RoCE/RDMA 流控技术?

XSKY星辰天合

#分布式存储 流控技术

深入理解 Fixture 作为参数使用的技巧:提升测试代码的灵活性和复用性

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

测试

深入理解 yield 用法:从生成器到高级测试场景的应用

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

测试

和鲸社区地球科学轻科研交流局:在这个卷来卷去的时代,我们都想要找到一些答案

ModelWhale

数据科学 气象 地球科学 DDE 深时数字地球 大气

机器学习与AI|如何利用数据科学优化库存周转率?

Altair RapidMiner

人工智能 数据分析 altair RapidMiner

全链路压力测试:确保系统在高负载下的稳定性与响应能力

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

测试

鸿蒙开发实战:灵活定制编译选项,打造高效应用

王二蛋和他的张大花

鸿蒙

鸿蒙开发实战:轻松配置多环境目录,实现高效应用部署

王二蛋和他的张大花

鸿蒙

Pytest-ordering:自定义 Pytest 测试用例执行顺序的指南

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

测试

Robotaxi三国杀

脑洞汽车

AI

鸿蒙开发实战:智能日志定位与高效调试技巧

王二蛋和他的张大花

鸿蒙

Pytest 并行与分布式运行测试用例的实现与优化

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

测试

深入理解 fixture 的作用范围:优化测试环境的管理

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

测试

Pytest 内置插件 Hook 体系:深入了解与实践

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

测试

鸿蒙开发实战:鸿蒙应用开发中的页面管理工具类详解

王二蛋和他的张大花

鸿蒙

低代码与数字化综合服务平台的建设与探索

EquatorCoco

低代码

七届“全勤生”高通已经确认参加明年第八届进博会

业界

什么是公共数据资源授权运营?

郑州埃文科技

公共数据

探索微店API接口:如何高效获取商品详情数据

代码忍者

API 接口 pinduoduo API

spring-关于组件的注入及获取流程

EquatorCoco

Java spring 后端

鸿蒙开发实战:深度解析网络管理技巧与实战应用

王二蛋和他的张大花

鸿蒙

利用外部数据源 CSV 管理测试:轻量化数据驱动测试方案

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

测试

利用外部数据源 JSON 管理测试:灵活的数据驱动测试方法

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

测试

全面升级的“新清影”,给AI生成视频带来了哪些新玩法?

Alter

C# 单例模式的多种实现

不在线第一只蜗牛

JavaScript C#

智源举办2024具身与世界模型专题峰会 产学研共促技术创新与产业应用

智源研究院

推理王者o1到底怎么落地?

脑极体

AI

从消息中间件架构发展趋势,探讨物联网平台如何支持亿级设备推送?

华为云开发者联盟

IoT Apache Pulsar 消息中间件 华为云IoTDA

别再被多线程搞晕了!一篇文章轻松搞懂 Linux 多线程同步!

快乐非自愿限量之名

Linux 多线程

改变财务规划思维方式,迎接创新技术新时代

智达方通

技术创新 预算管理 财务规划

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