“Lua” è una parola por­to­ghe­se che significa “luna”, ma è anche un lin­guag­gio di pro­gram­ma­zio­ne esten­di­bi­le e mul­ti­piat­ta­for­ma. Tra le altre par­ti­co­la­ri­tà troviamo le di­men­sio­ni ridotte di appena 120 Kilobyte e l’elevata velocità. Motivi più che suf­fi­cien­ti per prendere questa luna e ana­liz­zar­la più nel dettaglio come lin­guag­gio di scripting.

Quest’articolo offre un’in­tro­du­zio­ne generale al lin­guag­gio di scripting Lua. Nella Digital Guide troverete un tutorial su Lua più det­ta­glia­to per imparare a pro­gram­ma­re con Lua.

Cos’è Lua?

Il cosmo dei linguaggi di pro­gram­ma­zio­ne del web è pressoché infinito. Lua riesce a di­stin­guer­si dalla massa, ma no­no­stan­te ciò vive all’ombra dei linguaggi più noti come Python o Perl. Sembrerà strano ma Lua esiste da più di due decenni eppure si utilizza raramente come lin­guag­gio di pro­gram­ma­zio­ne autonomo perché gli svi­lup­pa­to­ri pre­fe­ri­sco­no uti­liz­zar­lo come lin­guag­gio di scripting in­cor­po­ra­to per i singoli programmi. Il campo di utilizzo prin­ci­pa­le è sempre stato quello dei vi­deo­gio­chi e dei motori grafici, ma Lua è impiegato come lin­guag­gio di pro­gram­ma­zio­ne anche per numerosi programmi di rete e di sistema.

Il nome por­to­ghe­se non è un caso. Lua è stato svi­lup­pa­to alla Pon­ti­fí­cia Uni­ver­si­tà Cattolica di Rio de Janeiro da Roberto Ie­ru­sa­lim­schy, Luiz Henrique de Fi­guei­re­do e Waldemar Celes. Fino al 1992 in Brasile erano presenti li­mi­ta­zio­ni severe per l’im­por­ta­zio­ne di hardware e software; per superare questa si­tua­zio­ne di emergenza, i tre pro­gram­ma­to­ri svi­lup­pa­ro­no un proprio lin­guag­gio di scripting chiamato Lua. Oggi Lua fa parte dei linguaggi di pro­gram­ma­zio­ne più im­por­tan­ti e amati in molti settori.

Ma cos’è Lua pre­ci­sa­men­te? Es­sen­zial­men­te Lua è una libreria che i pro­gram­ma­to­ri possono integrare nel proprio software per renderlo in grado di compiere ope­ra­zio­ni di scripting. Lua è di­spo­ni­bi­le per i sistemi operativi più comuni. Contiene un in­ter­pre­ter molto compatto, che con poche centinaia di righe esegue il codice e riesce anche ad accedere alla libreria. No­no­stan­te il principio minimo, l’in­ter­pre­ter offre ca­rat­te­ri­sti­che utili come la pulizia au­to­ma­ti­ca di tutte le strutture di dati non più uti­liz­za­te, lasciando così libero spazio im­por­tan­te sulla memoria. Ecco le ca­rat­te­ri­sti­che più im­por­tan­ti di Lua in breve:

  • compatto
  • veloce nell’ese­cu­zio­ne
  • esten­di­bi­le in modo ec­cel­len­te
  • facile da imparare
  • di­spo­ni­bi­le gra­tui­ta­men­te

Cos’è il lin­guag­gio di pro­gram­ma­zio­ne Lua e per cosa si usa?

Lua è un lin­guag­gio di scripting uti­liz­za­to per la pro­gram­ma­zio­ne pro­ce­du­ra­le. Perciò fa parte dei paradigmi di pro­gram­ma­zio­ne nella rubrica linguaggi di scripting im­pe­ra­ti­vi. È im­ple­men­ta­to come libreria in C e offre funzioni come il codice Lua e un modello di programma host (chiamato lua) che mette a di­spo­si­zio­ne un proprio in­ter­pre­ter Lua.

In qualità di lin­guag­gio di scripting, Lua non ha un programma prin­ci­pa­le. Lavora esclu­si­va­men­te se in­cor­po­ra­to su un’ap­pli­ca­zio­ne ospite che può aprire le funzioni sopra elencate at­tra­ver­so il codice Lua. Grazie alla funzione C, è possibile estendere Lua con numerosi funzioni, per ricoprire tutte le varie richieste nell’ambito della pro­gram­ma­zio­ne. Il lin­guag­gio di pro­gram­ma­zio­ne è facile da per­so­na­liz­za­re, ga­ran­ten­do in questo modo un framework sin­tat­ti­co comune.

Chi conosce già Pascal, non avrà problemi con la sintassi di Lua, perché i linguaggi di pro­gram­ma­zio­ne sono molto simili su questo punto. Più comandi insieme sulla stessa riga si possono dividere con un punto e virgola. In tutto Lua ha 20 keyword definite, facili da me­mo­riz­za­re. In generale Lua lavora con blocchi funzione che co­min­cia­no con parole chiave come goto e terminano con end, elseif o else. Local iden­ti­fi­ca le variabili locali, valide solo per il blocco funzione che contiene la keyword. I blocchi funzione possono essere annidati l’uno nell’altro.

