【发布时间】:2011-02-24 07:43:01
【问题描述】:
Clojure 据说是一种使多线程编程更容易的语言。
来自Clojure.org 网站:
Clojure 简化了多线程 以多种方式编程。
现在我正在寻找一个在 Java 和 Clojure 中解决的重要问题,以便我可以比较/对比它们的简单性。有人吗?
【问题讨论】:
标签: java concurrency clojure
Clojure 据说是一种使多线程编程更容易的语言。
来自Clojure.org 网站:
Clojure 简化了多线程 以多种方式编程。
现在我正在寻找一个在 Java 和 Clojure 中解决的重要问题,以便我可以比较/对比它们的简单性。有人吗?
【问题讨论】:
标签: java concurrency clojure
我建议也看看 Christophe Grand 的 thread safe blocking queue;它不到 20 行,但包含了很多功能,在我看来,它展示了对 Clojure 的一些并发特性、不变性、原子和惰性序列的专家使用。
考虑一下 Java 替代 java.util.concurrent.LinkedBlockingQueue is 842 lines 的微妙(可以说是复杂的)注释代码,您就会开始了解 Clojure 如何真正实现其并发承诺;显着提高抽象级别并以大约 10-20 倍的代码量交付正确的实现。
您还会注意到,在阅读 Java 代码时,很难只见树木不见森林……如果给您它,您能通过查看它来确定它的正确性吗?还要记住,这段代码是由 Doug Lea(可以说是 Java 并发方面最重要的专家)编写的,并且对于 java 来说具有很高的可读性;我非常怀疑我能否在 Java 中快速编写诸如此类的可读高性能代码并确保其正确性。
将此与 Clojure 版本进行对比,一旦熟悉了 Clojure 的基础知识,就很容易区分并理解它的工作原理......在 20 分钟内,我能够理解实现的每一行,并确保其正确性.现在我对 Clojure 的习语和 FP 更加熟悉了,我想这将花费我接近 5 分钟的时间。我也可能能够在几小时或几分钟内在 Clojure 中编写像这样的“正确”代码。
上述 java 类的 Christophes clojure wrapper 也具有指导意义,因为它与第一个版本共享相同的功能接口。
【讨论】:
The Wide Finder Project,由 Tim Bray 发起,有许多 Clojure 条目——其中最著名的是 Alex Osborne;他已经完成了a fantastic write-up 的工作——以及 Java、Scala 和大量其他语言的条目。
正在解决的问题非常实用,而且作为并行化挑战相当有趣,Tim 关于它的帖子(另见最近的Wide Finder 2 系列)阅读起来非常愉快(并且具有良好的教育价值)。加上 Alex 的文字真的很棒,即使您决定跳过其余部分,也请阅读它。它使用了一些 Clojure 特定的功能(如 Atoms)以及从 Java 带来的东西,如果它可以很好地快速完成工作......事实上,它只是因为它展示了 Clojure 出色的 Java 互操作的方式而很有趣。
总而言之,我想说这可能是最好的开始。
【讨论】:
请查看Rich Hickey's Ants example - 它展示了如何使用 clojure 的功能来构建并发程序
【讨论】: