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

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

Вопрос

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

Также другие «процессы» не могут повлиять на какой -либо другой процесс.

Я рассматривал возможность использования Clojure и вызов компилятора интерпретатора/времени выполнения Clojure на коде Clojure, но время выполнения Clojure занимает намного больше времени, чем мне нужно. Кроме того, я не слишком взволнован использованием языка Clojure для этого проекта. Я думал более процедурным и подобным C.

Я рассматривал язык Олы Бини. http://ioke.org/index.html

Кроме того, я подумал о написании DSL в Scala? Или используя существующий DSL.

Обновлено: Похоже, Rhino - хороший пример встроенного языка.

http://www.mozilla.org/rhino/tutorial.html

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

Решение

Динамическая природа Groovy идеально подходит для написания DSL. Действительно, существует большое количество Groovy DSLS, внедренные веб -структурой Grails, и множество учебных пособий и книг, которые учат писать DSLS с Groovy.

Кроме того, синтаксис Groovy является почти суперсетом Java, поэтому его следует относительно легко поднять (по сравнению с Clojure). Вызов между Java и Groovy Code беспрепятственный, поэтому вы можете легко использовать все свои любимые классы JDK в Groovy Code.

Я был бы склонен избегать IOKE из -за ее незрелости, и для целей DSL я думаю, что динамически напечатанный язык, такой как Groovy или JavaScript, является лучшим выбором, чем Scala.

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

Как насчет JavaScript?

http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html

Он встроен в Java 6.

Я предлагаю Java. Это: хорошо известный, быстрый, легко интегрировать с Java, стабильной, статически напечатанной, легко мигрировать код и т. Д. И т. Д.

Проверить scripting.dev.java.net Для списка двигателей сценариев для внедрения других языков в ваши приложения Java. Обратите внимание, что некоторые из упомянутых языков теперь поставляются со своей собственной интеграцией JSR 223, поэтому в сторонней библиотеке нет необходимости использовать их.

Если вы хотите DSL, то вы не хотите встраивать существующий язык, вы хотите создать «конкретный домен». Для меня это означает гораздо больше, чем просто изменение некоторых ключевых слов и не использование скобок.

Например, сейчас я сейчас работаю над планированием телевидения. Когда мы создаем фальшивые направляющие данные для теста, мы всегда добавляем комментарий, который выглядит так (вырезать непосредственно из теста, над которым я работаю):

 * TIME:8.....30....9.....30....10....30....11....30....12....30....
 * 4FOX:____________[Spotlight.............][Jeopardy..]____________
 * 6CBS:[Heroes....][Heroes....][Heroes....]________________________
 * 8HMK:xx[A.River.Runs.Through.It....][Blades.Of.Glory...]_________

Если мне придется создать больше руководства, я напрямую интерпретирую эти комментарии как DSL (сделав их длинной строкой или строковой массивом вместо комментариев).

Это был бы подходящий DSL.

Если вы просто после внедрения гибкого языка, Groovy или Jruby созданы для этого, как и Beanshell.

На самом деле существует целый API, построенный вокруг заменяемых языков сценариев подключаемых модулей, так что вы сможете сбросить любой язык JVM, который вы хотите, и не немного изменить свой код.

Маленький интерпретатор CK*CK должен быть в порядке в соответствии с вашей спецификацией :)

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

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