El único beneficio que puedo pensar actualmente es que puede hacer algunas actualizaciones de codificación, a través de Lua, sin tener que volver a compilar.
No descarte la utilidad de esto tan fácilmente. Usted no entiende lo productivo que será hasta que quitas el paso recompilación.
El "flujo" es un concepto psicológico bastante bien entendido cuando se trata de trabajar. El flujo es esa sensación que tienes cuando estás enfocado en una actividad, cuando estás analizando y resolviendo problemas casi sin pensar, etc. Eres más productivo cuando estás "fluyendo".
Los tiempos de compilación arruinan todo eso. Es difícil mantenerse en el flujo si tiene incluso una compilación de 10 segundos entre probar algo.
Cuando estás desarrollando un juego, lo que generalmente tienes es un "ciclo cerrado". Tienes una idea, codificas una prueba para ver si funciona y luego la pruebas. Si no funciona, modifíquelo e intente nuevamente. El tiempo de "código para probar" es muy importante para mantener el flujo. Conseguir que sea lo más pequeño posible es crucial.
Lo que Lua (o cualquier lenguaje de script incorporado) le permite hacer es probar los cambios, no solo sin "compilar", sino vivir en el juego . Dependiendo de cómo construyas tu juego, puedes ejecutar un comando que reiniciará el juego con nuevos scripts sin tener que parar y volver a cargar datos, etc. No solo no tiene que volver a compilar, no tiene que volver a ejecutarlo.
La capacidad de hacer esto, dado el soporte adecuado del motor, puede aumentar dramáticamente la productividad.
Otro beneficio importante de las secuencias de comandos es la capacidad de no importarles. Si ha pasado mucho tiempo escribiendo C ++, se sorprenderá de cuánto tiempo pasa más de minutos. Donde se borra la memoria. Donde esto se libera. Incluso si está usando en shared_ptr
todas partes, solo el hecho de escribir todos esos nombres de tipo variable lo ralentiza.
En un lenguaje de secuencias de comandos de tipo dinámico, no tiene que preocuparse. El alcance es simple. Las funciones son objetos de primera clase; no tienes que construir functors manualmente. Es muy fácil hacer algunas cosas.
Ahora eso tiene aspectos negativos, si no eres un programador disciplinado. Es muy fácil usar globals en Lua (aunque hay formas de evitarlo). No preocuparse significa que puedes ser muy descuidado cuando codificas.
Pero, de nuevo, ser muy descuidado puede tener ventajas .
Otra ventaja de Lua es que es un buen lenguaje de descripción de datos. Al igual que JSON es solo un archivo JavaScript que crea y devuelve una matriz / tabla, puede crear scripts Lua que devuelvan tablas.
Esto es útil para los archivos de configuración; El formato de tabla de Lua es mucho mejor que los formatos .ini. El formato sigue siendo bastante limpio, compacto y extensible.
Ah, y sigue siendo un script Lua, por lo que puede realizar una lógica real. La desventaja de eso es ... bueno, es un script Lua, por lo que puede realizar una lógica real . Eso podría ser desastroso en el juego, ya que el usuario podría comenzar a arruinar las cosas.
Pero en realidad, esto es fácil de resolver. Lua está diseñado para incrustar, lo que significa que el aislamiento es bastante fácil. De hecho, un nuevo estado de Lua no proporciona nada por defecto; tienes que hacer algo para exponer incluso la más básica de las bibliotecas estándar de Lua. El acceso a los archivos, el acceso al estado del juego, etc., está habilitado, no inhabilitado. Y cada estado Lua está separado el uno del otro. El estado Lua que usa para los scripts AI no tiene que ser el estado Lua que usa para los archivos de configuración.
De hecho, tengo un código que le permite registrar muchas bibliotecas estándar de Lua, pero revisa y elimina todos los archivos IO. En última instancia, lo peor que podría hacer un archivo de configuración basado en un script Lua es hacer que su juego se bloquee inmediatamente al ejecutarlo, quedando sin memoria. Y dado que no está compartiendo estos archivos de configuración manualmente, eso no sería muy divertido para un hacker.
Yo diría que el mayor inconveniente de cualquier lenguaje de script es la depuración. La mayoría de los lenguajes de script no tienen depuradores, y Lua no es diferente. Lua tiene todas las herramientas que uno necesitaría para construir herramientas de depuración. Pero en realidad no tiene un depurador incorporado. Tienes que armar uno. Y eso requerirá un grado razonable de trabajo.
O puede hacerlo con "depuración printf". Realmente depende de cuánto código Lua escribas.