Вопрос

Я ищу альтернативу ECMAScript для работы в качестве языка сценариев для пользовательской логики приложения.Есть вещи, которые мне нравятся в ECMA, особенно синтаксис новой спецификации (например, AS3).

К сожалению, движок AS3 не имеет открытого исходного кода, чтобы его можно было интегрировать в проект.Мне нужен язык сценариев, предназначенный для объектно-ориентированного использования.

В частности, существует ли язык, который имеет:

  • Статически типизированные переменные (необязательно)
  • Классы, включая публичных/частных участников
  • Наследование, включая интерфейсы
  • Пакеты (опционально)
  • Чистый синтаксис
  • Должен иметь возможность взаимодействия в качестве внутреннего языка сценариев для приложения (например, Javascript для браузера), не может быть внешним системным вызовом.

Вещи, без которых я предпочел бы обойтись

  • Беспорядочная ECMA prototype объект

Какие языки, которые вы знаете, соответствуют этому профилю?Мне было трудно найти качественный язык сценариев, предназначенный для качественного объектно-ориентированного проектирования.

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

Решение

В Java лучшим вариантом ECMAScript (Javascript) является встраивание Носорог.Я не считаю наследование на основе прототипов убийственным решением, поскольку, проявив немного дисциплины, вы можете заставить его вести себя почти как наследование на основе классов.

Если вам нужно что-то, что очень тесно взаимодействует с Java, используйте классный.Если вам нужна совместимость с JVM, также изучите Джитон (питон на JVM), Джруби (Ruby на JVM) и Скала (функциональный язык на JVM).Если вас не волнует совместимость Java и JVM, посмотрите Рубин, Питон, и Эрланг. Кложур это диалект Лиспа на JVM.

Идя еще дальше, TCL (Tool Command Language) позволяет встраивать интерпретатор в код C/C++, существует множество встраиваемых интерпретаторов Lisp и Scheme и т. д.

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

Если вам нужен язык сценариев, работающий как ECMAScript, почему бы не использовать ECMAScript?Существует множество реализаций с открытым исходным кодом, просто взгляните на список на Википедия.

Я бы порекомендовал Python или Ruby.Ни один из них не похож на ECMA, но я выучил их после JavaScript, и освоить их было несложно.Кроме того, это более мощные языки, что делает их лучшей альтернативой использованию движка JavaScript внутри вашего приложения (Rhino для Java).

Питон

  • Обеспечивает чистый синтаксис (почти как английский while is not False:)
  • Множественное наследование (без интерфейсов)
  • Интерпретатор можно расширить с помощью C/C++ (возможно, использовать для ваших адаптеров, если необходимо)

Рубин

  • Синтаксис должен быть близок к английскому (unless условный, until петля)
  • Все является объектом
  • Поддерживает только одиночное наследование, но использует миксины для добавления функциональности.

Оба

  • Классы
  • Можно встроить в другое приложение
  • Частные участники
  • Пакеты

Луа - все, что вы хотите и даже больше, в ~100 КБ

Видеть этот страница для сравнения Lua и других упомянутых языков.

Хакс на Неко выглядит именно так, как вам нужно.Я не знаю, насколько nekovm встраиваемый, но у него открытый исходный код, так что с ним можно повозиться. http://haxe.org

А Рубин Интерпретатор также может быть встроен в программы на C, и некоторые могут считать его более объектно-ориентированным, чем Python.

Мы используем ECMAscript в качестве языка расширения для программного продукта, над которым я работаю, и он работает довольно хорошо.Поскольку язык является стандартным (и популярным), приятно иметь возможность указать нашим пользователям на обширную готовую документацию по этому языку.Мы создали наш собственный компилятор ECMAscript, который преобразует в байт-код для платформы, на которой мы работаем, но если бы мне пришлось делать это снова, я бы серьезно подумал о встраивании движка ECMAscript от Google V8 (на самом деле, я бы даже подумал о создании всего нашего приложение на нем).

Я бы выбрал что-то довольно распространенное, чтобы упростить ситуацию.Прочитав ваши требования, я бы порекомендовал Питон.На самом деле у него нет интерфейсов в стиле Java/C#, но они ему и не нужны.В остальном он должен хорошо подходить.

QtScript это ECMAScript.Вы не упоминаете, на чем написана основная часть вашего приложения, но я полагаю, что это не Qt, иначе вы бы уже знали о QtScript.

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