У меня есть интересный архитектурный вопрос относительно приложения, которое я разрабатываю, используя как Clojure, так и Java. Приложение включает в себя множество интенсивных параллельных задач обработки данных, которые необходимо организовать.
Здесь обоснование для смешивания как Clojure, так и Java:
- Java требуется для небольшого ЦП с интенсивным числовым кодом, где мне нужно оптимизировать алгоритмы для работы как можно быстрее на JVM. Clojure пока не может этого достичь, и такой код не будет очень идиоматичным в Clojure, потому что для повышения производительности алгоритмы требуют много изменяемых данных.
- Clojure - это (IMHO) гораздо лучше для организации общего потока приложения, с его превосходной поддержкой функционального программирования, интерактивного динамического развития в функциях REPL и concurrency.
Учитывая, что я использую оба языка - какую логику или принципы следует применять для определения разделительной линии между ними? В частности, меня интересует, как разработать API/интерфейс, который будет на правильном уровне, чтобы использовать преимущества сильных сторон обоих языков.