如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

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

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

关注

评论

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

EMQX在Kubernetes中如何进行优雅升级

EMQ映云科技

运维 物联网 IoT 节点 企业号 1 月 PK 榜

万字技术干货 |YMatrix 高性能时序数据库引擎的技术实践

YMatrix 超融合数据库

性能优化 Clickhouse 时序数据 超融合数据库 YMatrix

深入思考 Schema 管理的几个基本问题

观远数据

华为云大数据解决方案赋能金融行业发展,打造5G智慧银行营业厅

IT科技苏辞

扩展接口SmartInstantiationAwareBeanPostProcessor解析

石臻臻的杂货铺

接口

华为云云原生数据库,激发数据活力

与时俱进的时代

教你3步完成阿里云物联网平台公共实例到企业实例的迁移——实践类

阿里云AIoT

安全 物联网 物联网安全 技术标签

软件测试/测试开发 | Jenkins 多任务关联

测试人

软件测试 持续集成 jenkins 自动化测试 测试开发

一文读懂Go Http Server原理

捉虫大师

Go HTTP 1月月更

华为云数字化解决方案激活企业市场空间,为企业稳健发展再加码!

IT科技苏辞

dcm4che 依赖下载异常

JefferLiu

闲话 dubbogo 社区

阿里巴巴中间件

阿里云 云原生 dubbo

今年大促季,阿里云容器服务有哪些技术和应用新突破?

阿里巴巴中间件

阿里云 容器 云原生

华为云数据库,安全、专业,值得信赖

与时俱进的时代

EfficientFormer 提升速度的同时保持性能,使 ViT 在移动端成为可能

Zilliz

使用 WebP 图像加速WEB加载

devpoint

Web 前端开发 网站优化 WebP

华为云数据库GaussDB(for Redis),如何为人们日常生活保驾护航

科技怪授

数据库

华为云CDN引领网站性能优化,助力企业更好发展

科技怪授

CDN

ScrollView(滚动条)

芯动大师

android ScrollView(滚动条) 滚动效果

企业优秀网络环境,为何离不开华为云CDN全站加速服务?

科技怪授

CDN

企业如何轻松上云?华为云弹性云服务器ECS给出答案

IT科技苏辞

Frp流量隐匿对抗排查

领创集团Advance Intelligence Group

内网渗透 Frp 流量编排

嗨 Jina,帮我画一幅高山流水图

Jina AI

图像生成 Diffusion

华为云ECS,专为您打造安全、灵活、高效的应用环境

与时俱进的时代

【深入浅出Seata原理及实战】「入门基础专题」带你透析认识Seata分布式事务服务的原理和流程(1)

码界西柚

分布式事务 seata Alibaba SpringCloud Alibaba Seata框架

华为云大数据赋能北港集团发展创新,数字化转型成效显著!

IT科技苏辞

本地数据怎么备份上云?华为云对象存储服务OBS帮你实现

科技说

华为云OBS对象存储,企业存储的好帮手

科技说

雄关漫道真如铁,而今迈步从头越 | 挥别2022,再战2023!

BoCloud博云

博云

拿下中国信通院多项测评的华为云数据库,究竟有多牛?

与时俱进的时代

华为云OBS助力企业解决数据存储难题

科技说

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