Единственное преимущество, которое я могу себе представить, это то, что вы можете делать некоторые обновления кода через Lua без перекомпиляции.
Не стоит сбрасывать со счетов полезность этого так легко. Вы никогда не поймете, насколько продуктивным вы будете, пока не уберете этап перекомпиляции.
«Поток» довольно хорошо понимается психологическая концепция , когда речь идет о работе. Поток - это то чувство, которое возникает у вас, когда вы сосредоточены на какой-либо деятельности, когда вы анализируете и решаете проблемы почти не задумываясь и т. Д. Вы наиболее продуктивны, когда вы «течете».
Время компиляции все это испортит. Трудно оставаться в потоке, если у вас есть хотя бы 10-секундная компиляция между тестированием чего-либо.
Когда вы разрабатываете геймплей, то, что у вас обычно бывает, - это «тесная петля». У вас есть идея, вы пишете код теста, чтобы увидеть, работает ли он, а затем вы пробуете его. Если это не работает, измените его и попробуйте снова. Время «кода для тестирования» очень важно для поддержания потока. Получение как можно меньшего размера имеет решающее значение.
Lua (или любой встроенный язык сценариев) позволяет вам тестировать изменения не только без «компиляции», но и вживую в игру . В зависимости от того, как вы строите свою игру, вы можете запустить команду, которая перезапустит игру с новыми сценариями, не останавливая и не перезагружая данные и так далее. Вам не только не нужно перекомпилировать, вам не нужно перезапускать.
Возможность сделать это, при условии правильной поддержки двигателя, может значительно увеличить производительность.
Еще одним важным преимуществом сценариев является возможность просто не заботиться. Если вы потратили много времени на написание C ++, вы были бы поражены тем, сколько времени вы тратите на мелочи. Где память удаляется. Где это освобождается. Даже если вы используете shared_ptr
повсеместно, простое введение всех этих имен типов переменных замедляет работу.
На языке сценариев с динамической типизацией вам не нужно беспокоиться. Скоупинг прост. Функции являются первоклассными объектами; Вам не нужно создавать функторы вручную. Просто так легко делать некоторые вещи.
Теперь это имеет негативы, если вы не дисциплинированный программист. В Lua очень легко использовать глобальные переменные (хотя есть способы предотвратить это). Не заботиться означает, что вы можете быть очень неряшливым при кодировании.
Но опять же, быть очень небрежным может иметь преимущества .
Еще один плюс Lua в том, что он делает хороший язык описания данных. Так же, как JSON - это просто файл JavaScript, который создает и возвращает массив / таблицу, вы можете создавать сценарии Lua, которые возвращают таблицы.
Это полезно для файлов конфигурации; Формат таблицы Lua намного лучше, чем форматы .ini. Формат все еще довольно чистый, компактный и расширяемый.
О, и это все еще сценарий Lua, поэтому он может выполнять реальную логику. Недостатком этого является ... ну, это скрипт Lua, поэтому он может выполнять реальную логику . Это может иметь катастрофические последствия в игре, так как пользователь потенциально может начать все портить.
Но на самом деле с этим легко справиться. Lua предназначен для встраивания, что означает, что изоляция на самом деле довольно проста. Действительно, новое состояние Lua по умолчанию ничего не дает ; Вы должны сделать что-то, чтобы показать даже самые простые из стандартных библиотек Lua. Доступ к файлам, доступ к игровому состоянию и т. Д. - все включено, а не отказано. И каждое состояние Lua отделено друг от друга. Состояние Lua, которое вы используете для AI-сценариев, не обязательно должно быть состоянием Lua, которое вы используете для конфигурационных файлов.
На самом деле у меня есть код, который позволяет вам зарегистрировать много стандартных библиотек Lua, но проходит и удаляет все файловые операции ввода-вывода. В конечном счете, худшее, что может сделать файл конфигурации на основе сценариев Lua, - это вызвать сбой вашей игры сразу после ее запуска, из-за нехватки памяти. А поскольку вы не делитесь этими конфигурационными файлами вручную, для хакера это не доставит большого удовольствия.
Я бы сказал, что самым большим недостатком любого языка сценариев является отладка. Большинство скриптовых языков не имеют отладчиков, и Lua ничем не отличается. У Lua есть все инструменты, необходимые для создания инструментов отладки. Но на самом деле он не имеет встроенного отладчика. Вы должны положить один вместе. И это потребует разумной степени работы.
Или вы можете сделать это с помощью «printf debugging». Это действительно зависит от того, сколько кода Lua вы пишете.