Lua e programmazione multi-paradigma: ambito e capacità

5

Nonostante abbia iniziato a imparare a programmare con Pascal e C, dopo il passaggio a OO (C ++, Java) ho perso il senso del paradigma di programmazione strutturata. Ho iniziato a studiare Lua e ho studiato molti tutorial, ma tutti riguardano solo le operazioni di base e le funzionalità e le funzionalità del linguaggio. Si sentono più come un documento di riferimento che come guida per programmatori.

Ora, quando si cerca di lavorare con le attività quotidiane, come si passa attraverso i più comuni schemi di progettazione come osservatore o programmazione multithread, creando elementi dell'interfaccia utente e chiamate di sistema di polling per tastiera o sensori? È persino fattibile in queste lingue o devi lavorare con il binding C, le librerie e la programmazione di basso livello per ottenere la maggior parte delle cose fatte? Ho sbagliato l'ambito Lua?

    
posta MLProgrammer-CiM 14.11.2012 - 10:19
fonte

2 risposte

8

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)

    
risposta data 14.11.2012 - 19:51
fonte
8

Lua è, in molti modi, molto simile a Scheme: procedurale con procedure di prima classe e di ordine superiore, a blocchi strutturati, con lessico lessicale con chiusure lessicali, opportune chiamate di coda, uso di una singola struttura di dati pervasivi (elenco in Schema, tabella in Lua) nell'intero linguaggio.

La community Scheme ha prodotto alcuni libri ed esercitazioni di programmazione di alta qualità estremamente , che sono tutti più o meno direttamente applicabili a Lua.

e molti molti altri.

Una differenza importante tra le due lingue è che, sebbene entrambe siano lingue impure imperative, la comunità Scheme preferisce in realtà uno stile di programmazione dichiarativo molto puramente funzionale, immutabile, privo di effetti collaterali, della comunità Lua. Quindi, se impari Lua tramite Scheme, il tuo codice potrebbe non essere Lua completamente idiomatico. Non penso che sia una brutta cosa: prima di tutto, la programmazione funzionale è una buona cosa, e in secondo luogo, conosci già la programmazione imperativa dalle tue incursioni in Pascal, C, C ++ e Java.

    
risposta data 14.11.2012 - 13:42
fonte

Leggi altre domande sui tag