“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 nel­l'e­se­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 nel­l'am­bi­to 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 dal­l'u­ten­te. 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'am­bien­te, 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