Плагин Eclipse для Clojure против часовой стрелки написан на смешанных Java и Clojure.Он пока использует clojure.osgi 1.2.10.
Так что это живое доказательство того, что это возможно.И AFAIK, Против часовой стрелки успешно используется сотнями людей.
Есть некоторые ограничения, хотя: пространство имен Clojure является «глобальным» для некоторого «корневого загрузчика классов».Например, если вы упаковываете Clojure в пакет с именем, скажем, myapp.clojure, у вас, вероятно, будет куча других пакетов, для которых потребуется myapp.clojure.Скажем, например, myapp.bundle1, myapp.bundle2.Когда вы это сделаете и из каждого пакета загрузите в память (потребуете) пространства имен пакетов, каждое из них будет загружено из правого ClassLoader (пространства имен myapp.bundle1 будут загружены в контекстный загрузчик классов myapp.bundle1, иПространства имен myapp.bundle2 будут загружены в контекстный загрузчик классов myapp.bundle2).Это здорово, потому что это позволяет нормально работать с Java.
Но просто помните, что в итоге пространства имен, загруженные из bundle1 и bundle2, будут удерживаться "глобальным миром пространства имен" в bundle myapp.clojure.
Если честно, это еще не доказало проблему для против часовой стрелки.Потому что внутри одной и той же возможности наличие пакетов в одном экземпляре Clojure почти нормально.
Потенциальные недостатки:
- , если вы используете сторонние библиотеки, например tools.logging,вы не сможете иметь пространства имен в myapp.bundle1, зависящие от версии X tools.logging, и в то же время myapp.bundle2 зависят от версии Y tools.logging.То есть внутри вашей функции, где у вас есть совместное замыкание через пакет myapp.clojure, вы работаете так, как если бы правила OSGi не применялись, например, как работают веб-приложения.
- не масштабируется при массовом применении: есликаждая функция Eclipse должна была упаковать свою собственную версию Clojure, это было бы пустой тратой памяти.Но этот недостаток скорее теоретический, чем практический.И эта проблема может быть решена позже, когда возникнет необходимость в ней.
Обратите внимание, что для продукта Eclipse RCP, в отличие от плагина Eclipse, эти недостатки исчезают.
Если вы хотите увидеть, как против часовой стрелки перепаковал clojure и использует clojure.osgi, вы можете посмотреть его исходный код:
http://github.com/laurentpetit/ccw.clojure.git http://github.com/laurentpetit/ccw.git
HTH,
- Лоран