Ответ 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 кБ.