BT

你的观点很重要! 快来参与InfoQ调研吧!

Clojure 1.7引入Transducers,提高跨平台支持度

| 作者 Sergio De Simone 关注 5 他的粉丝 ,译者 陆志伟 关注 0 他的粉丝 发布于 2015年8月5日. 估计阅读时间: 3 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

Clojure适用场景 by n yuxiao

谁能告诉我Clojure、Python、Scala、Ruby的适用场景?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT