Является ли смешивание Clojure с Python хорошей идеей?
Я работаю над большим проектом, который включает в себя много веб-интерфейс и работу ИИ. Мне очень удобно с Python, хотя моя единственная забота-параллельное программирование и масштабирование этого проекта, чтобы он работал на кластерах. Таким образом, Clojure для AI и поддержка вызовов функций Java и вызывают параллельное программирование.
Это хорошая идея, чтобы сделать всю работу веб-api с Python и позволить Clojure позаботиться о большей части параллельной работы AI?
изменить: Позвольте мне подробно объяснить это взаимодействие. Python будет делать большую часть грязной работы (очистка, обработка изображений, улучшение базы данных и все такое.) Clojure, если это возможно, будет иметь дело с базой данных или получать данные из Python. Я за исключением чего-то CPython вроде связи с Python и Clojure.
Edit2: Может быть, глупый вопрос, но это довольно долгосрочный проект, который будет развиваться совсем немного и идти под несколькими итераций, это Clojure языком здесь остаться? Он достаточно портативный?
4 ответов
Я построил смущающе параллельное приложение для хруста чисел с бэкэндом в Clojure (на произвольном количестве машин) и интерфейсом в Ruby on Rails. Мне не особенно нравится RoR, но в то время это был проект с нулевым бюджетом, и у нас был программист Rails, который хотел работать бесплатно.
часть Clojure состояла из (грубо) контроллера, узлов хруста числа и сервера, реализующего API JSON-over-HTTP, который был интерфейсом к рельсам веб-приложение. Узлы Clojure использовали RabbitMQ для разговора друг с другом. Поскольку мы определили четкие API между различными частями приложения, было легко позже переписать интерфейс в Clojure (потому что это лучше соответствовало нашим потребностям).
Если вы работаете над распределенным проектом с длительным сроком службы и непрерывными усилиями по разработке, имеет смысл разработать приложение как ряд отдельных модулей, которые взаимодействуют через четко определенные API (json, bson,... через протокол AMQP, HTTP. ,.. или база данных). Это означает, что вы можете быстро начать использовать язык, который вам удобен, и переписать части на другом языке на более позднем этапе, если это необходимо.
Я не вижу большой проблемы с использованием Python для веб-приложений и Clojure для одновременного хруста данных / кода back end. Я предполагаю, что вы будете использовать что-то вроде JSON через http для связи между ними, что должно работать нормально.
Я бы лично использовал Clojure для обоих (используя, например, отличный Нуар как веб-фреймворк и корма для базы данных.), но если, как вы говорите, ваш опыт в основном в Python, то это, вероятно, делает смысл придерживаться Python с точки зрения производительности (по крайней мере, в краткосрочной перспективе).
чтобы ответить на вопросы, касающиеся будущего Clojure:
- это определенно здесь, чтобы остаться. Он имеет очень активное сообщество и, вероятно, является одним из самых "горячих" языков JVM прямо сейчас (наряду с Scala и Groovy). Кажется, что это особенно хорошо в пространстве больших данных / аналитики
- Clojure имеет особое преимущество с точки зрения поддержки библиотеки, поскольку он может легко использовать любые библиотеки Java. Это огромный преимущество для нового langauge с практической точки зрения, поскольку он сразу решает то, что обычно является одной из самых больших проблем в получении новой экосистемы языка с земли.
- Clojure-это новый язык, который все еще претерпевает довольно много развития. Если вы решите использовать Clojure, вы должны знать, что вам нужно будет приложить некоторые усилия, чтобы оставаться в курсе и поддерживать свой код до последние в Clojure версии. Я лично не нашел это проблемой, но это может стать сюрпризом для людей, привыкших к более "стабильным" языкам, таким как Java.
- Clojure очень портативный - он будет в основном работать в любом месте, где вы можете получить разумно современный JVM, который в настоящее время почти везде.
Если вы можете построить обе стороны для использования данных и чистых(ish) функций для связи, то это должно работать очень хорошо. обертывание функций clojure в веб-службах, которые принимают и повторяют JSON (или более предпочтительно формы clojure), должно сделать их доступными для вашего интерфейса на основе Python, не будет дополнительной суеты.
конечно, веселее писать его в Clojure на всем протяжении. ;)
Если это долгосрочный проект, чем построение чистого функционала (как в takes и возвращает значения) интерфейсы, которые обмениваются данными, становятся еще более важными, потому что это даст вам возможность самостоятельно разрабатывать компоненты.
в таких сценариях мне лично нравится начинать в приведенной ниже последовательности.
- разделите систему на подсистемы с "очень четким" определением того, что делает каждая система, и это определение должно следовать принципу "сделайте одну вещь и держите ее простой". На этой стадии не думайте о языке и т. д.
- выберите платформу (не языки), на которой будут работать эти подсистемы. Пример: JVM, Python VM, NodeJs, CLR (Mono), другие виртуальные машины. Попробуйте выбрать несколько платформ или если можно только один, что делает жизнь проще в плане сложности.
- выбрать язык для программирования этих платформ. Это очень субъективно, но для JVM вы можете пойти с Clojure или Jython (если Вам нравятся динамические языки, как я).
Что касается Clojure future, это язык, разработанный "сообществом удивительных программистов", а не какой-то корпорацией. Я надеюсь, что это снимает ваши сомнения относительно" долгосрочной " озабоченности Clojure. Кстати, Clojure-это LISP, поэтому вы можете изменить язык так, как хотите, и исправить все сами, даже если кто-то не сделает этого за вас.