Подтвердить что ты не робот

Зачем нам нужен встраиваемый язык программирования, такой как Lua?

Каковы типичные случаи использования встраиваемого языка программирования? Правильно ли я понимаю, что такой язык должен быть встроен в некоторую программную среду и должен быть выполнен оттуда?

4b9b3361

Ответ 1

Поскольку вы отметили вопрос как "Lua", я дам вам ответ в контексте этого языка.

Введение

Lua написан на C (почти полностью совместим со стандартом C89, несовместимые функции могут быть легко отключены, если необходимо, с использованием компиляционных переключателей) и были разработаны для простой интеграции с кодом C. В контексте Lua "интегрированный" означает две разные, но связанные вещи:

  • Вы можете легко написать код C, который может быть использован как библиотека по коду Lua. Интеграция достигается либо статическим, либо динамическим связыванием кода C с кодом двигателя Lua. Связанная библиотека затем может быть упомянута в вашем коде Lua с использованием функции Lua require.

  • Двигатель Lua может быть легко встроен в приложение C, т.е. связан (снова статически или динамически) с кодом приложения C. Затем приложение C может взаимодействовать с кодом Lua, используя Lua интерфейс программирования приложений C (Lua C-API).

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

Преимущества встраивания двигателя Lua

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

Наличие части вашей логики кода, реализованной с использованием кода Lua, имеет несколько преимуществ:

  • Lua проще (менее сложно) учиться и использовать, чем C, и это намного более высокий уровень. Он поддерживает мощные абстракции, такие как закрытие функций и ориентация объектов (особым образом, используя таблицы Lua и метаметоды).

  • Lua - динамический язык: он не требует компиляции "off-line". Вы можете изменить текст вашего Lua script и все, что вам нужно для изменения поведения вашего приложения (никаких дополнительных шагов компиляции и ссылок не требуется). Это упрощает разработку и отладку приложений.

  • Lua - более безопасный язык, чем C: действительно очень сложно написать код Lua, демонстрирующий поведение undefined, как это предусмотрено в контексте C/С++. Если Lua script терпит неудачу, он терпит неудачу "громко". Кроме того, Lua поддерживает механизм исключения (хотя и с другим синтаксисом, чем С++), который может быть использован для более эффективного управления ошибками по сравнению с C.

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

  • Lua может "съесть свою собачью пищу", т.е. вы можете построить строку во время выполнения (даже в самой Lua), и если это действительный код Lua, ваша программа может выполнить его на лету. Это не часто наблюдается даже на других динамических языках (все же это не LISP, но он становится ближе и с гораздо более читаемым синтаксисом). Это позволяет сценариям Lua:

    • используют мощные методы метапрограммирования на основе текста, где код Lua может генерировать другой код Lua и выполнять его на лету;

    • реализовать языки, специфичные для домена (DSL), простым способом; Код Lua может загружать в исполняемый файл другой код Lua, созданный таким образом, чтобы отражать конкретный проблемный домен, в котором он используется (синтаксис Lua прост, но достаточно гибкий, чтобы допускать такие вещи);

    • можно легко использовать в качестве языка конфигурации: ваше приложение (написанное в сочетании с C и Lua) может использовать некоторые файлы lua в качестве файлов конфигурации без необходимости создавать ad-hoc-парсер для определенного файла конфигурации формат. Поэтому вам не нужно разбирать *.properties, *.csv, *.ini или любой другой формат, который вы бы выбрали, если бы у вас не было возможности использовать файлы Lua для этой цели.

  • Двигатель Lua имеет очень небольшой объем памяти (несколько сотен килобайт), упаковывая мощные возможности. С очень маленькими C-строками кода и связью файлов Lua вы можете создать полное приложение, которое потребует тысячи строк кода C в противном случае. Стандартный стандартный автономный интерпретатор Lua можно рассматривать как пример внедрения Lua в приложение C!

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

  • Малый объем памяти и легко настраиваемые источники C делают Lua идеальным кандидатом для его переноса на встроенные системы или небольшие микрокомпьютерные системы (микроконтроллеры и т.д.). Многие части стандартных распределений Lua можно отключить, уменьшив основной двигатель Lua в диапазоне ~ 100 кБ.

Ответ 2

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

  • Обеспечьте быструю итерацию развития.
  • Разрешить изменения кода во время выполнения, например перезагрузить ваш пользовательский интерфейс в World of Warcraft, который перезагружает все сценарии, не останавливая сам движок игры или не вывешивая вас.
  • Предоставьте отдельный API для вашего приложения, чтобы пользователи могли расширять его, не подвергая критическую часть вашей системы публике. Такие, как текстовые редакторы, предоставляющие макроязык, чтобы вы могли интегрировать пользовательское поведение, не предоставляя вам неограниченный доступ к внутренним функциям самого редактора.

Использование действительно довольно обширно и зависит от разработчика.