您的位置: 新闻频道 Java新闻

原创新闻 Clojure,jvm平台上的又一门函数式语言

2007-11-28 by 见习记者 Arbow
评论(3) 有462人浏览 clojure fp erlang
Clojure 是什么?

引自官方网站的介绍
引用
Features
* Dynamic Development
* Functional Programming
* Lisp
* Runtime Polymorphism
* Concurrent Programming
* Hosted on the JVM

它基于JVM,能调用Java的类库,支持并发,与Scala(http://www.scala-lang.org/)很相似。先前曾有人将Scala比作是Java平台上的Erlang语言。

官方例子:基于Lisp语法,使用了Java并发库的并发编程
(import '(java.util.concurrent Executors))
(defn test-stm [nitems nthreads niters]
  (let [refs  (map ref (replicate nitems 0))
        pool  (. Executors (newFixedThreadPool nthreads))
        tasks (map (fn [t]
                      (fn []
                        (dotimes n niters
                          (sync nil
                            (dolist r refs
                              (set r (+ @r t)))))))
                   (range nthreads))]
      (. pool (invokeAll tasks))
      (. pool (shutdown))
      (map deref! refs)))
(test-stm 10 10 10000)
(550000 550000 550000 550000 550000 550000 550000 550000 550000 550000)

可见这里的并发只是使用了Java的线程,并非像Scala那样基于Actor模型。

在论坛 http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631 上面,有人提出了这样的对比:

引用
Erlang: The Movie <=> Clojure: The Podcast
Single Assignment <=> Immutable Data Structures
Mnesia <=> STM
ErlangVM <=> JVM
Hipe <=> JIT
Pattern Matching <=> Multimethods
Erlang Shell <=> REPL
Hot Code Reload <=> Dynamic Compilation
Behaviours <=> Extensible Abstractions
Tail Recursion <=> recur
fun <=> fn
syntax from 1987 <=> syntax from 1958
EMP2 <=> CL style macros
Fiber/Actor <=> Termite


有兴趣的朋友,可以到 http://clojure.sourceforge.net/ 下载

评论 共 3 条 发表评论

YRHYRH 2007-12-03 14:29
多核心CPU 的发展将决定JAVA 的前途。面向函数的编程可以发挥多核心CPU 的潜力。这是靠JVM运行的JAVA 所不具备的。
pf_miles 2007-11-29 17:18
引用
要这么多的语言有什么用呢?

每种语言都有它特别适合的应用情况,Java这种面向对象的语言并不是所有情况都能用的很顺手的.所以会出现一些脚本语言或函数式编程语言来弥补.
zhangcheng 2007-11-28 12:51
要这么多的语言有什么用呢?

发表评论

您还没有登录,请登录后发表评论