Лучший динамический язык для сопряжения с Java в проекте Java - PullRequest
5 голосов
/ 09 октября 2010

Какой динамический язык лучше всего подходит для сопряжения с Java в большом проекте Java?

Мы рассматриваем возможность использования динамического языка для тестов, контроллеров, сервисов. Некоторые варианты Groovy, JRuby или Jython. Каковы плюсы и минусы каждого за это? В идеале мы могли бы вызывать Java из динамического языка, а также вызывать динамический язык из Java.

РЕДАКТИРОВАТЬ: если это помогает, мы используем Hibernate с PicoContainer и Webwork.

Спасибо, Alex

Ответы [ 5 ]

9 голосов
/ 09 октября 2010

На самом деле есть три динамических языка, которые обеспечивают очень плавное взаимодействие с Java - scala, groovy и clojure.После этого я спросил бы вашу команду, на каком языке они предпочли бы работать, или попросил бы их попробовать прототип на каждом языке и посмотреть, что они думают.

Если эффективность команды вначале не важна, посмотрите, какую проблему пытается решить каждый язык:

  • Groovy будет очень непростым, но естественным для опытных разработчиков Javaи позволяет быструю разработку прототипов благодаря утилитарной типизации.
  • Scala позволит вам писать DSL, что делает его подходящим для фреймворков и инструментов, где вы хотите решить проблему на языке, более похожем на то, какопишите проблему.
  • Clojure собирается навязать концепции функционального программирования и неизменяемого состояния lisp и может быть очень естественным подходом к проблемам в ИИ, обработке естественного языка и т. д.Я пошел по пути поиска идеального языка для базовых проектов и обнаружил, что идеального языка не существует.Все языки, которые я упомянул выше, компилируются в собственный байт-код JVM и являются довольно надежными.Иногда вам просто нужно выбрать язык, который может быть не таким крутым, как другие, но поможет вам решить вашу проблему.
4 голосов
/ 11 октября 2010

Я рекомендую Groovy , главным образом потому, что он беспрепятственно взаимодействует с Java и является почти надмножеством Java, поэтому его очень легко освоить для разработчика Java. У меня нет абсолютно никаких доказательств, подтверждающих это, но, основываясь на слухах, догадках и личном опыте, я подозреваю, что сообщество Groovy намного больше, чем сообщество JRuby или Jython.

Между прочим, Groovy ++ слишком незрелый, чтобы рассматривать его для производственного использования, на мой взгляд.

2 голосов
/ 09 октября 2010

Ответ, конечно, будет зависеть от вопросов вкуса и гибкости.Если есть люди, у которых нет опыта работы с Ruby или Python, то у Groovy будет синтаксис, гораздо более близкий к Java (фактически это расширенный набор Java), и, следовательно, его будет намного проще продавать.

Я не могу говорить с JRuby, так как не использовал его.

Groovy дает вам, вероятно, самое простое взаимодействие с Java из трех перечисленных вами.Он также имеет очень хорошую библиотеку BDD в EasyB , которая мне очень нравится.С другой стороны, я не думаю, что функции или синтаксис Groovy действительно хорошо сочетаются друг с другом.Это может выглядеть как целая куча отдельных расширений Java.

Jython - это, конечно, Python, поэтому синтаксис другой, но также имеет всю согласованность Python.Взаимодействие очень хорошо на уровне сценариев, но, по крайней мере, раньше было немного неловко, если вы хотели писать скомпилированные классы в Jython, которые вы вызываете из Java.Другим основным преимуществом Groovy для меня является то, что у вас есть реальный REPL для взаимодействия с Java-проектом.

Я бы также упомянул Clojure, синтаксис еще более отличается, но взаимодействие с Java превосходно, вероятнолучше всего, и снова у вас есть ответ.С другой стороны, если у людей возникают проблемы с адаптацией к синтаксису Ruby или Python, вероятно, Lisp не подходит.

1 голос
/ 11 ноября 2010

Я бы предложил перейти с Jython . Синтаксис чистый, и вы получаете все дополнительные возможности / удобства, которые дает вам Python.

Например, если вы собираетесь использовать Groovy, вы в основном ограничены только тем, что даст вам Java. Jython добавил бы к этому и силу Python.

Если это поможет, я использовал Jython с Hibernate, SOAP, Corba и EJB, и это гораздо проще, чем делать то же самое с простой Java.

1 голос
/ 09 октября 2010

Clojure, вероятно, лучший динамический язык для контроллеров и сервисов. (в зависимости от того, что вы имеете в виду под «услугами».

Scala и Groovy ++ имеют лучшее java-взаимодействие, но они не динамические (ну, в Groovy ++ вы сами решаете, что набирается). Scala имеет внешний вид динамического языка. Scala имеет хорошие тестовые фреймворки http://www.scalatest.org/ и спецификации и AKKA очень зрелый для сервисов, а также имеет Java APIs

...