你对Clojure有什么看法?
你们怎么看待Clojure? 我正在考虑下一步学习它,目前正在使用Erlang,除了logging失败之外,我总是对它感到满意…… Clojure和LISP一样强大吗?
考虑学习它。 如果没有其他原因,那么因为你可以在一个真实的项目中使用它。
You : Can I use this small Java library called Clojure? Boss: Why do you need it? You : For some concurrency improvements. Boss: Ok.
Lisp-1和Lisp-2引用的是函数和variables是否共享相同的名称空间的问题。 在Lisp-1 Lisp中,像Scheme和Clojure一样。 在Lisp-2 Lisp中,像Common Lisp一样,它们不是。 这主要是一个品味和/或方便的问题 – 它不影响编程语言的力量。
举个例子,在Clojure中你可以这样做:
(defn my-apply [func arg1 arg2] (func arg1 arg2))
这是一个函数,它接受一个函数和两个值,并将函数应用于这些值。 例如:
user=> (my-apply + 1 2) 3
在Common Lisp中,你必须把它写成
(defun my-apply (func arg1 arg2) (funcall func arg1 arg2))
你需要“funcall”的原因是,因为“func”在variables的名字空间中,所以你不能直接使用它作为一个函数,就像你可以在Clojure中一样,这并没有做出区分。 所以你必须告诉Common Lisp“请把这个variables解释为一个函数,并用这些参数来调用它”。 这样做的另一个后果是,要得到相同的结果,你必须像这样调用“我的申请”:
=> (my-apply #'+ 1 2) 3
这里的问题是相反的:“+”是一个函数,但是你想把它作为一个variables传递,所以你必须“转换”它。 “#”+“是”(function+)“的简称,顺便说一句。
我使用Clojure而不是CL,因为:
- 它与Java良好的沟通,所以我可以外包我的编码
- 它可以访问各种各样的Java库,包括Swing和Weka
- 由于它运行在JVM上,因此可以更安全地假设您的问题在任何地方都可以正常工作
- 如果您可以使用less量代码显示相同的库,则可以将Java程序员转换为lambdaexpression式
- 而且,最重要的是,我不会被束缚在Emacs上
:WQ
Clojure是LISP的一种方言,因此,它和LISP一样强大。
除了我们现在有一个很好的JVM的LISP工具,没有其他的原因,我喜欢这种语言。
我觉得这个名字很聪明。
“Clojure十年前面向面向对象程序devise面向并发编程的潜力很大:正确使用一种语言(或者在Clojure的情况下,”语言环境“什么程序员已经习惯了。“ – 比尔克莱门森
而人,LISP由一系列编程语言组成。 有Lisp方言,如Common Lisp和Clojure。 最重要的是,Common Lisp或Scheme有许多实现。
我在工作中使用Erlang进行协调的networking负载testing,因为这个问题完全在Erlang的“正确地执行分布式通信导向型软件”的“甜蜜点”之内。 我发现Clojure更适合需要在一个包含多个线程的单个框上执行一些复杂操作的代码(这是更常见的情况)。
因为你知道Erlang,所以你超越了这个曲线,这将帮助你发现真正闪耀的问题。 Clojures真正的“甜蜜点”是什么?
Clojure是一个Lisp-1,是的。 把它看作是一个更好的Common Lisp,没有所有的历史包袱。 它也有一些现代并发特性,如STM和Agents(他们决定不实现Erlang的Actors模型)。 在JVM上运行的好处很简单 – 已经为它编写了很多库(大部分是用Java编写的)。
Clojure中的Clojure是Clojure中重写Clojure编译器的一个不断努力,使其更具可移植性和可维护性。 除了core.clj之外,Clojure的大部分都是用Java编写的。 这一举措之后,将有可能将其移植到许多VM,包括Parrot。
我比Common Lisp更喜欢Common Lisp,因为它的语法比较规则,并且与可怕的(IMHO)Java API没有关系。
对于Common Lisp,我也可以select几个优秀的,经过充分testing的实现和一个成熟的标准。
但是如果我不得不使用Java来做工作,那么我肯定会考虑使用Clojure。 🙂
我的意思是“Clojure和LISP一样强大”,是我在Common Stack Lisp的Lisp-2和Clojure的Lisp-1的stackoverflow上读到的? (我可以轻易地在这里散步)…
就并发性而言,我真的很喜欢Erlang的故事,因为它很容易通过在Actor模型中编写应用程序来分发应用程序
来自Clojure的创build者http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1
“即使有演员,Clojure也不会有分布式并发的故事,但是我正在考虑采用Erlang的批发,使用Clojure的Clojure甚至Clojure的Erlang分布式过程。也许这会看起来像白蚁一样已经完成了,请继续关注。