2009-02-26 9 views
6

Sto giocando a WoW per circa 2 anni ed ero piuttosto curioso di Lua che è usato per scrivere addon. Poiché quello che ho letto finora su Lua era "veloce", "leggero" e "questo è fantastico", mi chiedevo come e quando usarlo.Quando è bello usare il linguaggio di script incorporato come Lua

Qual è la situazione tipica in cui è necessario incorporare un linguaggio di script come Lua in un sistema?

risposta

13

Quando è necessario che gli utenti finali siano in grado di definire/modificare il sistema senza richiedere la riscrittura del sistema. Viene utilizzato nei giochi per consentire estensioni o per consentire al motore di gioco principale di rimanere invariato, mentre consente di modificare il contenuto.

2

Sviluppo rapido per applicazioni con vincoli in tempo reale. I giochi per computer sono uno di questi ;-)

+0

altre applicazioni non di gioco che utilizzano Lua per estensibilità e per facilitare lo sviluppo/refactoring: apt, nmap, monotone, Adobe LightRoom, love2d, wildpockets – Javier

2

È una soluzione valida se si desidera consentire a terze parti di sviluppare plug-in o mod per il proprio software.

È possibile implementare un'API in qualsiasi lingua si usi, ma un linguaggio di script come LUA tende ad essere più semplice e accessibile per gli sviluppatori occasionali.

3

Lua è:

  • leggero
  • Facile da integrare, anche in un ambiente asincrono direttamente ad esempio un gioco
  • Facile da imparare per il personale non programmatore, come integratori, designer e artisti

Poiché i giochi di solito richiedono tutte quelle qualità, Lua è principalmente utilizzato lì. Altre postazioni potrebbero essere qualsiasi applicazione che necessiti di alcune funzionalità di scripting, ma gli sviluppatori spesso optano per una soluzione un po 'più pesante come .Net o python.

8

I linguaggi di scripting incorporati funzionano bene anche per la memorizzazione delle informazioni di configurazione. Ultimo ho controllato, la famiglia Mozilla tutti usano JavaScript per le loro informazioni di configurazione.

Il prossimo passo, sono grandi per lo sviluppo di plugin. Puoi creare un'API personalizzata da esporre agli sviluppatori di plug-in e gli sviluppatori di plug-in guadagnano molta libertà dall'avere un'intera lingua con cui lavorare.

Un altro è quando i file piatti non sono abbastanza espressivi. Se si desidera scrivere applicazioni guidate dai dati in cui il comportamento è parametrizzato, si sarà davvero stanchi delle lunghe stringhe di test dei condizionali per le combinazioni di configurazione. Quando ciò accade, è meglio scrivere le regole E la loro valutazione nella tua configurazione.

Questo argomento ha una certa copertura nel libro Pragramtic Programmer.

2

Oltre ai casi di scripting e configurabilità citati, vorrei semplicemente affermare che Lua + C (o Lua + C++) è un partner perfetto per qualsiasi sviluppo software. Permette di creare un'interfaccia motore/utilizzo in cui il motore viene eseguito in C/C++ e il comportamento o la personalizzazione eseguita in Lua.

OS X Il cacao ha l'amalgama Objective-C (C e Smalltalk, dove la lingua cambia in base alla linea). Trovo Lua + C simile, solo la lingua cambia da un file sorgente, che per me è una migliore astrazione.

I motivi per cui si desidera non si desidera utilizzare Lua sono anche degni di nota.Perché non ha un buon debugger. Poi di nuovo, la gente sembra non averne nemmeno bisogno. :)

0

Oltre a tutti gli eccellenti motivi menzionati da altri, Embedding Lua in C è molto utile quando è necessario manipolare il testo, lavorare con i file o semplicemente avere un linguaggio di livello superiore. Lua ha un sacco di funzionalità (tabelle, funzioni sono valori di prima classe, un sacco di altre cose buone). Inoltre, mentre lua non è veloce come C o C++, è piuttosto veloce per una lingua interpretata.

3

un linguaggio di scripting come Lua può essere utilizzato anche se è necessario modificare il codice (con effetto immediato) mentre l'applicazione è in esecuzione. non si può vedere questo in wow, perché per quanto mi ricordo il codice è caricato all'inizio (e non ricontrollato e ricaricato durante l'esecuzione).

ma pensa ad un altro esempio: webserver e linguaggio di scripting - (per fortuna) puoi cambiare il tuo codice php senza dover ricompilare apache o riavviare apache.

steve yegge ha fatto quella cosa per il suo motore mmorpg alimentando wyvern, usando jython o rhino e javascript (non ricordo). ha scritto il core engine in java, ma la logica del programma in python/javascript.

l'effetto di questo è:

  • lui non ha bisogno di riavviare il motore di base quando si cambia gli script, perché sarebbe scollegare tutti i giocatori
  • può lasciare che gli altri fanno la programmazione più semplice come la definizione di nuovi oggetti e mostri senza esporre tutto il codice fondamentale per loro
  • sandboxing: se si verifica un errore all'interno dello script, si può essere in grado di gestire con garbo, senza mettere in pericolo l'applicazione circostante