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

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

  •  08-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

Решение

Основываясь на моем собственном опыте:

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

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

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

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

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

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

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

Ангельский текст

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

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

Первоначальный вопрос описывал Tcl с точностью до буквы "T".

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

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

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

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

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

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

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

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

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