O único benefício que posso pensar atualmente é que você pode fazer algumas atualizações de codificação, via Lua, sem precisar recompilar.
Não descarte a utilidade disso tão facilmente. Você nunca entenderá o quão produtivo será até retirar a etapa de recompilação.
O "fluxo" é um conceito psicológico bastante bem compreendido quando se trata de trabalho. O fluxo é aquele sentimento que você sente quando se concentra em uma atividade, quando está analisando e resolvendo problemas quase sem pensar, etc. Você está mais produtivo quando está "fluindo".
Os tempos de compilação estragam tudo isso. É difícil permanecer no fluxo se você tiver uma compilação de 10 segundos entre testar algo.
Quando você está desenvolvendo uma jogabilidade, o que você costuma ter é um "loop apertado". Você tem uma ideia, codifica um teste para ver se funciona e depois tenta. Se não funcionar, modifique-o e tente novamente. O tempo de "código para teste" é muito importante para manter o fluxo. Obter o menor tamanho possível é crucial.
O que Lua (ou qualquer linguagem de script incorporada) permite que você faça é testar as alterações, não apenas sem "compilar", mas viver no jogo . Dependendo de como você constrói seu jogo, você pode executar um comando que reiniciará o jogo com novos scripts sem precisar parar e recarregar dados e assim por diante. Além de não precisar recompilar, você não precisa executar novamente.
A capacidade de fazer isso, com o suporte adequado do mecanismo, pode aumentar drasticamente a produtividade.
Outro grande benefício do script é a capacidade de não se importar. Se você passou muito tempo escrevendo C ++, ficaria surpreso com quanto tempo gasta em minutos. Onde a memória é apagada. Onde isso é liberado. Mesmo se você estiver usando em shared_ptr
qualquer lugar, apenas o ato de digitar todos esses nomes de tipos de variáveis atrasará você.
Em uma linguagem de script de tipo dinâmico, você não precisa se preocupar. O escopo é simples. Funções são objetos de primeira classe; você não precisa criar functors manualmente. É tão fácil fazer algumas coisas.
Agora isso tem negativos, se você não é um programador disciplinado. É muito fácil usar globais em Lua (embora haja maneiras de evitar isso). Não se importar significa que você pode ser muito desleixado ao codificar.
Mas, novamente, ser muito desleixado pode ter vantagens .
Outra vantagem do Lua é que ele cria uma boa linguagem de descrição de dados. Assim como o JSON é apenas um arquivo JavaScript que cria e retorna uma matriz / tabela, você pode criar scripts Lua que retornam tabelas.
Isso é útil para arquivos de configuração; O formato da tabela de Lua é muito melhor que o formato .ini. O formato ainda é bastante limpo, compacto e extensível.
Ah, e ainda é um script Lua, para que ele possa executar a lógica real. A desvantagem disso é ... bem, é um script Lua, para que ele possa executar a lógica real . Isso pode ser desastroso no jogo, já que o usuário pode começar a estragar tudo.
Mas, na verdade, isso é facilmente resolvido. Lua foi projetado para incorporação, o que significa que o isolamento é realmente muito fácil. De fato, um novo estado Lua não fornece nada por padrão; você realmente precisa fazer algo para expor até mesmo as bibliotecas Lua mais básicas. O acesso a arquivos, o estado do jogo, etc., é opcional, não opcional. E cada estado Lua é separado um do outro. O estado Lua que você usa para scripts AI não precisa ser o estado Lua usado para arquivos de configuração.
Na verdade, eu tenho um código que permite registrar muitas bibliotecas padrão Lua, mas analisa e remove todas as E / S de arquivos. Por fim, o pior que um arquivo de configuração baseado em script Lua poderia fazer é causar o travamento do seu jogo imediatamente após a execução, ficando sem memória. E como você não está compartilhando esses arquivos de configuração manualmente, isso não seria muito divertido para um hacker.
Eu diria que a maior desvantagem de qualquer linguagem de script é a depuração. A maioria das linguagens de script não possui depuradores, e Lua não é diferente. Lua possui todas as ferramentas necessárias para criar ferramentas de depuração. Mas, na verdade, ele não possui um depurador embutido. Você tem que montar um. E isso exigirá um grau razoável de trabalho.
Ou você pode fazer o devido com "printf debugging". Realmente depende de quanto código Lua você escreve.