我有一個有趣的關於我正在使用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