在Clojure和Java之间划清界限?

时间:2011-01-21 13:07:55

标签: java api architecture clojure encapsulation

我对使用Clojure和Java开发的应用程序有一个有趣的架构问题。该应用程序涉及许多需要精心编排的密集型并发数据处理任务。

以下是混合Clojure和Java的基本原理:

  • Java需要一些非常 CPU密集型数字代码,我需要优化算法以在JVM上尽可能快地运行。 Clojure还不能很好地实现这一点,并且这样的代码在Clojure中不会非常惯用,因为出于性能原因,算法需要大量可变数据。
  • Clojure(恕我直言)远远优于编排应用程序的整体流程,它具有对函数式编程,REPL交互式动态开发和并发功能的出色支持。

鉴于我正在使用这两种语言 - 我应该采用什么逻辑或原则来确定两者之间的分界线?特别是,我对如何设计一个能够利用两种语言相对优势的适当级别的API /接口感兴趣。

2 个答案:

答案 0 :(得分:10)

在没有评论您对Java和Clojure的相对优势的看法,并假设您至少进行了一些微基准测试来验证假设是否有正确的机会,那么正确的方法似乎是离开Java仅适用于需要优化的部分。

负责数字代码和计算的类应该用Java编写,其他一切都用Clojure编写。我甚至会采取更积极的方法,只是将类设计为不同的,以便它们可以用Java编写,但实际上用Clojure编写它们并用Java重写它们,如果性能证明是一个问题

答案 1 :(得分:2)

Clojure在帮助开发人员完成简单的功能风格,并将突发工作隔离到狭窄区域方面做得很好。

我会在这里应用相同的指导原则:尽可能多地隔离java代码,就像在“纯函数式”中一样执行你的clojure代码。因此,考虑到你的约束,java岛将尽可能小,并且访问java岛将通过一小组clojure函数。

不确定这有多大帮助,但无论如何!