如何从Java转向Clojure?

27

在发现了 Clojure 后,我花了几天时间沉浸在其中。

哪些类型的项目适合使用Java而不是Clojure,反之亦然,还有二者结合使用呢?

您能举出一些在接触Clojure之前您从未尝试过的程序示例吗?


1
我从未听说过它!但它是Lisp!万岁!Lisp又回来了! - Andre Bossard
我也很想知道答案。我想更多地了解Clojure。 - Jason Baker
@Andre Bossard:它从未离开。但是现在特别是对于Clojure来说,它确实帮助Lisp变得“主流”了。有几家初创公司正在使用Clojure,据信至少有数万名Clojure程序员:这门语言简直太牛了。下次要小心讽刺的用词:你永远不知道多少年后你那毫无必要的讽刺会显得多么愚蠢。 - Cedric Martin
@CedricMartin,我说这句话时完全没有任何讽刺的意味。所以请小心你的假设...(这句话也没有任何讽刺的意味) - Andre Bossard
4个回答

14

Clojure非常适合进行并发编程。它提供了一些很好的工具来处理线程,例如软件事务内存和可变引用。

作为Western Mass Developer's Group的演示,Rich Hickey制作了一个蚂蚁群模拟器,每只蚂蚁都是自己的线程,所有变量都是不可变的。即使有大量线程,一切都运行良好。这不仅是因为Rich是一个出色的程序员,也是因为他在编写代码时不必担心锁定问题。您可以在此处查看他有关蚂蚁群的演示


志同道合 :) Rick和我都参加了今年早些时候Rich Hickey在Northampton做的并发演示。 - Lou Franco
有人知道在哪里可以找到这个蚂蚁群体演示的源代码吗? - Steven Devijver

6

@LouFranco:嘿,是的,我昨晚读了你所有的帖子,之前没有联系起来,抱歉。它非常有启发性,谢谢。 :) 我已经观看了所有的视频@blip,并阅读了很多博客,包括你自己的。我真的很想知道完全跳槽的可行性。 - Ande Turner
对我来说最大的问题是解读编译器的错误信息。随着时间的推移,这变得更容易了。目前我没有一个想在JVM上运行的项目,但如果有的话,我会选择Clojure语言。 - Lou Franco

4
什么项目类型更适合使用Java而不是Clojure,反之亦然,或者两者结合使用? 如果需要使用GUI构建工具(例如Netbeans中的Matisse),则需要Java的项目可能仍然需要Java。任何Java中可以完成的任务在Clojure中也可以轻松完成,如果需要的话,还可以使用代理和gen-class,或者只是根据需要访问Java(., doto, new等)。这使得Clojure项目可以轻松地使用Java库或遗留的Java代码。 你以前从未尝试过Clojure的程序有哪些? 在我发现Clojure之前,我正在考虑一个需要JDBC,在Servlet容器中运行,并且我预计会进行大量迭代开发的项目,因为不清楚哪些方法适用于需要分析的数据。我把它放在了后台,因为我没有时间或耐心进行Java所需的编译-调试-部署-验证循环。现在我已经用Clojure编写了这个应用程序,并且非常满意随时做出修改并能够立即检查结果的便捷性。更不用提无锁编程的乐趣和摆脱开发(和重构)类层次结构的解放感。
- "MikeM"通过clojure@googlegroups.com邮件列表

@J.PabloFernández:我建议你前往谷歌群组Clojure Group并提出你的问题。那里有许多经验丰富的用户以及Clojure的创造者Rich Hickey。 - Ande Turner

2
哪些项目类型更适合使用Java而不是Clojure?反之呢?还有哪些项目类型可以同时使用两者?
如果你想开发一个框架,供Java和Clojure使用,我建议你在Java中编写主要的抽象(接口和基类),而不是在Clojure中编写(我觉得Clojure的gen-class有点繁琐,我更喜欢使用proxy)。
如果你使用Hibernate或任何其他大量使用Java注释但没有提供编程替代方法的框架,那么你可能会遇到一些麻烦,因为使用Clojure的数据结构模拟带注释的POJO并不是一件轻松的事情。
除此之外,我没有遇到过Clojure不如Java适用的用例。当然,你必须应对静态类型的丢失,这一开始可能有点令人不安,但往往会消失。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接