我有一个有趣的关于我正在使用Clojure和Java开发的应用程序的体系结构问题。应用程序涉及大量密集的并发数据处理任务,需要进行协调。在哪里可以画出Clojure和Java之间的界限?
下面是混合两者的Clojure和Java的理由:
- 的Java是需要一些相当CPU密集型的数字代码,在这里我需要优化算法对JVM尽可能快地运行。 Clojure还不能完全实现这一点,而这样的代码在Clojure中不会非常习惯,因为由于性能原因,算法需要大量可变数据。
- Clojure(IMHO)对于编排应用程序的整体流程要好得多,它具有对函数式编程,REPL交互式动态开发和并发功能的优秀支持。
鉴于我正在使用两种语言 - 我应该使用哪些逻辑或原则来确定两者之间的分界线?特别是,我对如何设计一个能够利用两种语言的相对优势的正确类型的API /接口感兴趣。
我对你的第一个陈述有点惊讶:根据我的经验,做数字代码非常适合Clojure,但不适合面向对象的方法。就绩效而言:你真的衡量了差异吗?在Clojure中键入提示会让你非常接近Java性能。出于性能原因,我也不明白需要可变数据。也许你可以在这里举个例子吗? – 2011-01-21 13:13:54
@Mauritz - 是的,我测量了差异!类型提示并没有让我足够接近(原始人的拳击是大杀手,但也有一些其他开销我不明白 - 也许我会在Clojure 1.4中重新审视:-))。我需要可变性,因为我必须处理大量的临时工作数据。 a [i] = a [j] + x在Java中速度非常快,至少比更新任何不可变数据结构(这意味着对象分配和gc开销)要快一个数量级。 – mikera 2011-01-21 15:07:43