在哪些情况下使用 Clojure 更好?[关闭]
题
我使用 Lisp 和 Scheme 进行开发,但我正在阅读有关 Clojure 的内容,然后我想知道,在哪些情况下使用它比使用 Lisp 或 Scheme 更好?谢谢
解决方案
“Clojure在JVM上运行”意味着您可以获得Java库的全部聚宝盆。您可以在Swing中创建漂亮的GUI,使用Apache的Web客户端或服务器代码,连接现成的Sudoku解算器......无论您喜欢什么。
Clojure的另一大优点是其非常优秀的并发支持,大约有3种不同的口味。如果您有一个计算密集型,可并行化的任务,Clojure可以让它变得简单。好吧,更容易。
更新:另一个论点。 Clojure功能非常强大,所以如果你想强迫自己在功能上思考和写作,这是一个加分。
其他提示
这个问题无法回答。你应该使用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不是“标准”的。有些人发现实施定义的语言没有吸引力。等等。这些事对我来说都不重要,但它们可能对你而言。
这几乎完全是主观的。您应该使用哪种语言取决于您已经知道的内容,您愿意学习的内容,您想要使用的库,您喜欢的编辑器和工具,您愿意接受的语言缺陷和解决方法。您无法容忍的缺陷,以及什么可以帮助您更快,更便宜,更愉快地完成工作,或实现您的目标。
基本上,无论是什么让你感到温暖和模糊。全部了解它们,然后根据自己的口味做出明智的选择,并使用您最喜欢的一个。他们都很好。
当?越多越好。 为什么?不可变数据结构 - 它们确实非常好。还有很多其他原因。
Clojure 应该在以下情况下使用
- 你需要使用现有的java代码。
- 你和对 lisp 过敏的人一起工作(“老板,我想使用一个名为 clojue 的 java 并发库,而不是 clojue”)。我想在方案中重写这个”[1]
- 您将为多处理器系统进行编程。
在以下情况下,方案会更好:
- 你需要证明你的代码是正确的。Clojures(调用 java)会阻碍但不能阻止这一点。
- 您正在与对 Java 过敏的人一起工作。
- 您正在为没有(足够新)JVM 的平台进行开发
[1] 是的,这是一个糟糕糟糕的原因。这就是我们生活的世界......
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相比)。
有很多原因,有些是上面提到的。我的看法是:
- 预先存在的库。这是这样的一个好处。我只是不能赞美这个功能。
- 语言更适应 硬件目前可用 (多核)和发展 今天使用的范例。推理并发性要容易得多。功能方面也更好。显然,你可以在Lisp中进行函数式编程,但很容易在不知不觉中,无意中和无意中打破范式。
- 跨平台。我跑得一样 Linux,Windows和Windows上的程序 苹果电脑。有许多本地Lisps 跨平台运行但是 支持所有功能 平台有点参差不齐 经常要警惕 对于一个缺少的东西 平台或其他。同样, 你需要的图书馆并非总是如此 始终如一地支持 平台。 ABCL和一些 JVM Scheme实现有这个 一贯的支持,但我 仍然喜欢Clojure因为 第2点。
- 语言的本质 社区。让我们面对现实,很多 Common Lisp社区的时间 只是讨厌处理。那是 根本不是Clojure的情况。 没有它很容易获得有用的帮助 那种屈尊和卑鄙 通常会附带答案 Common Lisp社区。就像我一样 多次为自己学习, 毫无疑问这么愚蠢 你不会得到礼貌和乐于助人 来自Clojure社区的回复。 醇>
如果我不得不发现一件事要抱怨,那就是IDE支持。也许这是一个学习新习惯的问题,但我仍然比Clojure更容易处理Java开发的机制。我尝试过,使用Clojure Box,在NetBeas上使用Enclojure,在Intellij IDEA上使用La Clojure,在Eclipse上使用Counterclockwise。如果您主要使用REPL工作,它们都可以正常工作,但是对于类文件的编译和执行,它们仍然感觉有点笨拙。
Clojure的一个子集也可以编译为 javascript
Clojure在JVM(和CLR)上运行,所以就是这样。
Clojure的设计涉及安全地适应多种类型的并发编程,故意难以在其他语言中错误地编写危险,摇摇晃晃且经常损坏的并发容错代码。如果您的问题域涉及并发编程,Clojure用于管理并发的集成工具数组可能比其他Lisp和Scheme中可用的特定于实现或最低公分母的库更适合。
Clojure 最伟大的事情之一就是您可以使用大量的库。你拥有 Java 的强大功能和 Lisp 的表达能力,这是一个绝妙的组合。Clojure 更适合现实世界的开发,因为它是为现实世界的开发而设计的。有了 Clojure,您就拥有了很棒的库、很棒的现代功能以及由乐于助人、志同道合的人们组成的令人惊叹的社区。
我不得不说 Clojure 是一种更好的语言,无论从哪方面来说。这是一个极具争议性的陈述,所以我要在这里指出,这只是我的诚实观点。
Clojure 岩石。
我一直在努力学习新语言,所以我对学习Clojure感兴趣。但是,不是SBCL和其他一些Common Lisp实现,比Clojure快得多吗?难道你不需要超过4个处理器(以及一个可合理并行化的任务)来弥补Clojure应用程序与同一个应用程序的单线程SBCL版本之间的性能差异吗?
作为一般的经验法则,在其中任何一种符合要求的情况下,我倾向于支持Clojure而不是其他语言: (1)。域模型往往看起来非常递归和/或图形。 (2)。有机会利用多核JVM环境(例如,Elastic Beanstalk) (3)。数据和代码之间存在模糊障碍(想想RPN计算器,其中节点可以是运算符或数字)
这听起来可能有点人为,但我的很多工作涉及处理图形和信息树,无论是查看社交网络,某种基于约束的优化还是语义关系构建。我发现,与Clojure相比,我最喜欢的另一种语言Ruby不能给我带来表现力和原始计算能力的混合,特别是在定量,递归,并发型问题解决方面。