Java:Язык сценариев (макрос) для встраивания в настольное приложение Java

StackOverflow https://stackoverflow.com/questions/143388

Вопрос

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

Вероятными подозреваемыми являются:

Менее вероятными кандидатами являются:

Целевая аудитория, вероятно, не является заядлыми программистами, поэтому предпочтительнее менее заумный язык.Я предполагаю, что JavaScript для них более приемлем, даже с его причудами, просто потому, что они видели его больше.

Lua, похоже, популярен в C / C ++, но, по крайней мере, LuaJava требует дополнительной библиотеки dll /.so, что усложняет развертывание.

Редактировать:Филхо написал, что существует Java-реализация Lua под названием калуа.


Сопутствующие вопросы:

Это было полезно?

Решение 6

Я только что прочитал книгу Стива Йегге Универсальный Шаблон дизайна.Статья посвящена гораздо более широкой теме, чем просто встроенные сценарии в Java-приложении, но поскольку автор пишет Java-приложение, которое допускает создание сценариев (с использованием Jython), есть проницательные моменты, которые показались мне интересными.

А JavaScript - один из двух лучших скриптовых языков на планете, в самом правильном смысле этого термина "язык сценариев":а именно, языки, которые были разработаны специально для встраивания в более крупные хост-системы, а затем использовались для манипулирования объектами или "написания сценариев" в хост-системе.Это то, для чего был разработан JavaScript .Он достаточно мал с некоторыми дополнительными расширениями, он имеет достаточно жесткую неформальную спецификацию и тщательно проработанный интерфейс для прозрачного отображения объектов хост-системы на JavaScript.

Напротив, Perl, Python и Ruby - это огромные разрастания, все они пытаются (как C ++ и Java) быть лучшим языком для каждой задачи.Единственный другой распространенный язык, который конкурирует с JavaScript для написания сценариев произвольных хост-систем, - это Lua, известный тем, что он является предпочтительным языком сценариев для игровой индустрии.

Я согласен с ним в том, что нужно ограничиться JavaScript и Lua.

Без подручных примеров все, что я могу сделать, это сказать, что использование JavaScript / Rhino (или Lua, как только он стал доступен в JVM), возможно, сделало мою жизнь проще.

Лично я предпочитаю JavaScript на платформе Java.Численность пользовательской базы больше.Как выразился Егге, это "самый непонятый язык программирования в мире", но количество ресурсов, доступных на этом языке, является плюсом. Носорог кажется взрослому зверю.

Другие советы

если целевая аудитория "не имеет навыков программирования ....", выберите jython (python), его легко освоить.(моя 7-летняя дочь выучила это очень быстро)

Брюс Экель написал главу с jython в книге "мышление на Java".

при опасности получить "отрицательный результат" python проще, чем БАЗОВЫЙ :-)

Lua ценится, помимо прочего, за простоту языка, что облегчает его изучение.LuaJava использует оригинальную реализацию Lua, что делает ее завершенной, но, по мере того как вы указываете на нее, установка может быть сложной.Я знаю, по крайней мере, чистую Java-реализацию Lua: Калуа.Он не является полным (помимо прочего, отсутствует поддержка сопрограмм, но без них можно многое сделать), но, возможно, уже пригоден для достижения вашей цели.
В отличие, скажем, от Groovy, это не должно добавлять больших накладных расходов вашему приложению...

Если бы вы хотели выложиться на полную, вы могли бы использовать сценарии для платформы Java следующим образом определенный автор: JSR 223.Использование такого подхода позволило бы приложению использовать любой язык, который имеет соответствующий скриптовый движок.

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

http://www.beanshell.org/

Java 6 уже имеет javascript, доступный в виде языка сценариев JSR 223, "из коробки".

В настоящее время я ищу библиотеку, которая позволит мне использовать Java-объекты и методы из Lua-скриптов.

Моей первой идеей было тоже использовать LuaJava, но поскольку я хочу, чтобы это работало в Linux, Mac и Windows, меня отпугнул тот факт, что в дополнение к Java-материалам он использует скомпилированную библиотеку.Доступны только предварительно скомпилированные двоичные файлы Windows, и я не эксперт по Mac, поэтому я попытался найти что-нибудь на чистой Java, и я нашел это: http://sourceforge.net/projects/luaj

Похоже, он реализует C API, описанный в Lua doc, а также API из LuaJava.

Проект кажется действительно продвинутым, есть примеры Swing-вызовов из Lua (!), и они работали на моем Linux-боксе.Но, как ни странно, списков рассылки, форумов и документации действительно мало.

Я собираюсь попробовать это и на Windows, и на Mac.Надеюсь, это сработает.

Упоминался Kahlua, но он нацелен только на J2ME, вот почему в нем отсутствуют некоторые части Lua.Я думаю, что есть проект под названием Mochalua, который преследует те же цели.

LuaJ, с другой стороны, поставляется в двух версиях, одна нацелена на J2SE, которая реализует все (сопрограммы тоже), и одна нацелена на J2ME, в которой, я думаю, не хватает 2 или 3 библиотек (включая материал LuaJava, который нуждается в осмыслении).

Вы могли бы подумать Жакл.Он основан на Tcl, который изначально был разработан как встраиваемый скриптовый язык.Таким образом, можно было бы утверждать, что он гораздо больше подходит для этой цели, чем другие скриптовые языки, которые имели возможность быть встроенными.

Особенно, если целевая аудитория - "не заядлые программисты", Jacl делает прекрасный выбор.Умные люди (и особенно те, у кого нет укоренившихся предрассудков в программировании) могут легко освоить синтаксис Tcl за одно утро.

Вы можете использовать Релпрокси - Java, он предоставляет настоящую и чистую Java в качестве языка сценариев, включая сценарии оболочки, созданные на Java, благодаря своей компиляции "на лету".Поскольку Java-"скрипт" выполняется совместно с загрузчиком классов Launcher, интеграция проста.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top