你们对Clojure有什么看法?我正在考虑接下来学习它,目前正在使用Erlang并且除了记录惨败之外总体上对它很满意...... Clojure和LISP一样强大吗?
Mar*_*rko 134
考虑学习它.如果没有其他原因,那么因为你可以在一个真实的项目中实际使用它.
You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
Run Code Online (Sandbox Code Playgroud)
Mar*_*bst 27
你在Lisp-1和Lisp-2中引用的是函数和变量是否共享同一名称空间的问题.在Lisp-1 Lisps中,就像Scheme和Clojure一样.在Lisp-2 Lisps中,就像Common Lisp一样,它们没有.这主要是品味和/或方便的问题 - 它不会影响编程语言的力量.
举个例子,在Clojure中你可以这样做:
(defn my-apply [func arg1 arg2]
(func arg1 arg2))
Run Code Online (Sandbox Code Playgroud)
这是一个函数,它接受一个函数和两个值,并将函数应用于值.例如:
user=> (my-apply + 1 2)
3
Run Code Online (Sandbox Code Playgroud)
在Common Lisp中,你必须把它写成
(defun my-apply (func arg1 arg2)
(funcall func arg1 arg2))
Run Code Online (Sandbox Code Playgroud)
你需要"funcall"的原因是,因为"func"在变量的名称空间中,你不能直接将它用作函数,就像你在Clojure中那样,它没有做出这种区分.因此,您必须告诉Common Lisp"请将此变量解释为函数并使用这些参数调用它".这样做的另一个结果是,要获得相同的结果,您必须像这样调用"my-apply":
=> (my-apply #'+ 1 2)
3
Run Code Online (Sandbox Code Playgroud)
这里的问题是相反的:"+"是一个函数,但你想把它作为变量传递,所以你必须"转换"它."#'+"是"(function +)"的简称,顺便说一下.
kon*_*onr 22
我使用Clojure而不是CL,因为:
:WQ
All*_*nde 17
Clojure是LISP的一种方言,所以,是的,它和LISP一样强大.
除了我们现在为JVM提供一个好的LISP工具之外没有其他原因我喜欢这种语言.
Ber*_*own 15
"Clojure有可能为面向并发的编程做十九年前Java为面向对象编程所做的事情:使用一种语言(或者,在Clojure的情况下,一种"语言环境")使用它可以更简单程序员已经习惯了什么." - Bill Clementson
人们,LISP由一系列编程语言组成.有Lisp方言,如Common Lisp和Clojure.最重要的是,Common Lisp或Scheme有很多实现.
我使用Erlang进行协调的网络负载测试,并且它非常适合,因为问题完全在Erlang的"正确执行分布式通信软件"的"甜蜜点"内.我发现Clojure对于需要在具有多个线程的单个框上执行复杂操作的代码更好(这是更常见的情况).
你已经领先于曲线了,因为你知道Erlang,这将帮助你发现它真正闪耀的问题.Clojures真正的"甜蜜点"是什么?
Clojure是一个Lisp-1,是的.可以把它想象成一个没有历史包袱的更好的Common Lisp.它还有几个现代并发功能,如STM和Agents(他们决定不实现Erlang的Actors模型).在JVM上运行的优点很简单 - 已经为它编写了许多库(主要是Java).
Clojure中的Clojure是在Clojure中重写Clojure编译器的持续努力,以使其更具可移植性和可维护性.除了core.clj之外,Clojure的大部分内容都是用Java编写的.在此移动之后,可以将其移植到很多虚拟机,包括Parrot.
归档时间: |
|
查看次数: |
15373 次 |
最近记录: |