L'unico vantaggio che mi viene attualmente in mente è che puoi effettuare alcuni aggiornamenti di codifica, tramite Lua, senza dover ricompilare.
Non scartare l'utilità di questo così facilmente. Non capirai mai quanto sarai produttivo fino a quando non toglierai la fase di ricompilazione.
Il "flusso" è un concetto psicologico abbastanza ben compreso quando si tratta di lavorare. Il flusso è quella sensazione che provi quando ti concentri su un'attività, quando analizzi e risolvi i problemi quasi senza pensare, ecc. Sei al massimo della tua produttività quando "fluisci".
I tempi di compilazione rovinano tutto. È difficile rimanere nel flusso se hai anche una compilazione di 10 secondi tra il test di qualcosa.
Quando stai sviluppando un gameplay, quello che hai di solito è un "circuito chiuso". Hai un'idea, codifichi un test per vedere se funziona e poi lo provi. Se non funziona, lo modifichi e riprova. Il tempo di "code-to-test" è molto importante per mantenere il flusso. Ottenere il più piccolo possibile è fondamentale.
Ciò che Lua (o qualsiasi linguaggio di scripting incorporato) ti consente di fare è testare le modifiche, non solo senza "compilare", ma vivere nel gioco . A seconda di come costruisci il tuo gioco, puoi eseguire un comando che riavvierà il gioco con nuovi script senza dover interrompere e ricaricare i dati e così via. Non solo non è necessario ricompilare, non è necessario rieseguire.
La possibilità di farlo, dato il supporto adeguato del motore, può aumentare notevolmente la produttività.
Un altro grande vantaggio dello scripting è la capacità di non preoccuparsene. Se hai trascorso molto tempo a scrivere C ++, rimarrai stupito da quanto tempo passi in minutae. Dove viene eliminata la memoria. Dove questo viene liberato. Anche se stai usando shared_ptr
ovunque, solo l'atto di digitare tutti quei nomi di tipi di variabili ti rallenta.
In un linguaggio di scripting tipicamente dinamico, non devi preoccuparti. Lo scoping è semplice. Le funzioni sono oggetti di prima classe; non è necessario creare manualmente funzioni. È così facile fare alcune cose.
Ora questo ha degli aspetti negativi, se non sei un programmatore disciplinato. È molto facile usare i globi in Lua (anche se ci sono modi per impedirlo). Non preoccuparti significa che puoi essere molto sciatto quando scrivi il codice.
Ma ancora una volta, essere molto sciatto può avere dei vantaggi .
Un altro aspetto positivo di Lua è che rende un bel linguaggio di descrizione dei dati. Proprio come JSON è solo un file JavaScript che genera e restituisce un array / tabella, è possibile creare script Lua che restituiscono tabelle.
Questo è utile per i file di configurazione; Il formato tabella di Lua è molto meglio dei formati .ini. Il formato è ancora piuttosto pulito, compatto ed estensibile.
Oh, ed è ancora uno script di Lua, quindi può eseguire la logica effettiva. L'aspetto negativo di questo è ... beh, è uno script Lua, quindi può eseguire la logica effettiva . Questo potrebbe essere disastroso nel gioco, dal momento che l'utente potrebbe potenzialmente iniziare a rovinare tutto.
Ma in realtà, questo è facilmente risolto. Lua è progettato per essere incorporato, il che significa che l'isolamento è in realtà abbastanza semplice. In effetti, un nuovo stato Lua non fornisce nulla per impostazione predefinita; devi effettivamente fare qualcosa per esporre anche la più semplice delle librerie Lua standard. L'accesso ai file, l'accesso allo stato di gioco, ecc. È tutto opt-in, non opt-out. E ogni stato di Lua è separato l'uno dall'altro. Lo stato Lua che usi per gli script AI non deve essere lo stato Lua che usi per i file di configurazione.
In realtà ho del codice che ti permette di registrare molte librerie standard Lua, ma passa attraverso e rimuove tutti i file IO. In definitiva, il peggio che un file di configurazione basato su script Lua potrebbe fare è causare il crash del gioco immediatamente dopo averlo eseguito, esaurendolo nella memoria. E dal momento che non stai condividendo questi file di configurazione manualmente, non sarebbe molto divertente per un hacker.
Direi che il più grande svantaggio di qualsiasi linguaggio di scripting è il debug. La maggior parte dei linguaggi di scripting non ha debugger e Lua non è diversa. Lua ha tutti gli strumenti necessari per creare strumenti di debug. Ma in realtà non ha un debugger integrato. Devi metterne uno insieme. E ciò richiederà un ragionevole grado di lavoro.
Oppure puoi farlo con "debug printf". Dipende davvero da quanto codice Lua scrivi.