Lua lavora con i file table, userdata, function, thread, nil, boolean, string e number. Il primo (table = tabella) è anche l’unico file strut­tu­ra­to. I tipi di variabili sono definiti nel corso dello scripting, ma, se ne­ces­sa­rio, si possono con­ver­ti­re.

Come funziona Lua?

Con le pos­si­bi­li­tà offerte dalle ap­pli­ca­zio­ni del lin­guag­gio di scripting Lua, si può arrivare sulla luna: i suoi limiti nella pro­gram­ma­zio­ne sono quasi del tutto ine­si­sten­ti. Lua si può estendere quasi all’infinito con l’aiuto di moduli definiti dall’utente. Esempi pratici vanno dai server web scritti in Lua, passando per la creazione di una propria app fino allo sviluppo di vi­deo­ga­mes.

So­prat­tut­to nel mondo del gaming, Lua è il lin­guag­gio di pro­gram­ma­zio­ne più uti­liz­za­to. Sono tanti i giochi scritti in Lua. Spesso Lua è inserito nelle engine, per separarle dalle ope­ra­zio­ni di con­fi­gu­ra­zio­ne o dai per­so­nag­gi del gioco. Questo rende l’engine del gioco più fles­si­bi­le, per­met­ten­do a diversi giochi di usare la stessa engine. Esempi noti sono il gioco di ruolo online mul­ti­player World of Warcraft o lo stesso Enigma, gioco d’in­do­vi­nel­li di grande successo.

Lua è impiegato spesso anche nel campo della pro­gram­ma­zio­ne di rete e di sistema e si utilizza nei programmi per scopi di con­fi­gu­ra­zio­ne e au­to­ma­zio­ne; esempi im­por­tan­ti sono VLC Media Player o Adobe Photoshop Lightroom. Per quanto riguarda le reti, sono i software di analisi come Wireshark ad uti­liz­za­re le funzioni di Lua. Inoltre, si servono di questo lin­guag­gio di scripting anche il proxy MySQL, il Redis NoSQL o i server web Apache e Nginx.

Lua: il lin­guag­gio di pro­gram­ma­zio­ne con tanti pregi e pochi difetti

Da un punto di vista con­cet­tua­le, Lua offre solo poche ca­rat­te­ri­sti­che in­no­va­ti­ve come lin­guag­gio di pro­gram­ma­zio­ne. La sua sintassi è del tutto con­ven­zio­na­le e, grazie alle sue 20 parole chiave già men­zio­na­te, è anche davvero semplice.

In Lua la ti­piz­za­zio­ne è dinamica. Il tipo di una variabile si definisce nel corso dello script ma, come già detto, può essere anche con­ver­ti­to in un altro tipo. Questo è uno dei grandi pregi di Lua, so­prat­tut­to in confronto a CSS o PHP, dove l’as­se­gna­zio­ne dei tipi in “booleani”, ossia valori di verità, non segue un metodo preciso.

Il più grande pregio di Lua: tutti i testi o i numeri da adattare sono scritti di­ret­ta­men­te in variabili. L’as­se­gna­zio­ne avviene in un blocco chiuso all’inizio del modulo. Le funzioni suc­ces­si­ve attingono solo alla variabile. Se cambia l’ambiente, solo i valori nel blocco devono essere adeguati di con­se­guen­za. Si tratta del lavoro di pro­gram­ma­zio­ne più semplice dalla prima creazione.

Il difetto: se si modifica una funzione con un ag­gior­na­men­to, è richiesta una nuova com­po­si­zio­ne del codice sorgente per ogni progetto rendendo ne­ces­sa­rio un ag­gior­na­men­to per tutte le pagine collegate.

In sintesi

Il lin­guag­gio di scripting Lua può essere uti­liz­za­to per creare programmi autonomi ma può fungere anche da lin­guag­gio da in­cor­po­ra­re. Forse Lua non ha la stessa po­po­la­ri­tà degli altri linguaggi, ma di certo non manca di strumenti di pro­gram­ma­zio­ne.

Breve pa­no­ra­mi­ca nel lin­guag­gio di scripting Lua (con code snippet)

Per con­clu­de­re, vi offriamo con l’aiuto di due semplici esempi una ra­pi­dis­si­ma pa­no­ra­mi­ca del fun­zio­na­men­to di Lua.

Esempio 1: andare a capo in Lua

In Lua si va a capo inserendo un “\” o “\n” e un a capo.

print ('1 :Hello\
	World')
print ("2:Hello\
	World")

In questo caso, il risultato finale apparirà come segue:

1:Hello
World
2:Hello
World

Esempio 2: variabili in Lua

Nel lin­guag­gio di pro­gram­ma­zio­ne Lua le variabili non devono essere di­chia­ra­te, sono create in caso di necessità. I valori possono essere dei seguenti tipi: nil (che è anche il valore di variabili non ancora create), numeri, letterali (caratteri, lettere, parole ecc.), boolean (vero/falso o true/false), tabelle e funzioni. Un semplice esempio di coding:

print ( var )
var = "Hello World"
print ( var )

Con la variabile non definita “nil”, il risultato è il seguente:

nil
Hello World
Vai al menu prin­ci­pa­le