Lua

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search
Nota disambigua.svg Disambiguazione – Se stai cercando altri significati, vedi LUA.
Lua
linguaggio di programmazione
Lua-Logo.svg
AutoreRoberto Ierusalimschy
Luiz Henrique de Figueiredo
Waldemar Celes
Data di origine1993
Ultima versione5.3.5 (10 luglio 2018)
Utilizzogenerico, scripting, programmazione videogiochi
Paradigmimulti-paradigma: scripting, imperativo (procedurale, orientato agli oggetti), funzionale
Tipizzazioneforte, dinamica
Estensioni comuni.lua
Influenzato daC++, CLU, Modula, Scheme, SNOBOL
Ha influenzatoIo, GameMonkey, Squirrel, Falcon, MiniD, Julia
Implementazione di riferimento
Sistema operativomultipiattaforma
Licenzalicenza MIT
Sito webwww.lua.org/
(EN)

«The programming language.»

(IT)

«Il linguaggio di programmazione.»

Lua è un linguaggio di programmazione dinamico, riflessivo, imperativo e procedurale, utilizzato come linguaggio di scripting di uso generico.

Storia[modifica | modifica wikitesto]

Lua è stato creato nel 1993 da Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes[1], membri del Tecgraf/PUC-RIO, il gruppo di Tecnologia em Computação Gráfica presso la Pontificia Università Cattolica di Rio de Janeiro, in Brasile[2]. Versioni di Lua precedenti alla versione 5.0 furono rilasciate sotto licenza simile alla licenza zlib[3]. Dalla versione 5.0 Lua è stato rilasciato sotto licenza MIT[3].

In un articolo pubblicato in Dr. Dobb's Journal, i creatori di Lua affermavano che Lisp e Scheme con la loro tipica struttura dati, la lista, hanno avuto la maggiore influenza sulla decisione di adottare la tabella come struttura dati primaria in Lua[4].

Lua è stato usato in molte applicazioni, commerciali e non.[5]

Caratteristiche del linguaggio[modifica | modifica wikitesto]

Le caratteristiche principali di Lua sono le funzioni, viste come "oggetti" di primo livello e quindi assegnabili a variabili, e l'uso di tabelle come strutture dati generiche. Queste caratteristiche permettono al linguaggio di implementare caratteristiche viste in linguaggi orientati agli oggetti senza che lo stesso lo sia.

Esempi[modifica | modifica wikitesto]

Il classico programma "Hello world" può essere scritto come:

 print "Hello, world!"

Il fattoriale è un esempio di funzione ricorsiva:

 function factorial(n)
   if n == 0 then
     return 1
   end
     
   return n * factorial(n - 1)
 end

Questo esempio mostra come sia possibile, in Lua, ridefinire le funzioni del linguaggio:

 do
   local oldprint = print  -- salva la funzione come era definita da Lua, non salvando il
                           -- valore restituito dalla funzione, ma la funzione stessa  
   print = function(s)     -- ridefinisce la funzione print
     if s == "foo" then 
       oldprint("bar")
     else 
       oldprint(s) 
     end
   end
 end

Qualunque futura chiamata alla funzione print farà ora riferimento alla nuova funzione, e la vecchia funzione sarà accessibile soltanto dalla nuova versione della stessa.

Questo esempio mostra una caratteristica di Lua: la possibilità di definire dinamicamente tabelle (la struttura dati usata dal linguaggio). In questo caso si tratta di una tabella che associa al valore fibs[n] l'ennesimo numero di Fibonacci.

 fibs = { 1, 1 }                                 -- valore iniziale per fibs[1] and fibs[2]
 setmetatable(fibs, {                            
   __index = function(fibs,n)                    -- chiama questa funzione se il valore fibs[n] non esiste
               fibs[n] = fibs[n-2] + fibs[n-1]   -- calcola e memorizza il valore
               return fibs[n]
             end
 })

Esempi di utilizzo[modifica | modifica wikitesto]

  • Lua è usato molto spesso in ambito PSP per la programmazione di Homebrew.
  • Il firmware delle stampanti Olivetti quali Any_way, Simple_way e My_way, denominato HERCULE, è stato creato con il linguaggio di programmazione dinamico Lua.
  • Il Lua è utilizzato per creare script e plugin per il MMORPG Lineage 2.
  • Il Lua è anche usato per creare Addon compatibili con il MMORPG World of Warcraft.
  • Il Lua è usato anche per creare script con il MMORPG Metin2.
  • Il Lua è usato anche per creare mod per Garry's Mod.
  • Con Lua si sono creati inoltre numerosi script e trainer per il pluri-premiato gioco della Rockstar Games GTA IV.
  • Nel videogioco per PC Baldur's Gate II: Shadows of Amn l'intelligenza artificiale dei personaggi è gestita in Lua. È infatti possibile personalizzare interamente questi script per modificare il comportamento predefinito di ogni personaggio in base alle varie circostanze di gioco.
  • Due mod del videogioco Minecraft, chiamate ComputerCraft e OpenComputers, permettono di creare dei programmi all'interno del gioco stesso, scrivendoli in linguaggio Lua.
  • Molti script per TeamSpeak vengono creati con Lua. Uno di questi è il funscripts.lua di aetas.
  • Il firmware Open Source OpenTx che equipaggia diversi apparati di radiocomando per modellismo ha la possibilità di eseguire programmi realizzati in linguaggio Lua.
  • Multi Theft Auto, la mod che permette la modalità di gioco online in GTA: San Andreas, è in parte scritta con Lua.
  • La piattaforma NUT di Cedac Software consente di realizzare embedded Applications tramite il linguaggio Lua.
  • I giochi disponibili su Roblox sono scritti interamente con Lua.

Citazioni[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ (EN) Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, The Evolution of Lua (PDF), su lua.org, 2007, p. 1. URL consultato il 4 novembre 2015.
  2. ^ (EN) About, su lua.org, 19 ottobre 2015. URL consultato il 4 novembre 2015.
  3. ^ a b (EN) License, su lua.org, 12 maggio 2015. URL consultato il 4 novembre 2015.
  4. ^ (EN) Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, Lua: an Extensible Embedded Language, in Dr. Dobb's Journal, vol. 21, n. 12, 1º dicembre 1996, ISSN 1044-789X (WC · ACNP). URL consultato il 4 novembre 2015.
  5. ^ (EN) Uses, su lua.org, 24 marzo 2015. URL consultato il 4 novembre 2015.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autoritàLCCN (ENsh2004007514 · GND (DE7547043-3 · BNF (FRcb166522948 (data)
Informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica