Perché utilizziamo gli script in fase di sviluppo?


67

Nel mio progetto attuale, gli script Lua sono chiamati dalle funzioni C ++ sul lato server. Successivamente, gli script richiamano ancora le funzioni C ++ ancora in quella soluzione. Perché dovremmo fare queste cose e non chiamare direttamente la funzione C ++? Quali sono le situazioni in cui sono necessari gli script?

Risposte:


73

Gli script vengono generalmente compilati in fase di esecuzione , mentre la lingua host verrà compilata in fase di compilazione. Ciò significa che non è necessario ricompilare se lo script cambia. La ricompilazione di un gioco completo può richiedere da minuti a ore, il che implica un notevole successo in termini di produttività.

Di solito, il codice critico o il codice back-end non verranno copiati. Questo codice dovrebbe essere veloce e spesso la gestione della memoria è cruciale.
Nei giochi, la logica e la configurazione del gioco sono generalmente contenute nei file di script. Questi script possono essere facilmente aggiornati da non programmatori (come il designer) per modificare il gameplay. I linguaggi di script sono facili e agiscono in modo tollerante a tale scopo.

Spesso, un linguaggio di script viene utilizzato anche per eseguire script in tempo reale . Questo è utile per modificare alcuni elementi di gioco o anche per il debug. Molti giochi offrono una console per questo scopo (principalmente interno).

È molto probabile che tu crei un gioco usando un motore di gioco esistente, semplicemente tramite script. Il livello del motore di gioco è quindi completamente disaccoppiato dal livello della logica di gioco . I motori moderni di solito possono essere utilizzati per creare giochi FPS o RTS facilmente come questo, ma non è possibile per alcun genere. Un MMO richiederebbe probabilmente un altro tipo di motore.

Quindi la linea di fondo è il disaccoppiamento. I vantaggi sopra elencati spesso superano il lavoro extra per creare o integrare un linguaggio di scripting.


7
+1 per dire che gli script sono in genere più facili da aggiornare da parte di non programmatori. I designer non sono sempre programmatori e non devono esserlo.
Oak,

19
Mi sento come se mi stessi ripetendo in ogni domanda sullo scripting - se il tuo flusso di lavoro richiede programmatori non programmatori (che include lo scripting), ti morderà nel culo più tardi. I designer non sono sempre programmatori, ma non appena scrivono script non banali (ad es. Non appena provano a definire una funzione o usano un ciclo) fanno finta di esserlo. Se non hanno una formazione in programmazione, questo finirà in lacrime e tempo perso per tutti.

5
Joe - questo non invalida l'argomento, significa solo che devi decidere dove separare le "cose ​​di programmazione" dalle "cose ​​di progettazione" e la linea di divisione sarà diversa in base all'esperienza tecnica dei tuoi progettisti (o alla mancanza esso).
Ian Schreiber,

3
Sono abbastanza sicuro che qualsiasi designer che si rispetti sia ben istruito in almeno una lingua. Per chiarire un po 'le cose, vorrei sfumare il termine "non programmatore" in quanto qualcuno la cui professione non è quella di un ingegnere del software. Mi dispiace usare il termine, grazie a Joe vedo che è ambiguo. Credo che ci sia una vasta gamma di programmatori, da quelli che scrivono semplici XML all'assemblaggio hardcore all'elaborazione di segnali pesanti in matematica. Spero che questo risolva il problema della dualità "non programmatore".
Nef,

8
Non ho sentito nessuno suggerire che i designer dovrebbero scrivere sceneggiature complesse e mission-critical per la produzione. Tuttavia, i progettisti con una modesta comprensione della programmazione potrebbero ancora modificare alcuni script in modo sperimentale (e quindi distribuirli ai programmatori effettivi). Potrebbero certamente scrivere semplici script ad hoc da una console in fase di esecuzione per facilitare i propri test. Immagino che i progettisti potrebbero voler sfruttare gli script di base per prototipare nuovi design di schermi (anche se non sono altro che modelli semi-funzionali e interattivi). È necessario scrivere un sacco di codice non di produzione.
Mike Strobel,

38

Hai fatto la domanda sbagliata. La vera domanda, penso, è perché tolleriamo linguaggi "non scripting" come C, C ++, Java e così via? E la risposta è una ragione: le prestazioni. (E forse inerzia, ma quell'inerzia è presente a causa delle prestazioni, e chiunque sappia scrivere bene C / C ++ / Java può scrivere almeno passabile Ruby / Python / Lua / JavaScript.)

Usiamo linguaggi di "scripting" (che in realtà significano, molto di alto livello, immondizia raccolta e di solito una qualche forma di digitazione più libera e compilazione dinamica) perché sono generalmente linguaggi più facili per chiunque - programmatori inclusi - per scrivere codice. C'è meno cose stupide come ricordare di liberare dopo aver malloc o assicurarsi che il codice sia sicuro dalle eccezioni, o ricordarsi di rendere virtuali tutti i distruttori. Se i nostri computer fossero infinitamente veloci, utilizzeremmo linguaggi di "scripting" per tutto.


4
Mi piace questo argomento in modo molto meglio di "così i progettisti possono programmare". È una pessima idea ignorare il valore del rapido sviluppo e poter sperimentare i cambiamenti senza ricompilare tutto.
ojrac,

10

I linguaggi di scripting per la logica di gioco sono un ottimo esempio del modello di architettura software Alternate Hard e Soft Layers . C'è una buona discussione su quel sito (e altri ne sono sicuro) sui vantaggi di farlo.


8
  1. Ogni nuova classe lua è composta da due righe. Ogni nuova classe C ++ è dolore.
  2. Non devi lamentarti dei tipi quando tutto ciò che vuoi è mescolare i valori in giro.
  3. Raccolta dei rifiuti.
  4. Il codice dello script è ben isolato nelle macchine virtuali, lontano da tutti quei cattivi segfault erranti e traboccamenti di array.

5

Le modifiche agli script sono facili da distribuire. Ad esempio, è possibile conservare gli script in un database, il che significa che invece di una completa ridistribuzione binaria e un possibile riavvio del servizio, è sufficiente emettere una singola istruzione SQL UPDATE, eventualmente seguita da un segnale al servizio in esecuzione per ricaricare lo script.

Inoltre, i linguaggi di script sono spesso semplici da capire e facili da programmare, quindi non hai bisogno degli sviluppatori "hardcore" (quelli che si occupano di gestione della memoria / puntatori e ottimizzazioni a livello di CPU) per la maggior parte del codice (se un gioco di ruolo di grandi dimensioni, gli script per AI, Incantesimi, Effetti oggetto e il mondo stesso sono spesso più grandi del codice motore). I linguaggi degli script consentono molto di più di concentrarsi sul "cosa" piuttosto che sul "come" a causa della Garbage Collection (nel caso di Lua) e di un livello più elevato di astrazione.


4

Uno scenario in cui gli script sono utili è quando vogliamo che il nostro motore sia estensibile da plugin / componenti aggiuntivi. Queste estensioni sono create in molti casi da persone non professionali (come giocatori esperti e appassionati). Gli script sono più sicuri e più facili per questo scopo. Usando gli script, non hanno bisogno di usare compilatori e non devono essere consapevoli dei puntatori ...

Un ottimo esempio di questo è il gioco World of Warcraft. Ha migliaia di componenti aggiuntivi creati dalla community. Questi componenti aggiuntivi sono scritti utilizzando LUA + XML.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.