阅读更多

2顶
0踩

编程语言

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

2007-11-28 11:12 by 见习记者 Arbow 评论(5) 有6113人浏览
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/ 下载
2
0
评论 共 5 条 请登录后发表评论
5 楼 ngutom 2009-12-16 22:08
Hot Code Reload    <=> Dynamic Compilation
这个差的有点多吧。
4 楼 dogstar 2009-05-08 14:41
多核,jvm是支持,语言是体现.跟java能不能成没多大关系.关键还是得jvm支持.
3 楼 YRHYRH 2007-12-03 14:29
多核心CPU 的发展将决定JAVA 的前途。面向函数的编程可以发挥多核心CPU 的潜力。这是靠JVM运行的JAVA 所不具备的。
2 楼 pf_miles 2007-11-29 17:18
引用
要这么多的语言有什么用呢?

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

发表评论

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

相关推荐

Global site tag (gtag.js) - Google Analytics