Я пишу графическое приложение на Java. В конце концов, я хотел бы создать язык сценариев, чтобы все было программируемым. Какую языковую библиотеку вы рекомендуете?
Вероятные подозреваемые:
Менее вероятные кандидаты:
Целевая аудитория, вероятно, не хардкорные программисты, поэтому предпочтительнее менее загадочный язык. Я предполагаю, что JavaScript для них более приемлем даже с его причудами только потому, что они видели его больше.
Lua кажется популярным в C / C++, но, по крайней мере, LuaJava требует дополнительных .dll / .so, что усложняет развертывание.
Обновлено: PhiLho написал, что существует Java-реализация Lua под названием Калуа.
Связанные вопросы:




если целевая аудитория «без навыков программирования…» выберите jython (питон), его легко освоить. (моя 7-летняя дочь выучила это очень быстро)
Брюс Экель написал главу о jython в «мышлении на java».
при опасности получить питон "против" проще, чем BASIC :-)
Lua ценится, помимо прочего, за простоту языка, что делает его легким в изучении. LuaJava использует исходную реализацию Lua, что делает ее полной, но, как вы указали, установка может быть сложной. Я знаю, по крайней мере, чистую реализацию Lua на Java: Калуа. Он не полный (среди прочего, отсутствует поддержка сопрограмм, но можно многое сделать и без них), но, возможно, уже пригоден для вашей цели. В отличие, скажем, от Groovy, это не должно увеличивать нагрузку на ваше приложение ...
Также существует BeanShell, преимущество которого в том, что он является полностью одобренным JSR, и поэтому, возможно, он с большей вероятностью останется.
Если мне нравится Java, и я использую Java, но я не хочу, чтобы мои пользователи знали, что они используют приложение Java, разве это все равно, что стыдиться уродливой подруги? Без прав?
Вы можете рассмотреть Jacl. Он основан на Tcl, который изначально был разработан как встраиваемый язык сценариев. Таким образом, можно утверждать, что он гораздо больше подходит для этой цели, чем другие языки сценариев, которые могли быть встроены.
В частности, если целевая аудитория - «не хардкорные программисты», Jacl делает прекрасный выбор. Умные люди (и особенно те, у кого нет предубеждений в программировании) могут легко освоить синтаксис Tcl за утро.
Если вы хотите сделать все возможное, вы можете использовать сценарии для платформы Java как определенный от JSR 223. Такой подход позволит приложению использовать любой язык, который имеет соответствующий скриптовый движок.
«Однако движок Mozilla Rhino для языка программирования JavaScript в настоящее время включен как функция в библиотеки JDK 6 и JRE 6». Значит ли это, что Rhino немного опережает всех остальных?
Теоретически да. Я еще не совсем уверен, что именно это произошло на самом деле.
Java 6 уже имеет javascript, доступный как язык сценариев JSR 223, из коробки.
Он поставляется с Rhino, который я тоже прокомментировал в ответе laz. Теоретически это официальное подтверждение.
Я только что прочитал Универсальный шаблон дизайна Стива Йегге. Статья посвящена гораздо более широкой теме, чем просто встроенные сценарии в приложение Java, но поскольку автор пишет приложение Java, которое позволяет создавать сценарии (с использованием Jython), есть важные моменты, которые я нашел интересными.
And JavaScript is one of the two best scripting languages on the planet, in the most correct sense of the term "scripting language": namely, languages that were designed specifically to be embedded in larger host systems and then used to manipulate or "script" objects in the host system. This is what JavaScript was designed to do. It's reasonably small with some optional extensions, it has a reasonably tight informal specification, and it has a carefully crafted interface for surfacing host-system objects transparently in JavaScript.
In contrast, Perl, Python and Ruby are huge sprawls, all trying (like C++ and Java) to be the best language for every task. The only other mainstream language out there that competes with JavaScript for scripting arbitrary host systems is Lua, famous for being the scripting language of choice for the game industry.
Я согласен с ним по поводу сужения до JavaScript и Lua.
Without the examples handy, all I can do is say that using JavaScript/Rhino (or Lua, once it became available on the JVM) might have made my life easier.
Лично я предпочитаю JavaScript на платформе Java. Население пользовательской базы больше. По словам Йегге, это «самый непонятый язык программирования в мире», но количество ресурсов, доступных на этом языке, является плюсом. Носорог кажется повзрослевшим зверьком.
В настоящее время я ищу библиотеку, которая позволит мне использовать объекты и методы Java из сценариев Lua.
Моей первой идеей было также использовать LuaJava, но поскольку я хочу, чтобы это работало в Linux, Mac и Windows, меня оттолкнул тот факт, что он использует скомпилированную библиотеку в дополнение к материалам Java. Доступны только предварительно скомпилированные двоичные файлы Windows, и я не эксперт по Mac, поэтому я попытался найти что-то на чистой Java и нашел это: http://sourceforge.net/projects/luaj
Кажется, он реализует C API, описанный в документе Lua, а также API от LuaJava.
Проект кажется действительно продвинутым, есть примеры вызовов Swing из Lua (!), И они работали на моем Linux. Но, как ни странно, списки рассылки, форумы и документация действительно скудны.
Я тоже собираюсь попробовать это на Windows и Mac. Надеюсь, что это работает.
Был упомянут Kahlua, но он нацелен только на J2ME, поэтому в нем отсутствуют некоторые части Lua. Я думаю, что есть проект под названием Mochalua, который преследует те же цели.
LuaJ, с другой стороны, поставляется в двух версиях, одна нацелена на J2SE, который реализует все (сопрограммы тоже), а вторая нацелена на J2ME, которой, как мне кажется, не хватает двух или трех библиотек (включая материал LuaJava, который требует отражения).
Вы можете использовать RelProxy - Java, он предоставляет настоящую и чистую Java в качестве языка сценариев, включая сценарии оболочки, созданные с помощью Java, благодаря его компиляции на лету. Поскольку «сценарий» Java выполняется совместно с программой запуска ClassLoader, интеграция проста.
Плюс: это в основном динамическая Java, поэтому ее очень легко прикрепить к программе Java. Минус: это в основном динамическая Java, поэтому это может быть не самый простой язык для изучения.