我在Lisp和Scheme中开发,但我正在阅读Clojure,然后我想知道,在哪种情况下使用它比使用Lisp或Scheme更好?感谢
答案 0 :(得分:56)
这个问题无法回答。你应该使用Clojure几乎100%的时间而不是CL和Scheme,这就是我要说的。但这并不意味着你应该听我说。其他人可以提出一个好的论据,反之亦然。
对我来说,Clojure中的语法和函数名称在美学上令人愉悦。某些Java库对于我为数据调整和Web编程以及GUI工作所做的工作非常宝贵。功能编程具有挑战性和愉悦性。 Clojure的缺陷并不重要,它在我眼中的好处超过了它。其他Lisps中的某些无法容忍的缺陷在Clojure中被“修复”,因为它是新的,它可以忽略向后兼容性。它有一种新颖且可论证的强大的并发方法。 Clojure社区充满活力,热情而且令人敬畏。所有这些都说明了我和我对Clojure或其他Lisps的看法。
在Clojure或Java中不存在CL和Scheme的库。有些人不喜欢Clojure如何使用过多的语法,如[]
和{}
,并希望在任何地方使用parens。如果你想要CLOS风格的OOP或许多可变数据结构,另一个Lisp可以说更好。对于某些人来说,JVM是重量级的,可能是太重量级和太多的行李。很多Java泄漏到Clojure(按设计),这冒犯了一些人的敏感性。 STM和不可变数据结构具有使某些事物(例如数字运算)更慢或更不优雅的开销。 Clojure是新的,在某些领域仍然很粗糙,在其他领域仍在快速变化和发展。 Clojure还没有通过时间的考验,而其他Lisps已经有了。 Clojure不是一个“标准”,有些人发现实现定义的语言没有吸引力。等等。这些事对我来说都不重要,但它们可能对你而言。
这几乎完全是主观的。您应该使用哪种语言取决于您已经知道的内容,您愿意学习的内容,您想要使用的库,您喜欢的编辑器和工具,您愿意接受的语言缺陷和解决方法。您无法容忍的缺陷,以及什么可以帮助您更快,更便宜,更愉快地完成工作,或实现您的目标。
基本上,无论是什么让你感到温暖和模糊。了解所有这些,然后根据自己的口味做出明智的选择,并使用您最喜欢的一个。他们都很好。
答案 1 :(得分:22)
“Clojure在JVM上运行”意味着您可以获得整个Java库的丰富多彩。您可以在Swing中创建漂亮的GUI,使用Apache的Web客户端或服务器代码,连接现成的Sudoku解算器......无论您喜欢什么。
Clojure的另一大优点是它非常优秀的并发支持,大约有3种不同的口味。如果您有一个计算密集型,可并行化的任务,Clojure可以让它变得简单。好吧,更容易。
更新:另一个论点。 Clojure功能非常强大,所以如果你想强迫自己在功能上思考和写作,这是一个加分。
答案 2 :(得分:9)
当?越多越好。 为什么?不可变数据结构 - 它们确实非常好。还有很多other reasons。
答案 3 :(得分:8)
应该使用Clojure
在以下情况下方案会更好:
[1]是的,这是一个坏坏的坏理由。这就是我们生活的世界......
答案 4 :(得分:8)
ABCL(Armed Bear Common Lisp)和一些Scheme实现(KAWA,SISC,...)也在JVM上运行。
一般来说Common Lisp有不同的'风味' - ABCL就是其中之一。其他编译为C,本机代码,具有广泛的开发环境或逻辑语言或数据库等专用扩展。
Clojure OTOH是一种新的Lisp方言,强调懒惰的函数式编程和并发编程。它的作者(Rich Hickey)是一位非常有经验的软件开发人员(他还为Common Lisp编写了Java和.net接口)并且在Clojure方面表现出色。虽然围绕这种语言有一些炒作,但值得一试 - 它绝对是近年来开发的更好的Lisp方言之一(与Newlisp或Arc相比)。
答案 5 :(得分:8)
有很多原因,有些是上面提到的。我的看法是:
如果我必须找到一件可以抱怨的事情,那就是IDE支持。也许这是一个学习新习惯的问题,但是我比Clojure更容易处理Java开发的机制。我尝试过,使用Clojure Box,在NetBeas上使用Enclojure,在Intellij IDEA上使用La Clojure,在Eclipse上使用Counterclockwise。如果您主要使用REPL,它们都可以正常工作,但是对于类文件的编译和执行,它们仍然感觉有点笨拙。
答案 6 :(得分:7)
Clojure的一个子集也可以编译为 javascript
答案 7 :(得分:3)
Clojure在JVM(和CLR)上运行,所以就是这样。
答案 8 :(得分:3)
Clojure的设计涉及安全地适应多种类型的并发编程,故意难以在其他语言中错误地编写危险,摇摇晃晃且经常损坏的并发容错代码。如果您的问题域涉及并发编程,Clojure用于管理并发的集成工具数组可能比其他Lisp和Scheme中可用的特定于实现或最低公分母的库更适合。
答案 9 :(得分:3)
Clojure最大的优点之一就是可以使用它的大量库。你拥有Java的强大功能和Lisp的表现力,这是一个坏蛋组合。 Clojure更适合现实世界的发展,因为它是为现实世界的发展而制作的。使用Clojure,您可以拥有令人敬畏的图书馆,令人敬畏的现代功能,以及一个由志趣相投的人组成的迷人社区。 p>
我不得不说Clojure是一种更好的语言,一直到处都是。这是一个非常有争议的陈述,所以我在这里指出这只是我的诚实意见。
Clojure rock。
答案 10 :(得分:2)
我一直在努力学习新语言,所以我对学习Clojure很感兴趣。但是,不是SBCL和其他一些Common Lisp实现,比Clojure快得多吗?难道你不需要超过4个处理器(以及一个可合理并行化的任务)来弥补Clojure应用程序与同一个应用程序的单线程SBCL版本之间的性能差异吗?
答案 11 :(得分:2)
作为一般的经验法则,在其中任何一种符合要求的情况下,我倾向于支持Clojure而不是其他语言: (1)。域模型往往看起来非常递归和/或图形。 (2)。有机会利用多核JVM环境(例如,Elastic Beanstalk) (3)。数据和代码之间存在模糊障碍(想想RPN计算器,其中节点可以是运算符或数字)
这听起来可能有点人为,但我的很多工作涉及处理图形和信息树,无论是查看社交网络,某种基于约束的优化还是语义关系构建。我发现,与Clojure相比,我最喜欢的另一种语言Ruby不能给我带来表现力和原始计算能力的混合,特别是在定量,递归,并发型问题解决方面。