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

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

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

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

  1. Должна быть кроссплатформенной библиотекой, которая компилируется из исходного кода.
  2. Скрипты должны иметь возможность вызывать зарегистрированные функции на стороне кода
  3. Код должен быть в состоянии вызывать функции на стороне скрипта
  4. Быть использованным в кодовой базе C / C ++.
18.08.2008 23:05:04
9 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

3
19.08.2008 00:52:54

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

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

1
18.08.2008 23:11:01

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

1
18.08.2008 23:16:54

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

1
19.08.2008 00:56:27

AngelScript

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

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

1
19.08.2008 04:34:48

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

0
19.08.2008 04:39:59

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

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

0
21.08.2008 22:51:31

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

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

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

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

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

1
18.09.2008 14:16:47

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

0
24.09.2008 19:33:34