Какой язык сценариев поддерживать в существующей кодовой базе? - PullRequest
6 голосов
/ 19 августа 2008

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

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

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

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

Ответы [ 9 ]

3 голосов
/ 19 августа 2008

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

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

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

1 голос
/ 18 сентября 2008

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

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

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

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

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

1 голос
/ 19 августа 2008

AngelScript

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

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

1 голос
/ 19 августа 2008

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

1 голос
/ 19 августа 2008

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

1 голос
/ 19 августа 2008

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

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

0 голосов
/ 24 сентября 2008

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

0 голосов
/ 22 августа 2008

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

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

0 голосов
/ 19 августа 2008

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

...