写点什么

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

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

关注

评论

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

镜像供应链安全

天翼云开发者社区

云计算 镜像 云服务 容器技术

NFTScan 正式上线 ERC-6551 NFT API 数据服务!

NFT Research

NFT\ NFTScan API 文档

如何用 Python 的 requests 库发送 JSON 数据的 POST 请求

我再BUG界嘎嘎乱杀

Python json post

ITSM流程落地经验之事件管理

嘉为蓝鲸

ITSM 流程管理 事件管理

22万奖金池已到位,2024天池云原生编程挑战赛正式启动

阿里巴巴云原生

阿里云 云原生 编程挑战赛

一文让你清晰了解医疗行业采购堡垒机的必要性

行云管家

网络安全 医疗 数据安全 堡垒机

使用天翼云云容器引擎CCE创建简单nginx服务

天翼云开发者社区

nginx 云计算 云服务 容器技术

哈银消费金融:“信用记录关爱日”深化信用教育,与消费者共筑诚信桥梁

极客天地

大模型在蓝鲸运维体系应用——大模型在可观测的增强

嘉为蓝鲸

数据库 可观测 大模型

多模态模型学会打扑克:表现超越GPT-4v,全新强化学习框架是关键

Openlab_cosmoplat

嘉为蓝鲸WeOps上新 | 全新优化IM对接,满足用户移动办公场景

嘉为蓝鲸

运维 自动化运维 #WeOps

揭秘华为云运维中心,如何守护全球10亿用户的智慧生活体验?

华为云开发者联盟

云计算 华为云 安全运维 华为云开发者联盟 企业号2024年6月PK榜

接口性能测试---locust脚本编写(一)

天翼云开发者社区

Python 性能测试 locust 脚本编写

技术解密Java Chassis 3超实用的可观测性

华为云开发者联盟

Java 微服务 华为云 华为云开发者联盟 企业号2024年6月PK榜

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