Clojure和Java之间的界限在哪里?

2022-09-04 03:37:21

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

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

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

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


答案 1

在不评论你对Java和Clojure的相对优势的看法的情况下,假设你至少做了一些微观基准测试来验证这个假设有一定的机会是正确的,那么正确的方法似乎是只把Java留给需要优化的部分。

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


答案 2

Clojure在帮助开发人员以简单的功能风格获得大部分角色以及将突变工作隔离到受限区域方面做得很好。

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

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


推荐