Какой язык сценариев поддерживать в существующей кодовой базе?

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

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

Это единственные реальные требования;

  1. Должна быть кроссплатформенной библиотекой, которая компилируется из исходного кода.
  2. Скрипты должны иметь возможность вызывать зарегистрированные функции на стороне кода
  3. Код должен иметь возможность вызывать функции на стороне скрипта
  4. Быть использованным в кодовой базе C/C++.

9 ответов

Решение

Исходя из собственного опыта:

  • Python. ИМХО это хороший выбор. У нас довольно большая кодовая база с большим количеством пользователей, и им это очень нравится.
  • Рубин. Есть несколько действительно хороших приложений, таких как Google Sketchup, которые используют это. Я написал плагин Sketchup и подумал, что это довольно мило.
  • Tcl. Это встраиваемый язык сценариев старой школы по выбору, но в наши дни он не так популярен. Это высокое качество, они используют его на космическом телескопе Хаббла!
  • Lua. Я сделал с ним только детские вещи, но IIRC имеет только числовой тип с плавающей запятой, поэтому убедитесь, что это не проблема для данных, с которыми вы будете работать.

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

Я широко использовал Python для этой цели и никогда не сожалел об этом.

Я немного поиграл со Spidermonkey. Похоже, что это, по крайней мере, стоит посмотреть в вашей ситуации. Я слышал и хорошие новости о Луа. Основным аргументом в пользу использования языка сценариев javascript является то, что многие разработчики уже знают его и, вероятно, будут чувствовать себя более комфортно с самого начала, тогда как Lua, скорее всего, будет иметь некоторую кривизну обучения.

Я не совсем уверен, но я думаю, что spidermonkey ваши 4 требования.

Lua имеет самый простой C API для связывания с базой кода, который я когда-либо использовал. На самом деле я обычно быстро кручу привязки для него вручную. Принимая во внимание, что вы часто не подумаете об этом без генератора, подобного глотку для других. Кроме того, он обычно быстрее и легче, чем альтернативы, и сопрограммы - очень полезная функция, которую предоставляют немногие другие языки.

AngelScript

позволяет вызывать стандартные функции C и методы C++ без необходимости использования прокси-функций. Приложение просто регистрирует функции, объекты и методы, с которыми должны работать скрипты, и больше ничего не нужно делать с вашим кодом. Те же функции, которые используются внутри приложения, также могут использоваться механизмом сценариев, что устраняет необходимость дублирования функций.

Для автора сценариев язык сценариев следует широко известному синтаксису C/C++ (с небольшими изменениями), но без необходимости беспокоиться о указателях и утечках памяти.

Оригинальный вопрос описал Tcl до "Т".

Tcl изначально разрабатывался как встроенный язык сценариев. Он превратился в первоклассный динамический язык сам по себе, но все еще используется во всем мире в качестве встроенного языка. Он доступен под лицензией BSD, поэтому он настолько же бесплатен, насколько это возможно. Он также компилируется практически на любой современной платформе и во многих не очень современных. И он работает не только на настольных системах, но и для мобильных платформ.

Tcl выделяется в качестве "связующего" языка, где вы можете писать высокопроизводительные функции на C, но при этом пользоваться преимуществами языка сценариев для менее важных для приложения частей приложения.

Tcl также поставляется с первоклассным набором инструментов GUI (Tk), который, возможно, является одним из самых простых кроссплатформенных доступных наборов инструментов GUI. Он также очень хорошо взаимодействует с SQLite и другими базами данных, и уже довольно давно имеет встроенную поддержку юникода.

Если интерфейс сценариев будет доступен для ваших клиентов (вместо того, чтобы просто позволить вашим собственным инженерам работать на уровне сценариев), Tcl будет чрезвычайно легко выучить, так как всего существует всего 12 правил, которые управляют всем языком (как ткл 8.6). На самом деле, Tcl - это способ изобретать специфичные для предметной области языки, которые часто используются в качестве сценариев для конечных пользователей.

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

Вы, вероятно, могли бы использовать любой современный язык сценариев / байт-кодов.

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

Я думаю, что большинство людей, вероятно, упоминают язык сценариев, с которым они наиболее знакомы. С моей точки зрения, Tcl был разработан специально для взаимодействия с C, так что ваша проблемная область специально разработана для языка. Тем не менее, я уверен, что Python, Perl или Lua будут в порядке. Вы, вероятно, должны выбрать язык, который наиболее знаком вашей текущей команде, так как это сократит время обучения.

Другие вопросы по тегам