Clojure 综述:CLR、Javascript、Terracotta 上的 Clojure 及新发布

阅读数:839 2009 年 4 月 13 日

话题:Java.NETRuby编程语言语言 & 开发架构

就在 Clojure 1.0 版行将发布之际,其触角又伸向了其它平台:

Clojure-contrib现在包含了 Clojure 在不同平台上的两个实现。Clojure 的很大一部分是用 Clojure 编写的,因此其实现可以共享很多代码:

  • ClojureCLR是.NET 版的 Clojure
  • ClojureScript将 Clojure 的部分子集编译成了 Javascript,这为很多功能的实现敞开了大门,比如在应用的服务器端和客户端(浏览器)之间共享相同的 Clojure 代码

Clojure 用户也在用 JVM 库和框架对其进行测试,它专注于一台 JVM 上的并发处理而非分布式的处理。Terracotta 可以在一台机器或是分布式环境下绑定多个 JVM。Paul Stadig 已经做了实验:让 Clojure 利用 Terracotta 的特性JRuby 也进行了类似的实验)。最近的一份报告表明

看起来让 Clojure 与 Terracotta 协同工作所面临的三大问题会在 Terracotta 一边解决,这也意味着我所编写的 Terracotta Integration Module 最终将变成一个配置文件了。

最后,新版 Clojure将有如下变化:

合并最近增加的所有内容——完全的延迟序列,doseq/for 的:let 选项、用于对 local fns 进行相互递归的 letfn、同步观测、多参数的 set/union/difference/intersection、counted?、per- defmulti 继承、reader 宏的 #_ ignore、future-calls、future 及 pcalls/pvalues、defmulti docstrings 及元数据、用于 multimethod 的 methods/prefers、对 atoms/refs/agents/vars/namespaces 统一的元数据处理、condp、release-pending-sends 以及支持 Applet 及 Android 的 AOT tweaks 等等。除此以外还会增加很多修复和增强。

其变化还包含了更新的延迟序列行为。凭借 multimethod 反射支持,我们可以观测到分发值(dispatch value)和函数之间的映射(使用methods函数)。

查看英文原文:Clojure Roundup: Clojure on CLR and Javascript, Terracotta, New Release