Oltre al documento di riferimento (che è un buon modo per imparare un IMHO di piccola lingua), c'è Programmazione in Lua (PiL) . Insegna sia la lingua che i modelli idiomatici comuni.
Riguardo allo scope, Lua è un linguaggio di alto livello. Ti consente di esprimere rapidamente algoritmi e creare strutture. È anche ampiamente usato come linguaggio di estensione, da incorporare all'interno di un'applicazione.
Ci sono molti moduli C disponibili, sia per aggiungere nuove funzionalità ( LPEG , LuaSocket , ecc.) e "legare" alle librerie C esistenti (database, parser XML, ecc.), ma Lua stessa è un linguaggio completo, non è necessario scrivere moduli C sul lavoro quotidiano.
Riguardo ai "modelli di progettazione più comuni" intendi i modelli di progettazione "Gang of Four"? (si cita il modello di Osservatore). Se così fosse, anche se veramente utili e scritti in un linguaggio agnostico, molti di questi modelli hanno senso solo in linguaggi con OO pesantemente tipizzati staticamente come C ++, Java, C # e pochi altri. Con altre piattaforme, alcune non sono necessarie (come i Command Pattern, che diventano una chiusura quando si hanno lexically scope, funzioni di prima classe), altre sono applicabili ma danno luogo a soluzioni molto diverse.
Informazioni sulla programmazione multithread: Lua è per lo più single-threaded. Ci sono molti modi per aggirare questo problema, ma non sono così necessari come su altre piattaforme. Un semplice schema basato su coroutine è veloce e facile da scrivere e funziona perfettamente in molti casi. Altrimenti, il modo esatto per fare il multithreading dipende molto dalle tue esigenze.
GUI: questo è nel regno di una libreria GUI e non della lingua. Ce ne sono molti disponibili Di nuovo, puoi sceglierne uno o nessuno. Ci sono molte cose da fare senza GUI (riga di comando, estensioni di applicazione, server, ecc.)
Integrazione hardware: dipende dall'hardware. Nella maggior parte dei casi, dovrebbe esserci un'API C e quindi è necessaria una libreria di rilegatura, che non è difficile da scrivere (a volte è solo una funzione C della riga 5-20 per ciascun punto di ingresso dell'API)