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



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

924   2  

2 ответов:

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

Введение

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

  2. Механизм Lua может быть легко встроен в приложение на языке Си, т. е. связан (опять же статически или динамически) с кодом приложения на языке Си. Затем приложение C может взаимодействовать с кодом Lua с помощью интерфейса программирования приложений Lua C (Lua C-API) .

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

Преимущества встраивания Lua-движка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.