Lua
| Lua | |
|---|---|
|
Logo Lua | |
| Date de bază | |
| Paradigme : | Limbaj script , imperativ , funcțional |
| Anul publicării: | 1993 |
| Proiectant: | Roberto Ierusalimschy |
| Dezvoltator: | Roberto Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo |
| Versiunea actuală | 5.4.3 (29 martie 2021) |
| Tastare : | slab dinamic ( tastare slabă ) |
| Implementări importante : | Lua , LuaJIT, LLVM-Lua, LuaCLR |
| Dialecte: | Metalua, Idle, GSL Shell |
| Influențată de: | C ++ , CLU , Modula , Scheme , SNOBOL |
| Afectat: | Falcon , GameMonkey , Io , JavaScript , Julia , MiniD , MoonScript , Red , Ruby , Squirrel |
| Sistem de operare : | platforma independenta |
| Licență : | Licență MIT |
| www.lua.org | |
Lua ( portugheză pentru luna ) este un limbaj de scriptare imperativ și extensibil pentru integrarea în programe, pentru a le putea dezvolta și întreține mai ușor. Una dintre caracteristicile speciale ale Lua este dimensiunea redusă a interpretului de script compilat .
Programele Lua sunt în mare parte independente de platformă și sunt traduse în bytecode înainte de a fi executate . Deși Lua poate fi, de asemenea, utilizat pentru a scrie programe independente, acesta este conceput în primul rând ca un limbaj de script încorporat pentru alte programe. În acest sens, este comparabil cu Tcl . Avantajele Lua sunt dimensiunea redusă de 120 kB, extensibilitatea și viteza mare în comparație cu alte limbaje de script.
Interpretul Lua este o bibliotecă C - sunt adresate, care este, de asemenea, un API pentru mediul de execuție care include interpretul pentru apeluri din programul C. Folosind API-ul, diferite părți ale programului pot fi scrise în C (sau C ++) și Lua, în timp ce variabilele și funcțiile rămân accesibile în ambele direcții (adică o funcție din Lua poate apela o funcție în C / C ++ și vice versa).
Există, de asemenea, un compilator JIT gratuit numit LuaJIT care acceptă revizuirea 5.1 a limbajului.
Lua este în ANSI-C implementează și acceptă programarea imperativă și funcțională . Cu toate acestea, dacă implementați singuri obiecte folosind metatable, este posibilă și programarea orientată pe obiecte .
istorie
Lua a fost dezvoltat în 1993 de către Roberto Ierusalimschy, Luiz Henrique de Figueiredo și Waldemar Celes în Graphics Technology Group calculator a Universitatea Catolică Pontificală din Rio de Janeiro , în Brazilia . Lua este software gratuit și a fost publicat până la versiunea 4 sub propria licență BSD , din versiunea 5 sub licența MIT .
utilizare
Lua poate fi folosit pentru a scrie programe independente, precum și pentru a servi ca limbaj încorporat.
Pentru a obține componente individuale ale unui joc pe computer, cum ar fi De exemplu, pentru a separa fișierele de configurare sau AI - ul de caractere sau adversari controlate de computer de motorul jocului , Lua este adesea utilizat în dezvoltarea jocurilor pe computer. Acest lucru face ca motorul de joc dezvoltat de obicei mai scump să fie mai flexibil și permite reutilizarea asociată cu un efort mai mic, motiv pentru care Lua este utilizat în zona jocurilor proprietare .
Unele dinamic și faianțare - manager de ferestre pentru a utiliza Lua pentru configurare și control, inclusiv minunat și Ion3 .
sintaxă
Tipuri de date
În plus față de tipurile de date nil , boolean , număr (cu subtipurile interne întregi și flotante ), șir , funcție, date utilizator și fir , Lua recunoaște tabelul ca singurul tip de date structurate.
Un tabel este un câmp de date asociativ , adică o colecție de perechi cheie-date. Cheia (index) poate avea orice tip de date (cu excepția zero). De asemenea, se face distincția între tasta numerică 1 și tasta șir „1”. Spre deosebire de limbile C, indexarea tabelelor începe cu 1.
Tabelele pot fi create în următoarele moduri:
T = {} -- Erzeugt eine leere Tabelle und weist sie der Variablen mit dem Namen T zu.
T = {"ja", "nein", "?"} -- Eine Tabelle mit 3 Elementen, wobei T[1] == "ja", T[2] == "nein" und T[3] == "?".
T = {[1] = "ja", [2] = "nein", [3] = "?"} -- Wie Zeile vorher, nur mit expliziter Indizierung.
T = {[-900] = 3, [900] = 4} -- Tabelle mit 2 Elementen, aber unregelmäßigen Indizes.
T = {x=5, y=10} -- Typisches assoziatives Datenfeld mit T["x"], T["y"] (auch als T.x, T.y zugreifbar)
T = {x=5, y=10; "ja", "nein"} -- Gemischte Tabelle mit T.x, T.y, T[1], T[2]
T = {Nachricht = "wahl", {"ja", "nein", "?"}} -- Tabellen können weitere Tabellen enthalten.
Sarcini
a = 5
b = "hi"
local a = a
-- Einfache Zuweisungen. Variablen sind nicht typisiert und können verschiedene Datentypen haben.
-- Lokale Variablen (definiert mit "local") sind auf den aktuellen Namensbereich beschränkt.
a, b, c = 1, 2, 3 -- Mehrfachzuweisungen sind erlaubt.
a, b = b, a -- Wertetausch: Anweisungen werden von rechts nach links ausgewertet.
a, b = 4, 5, "6" -- Überflüssige Werte (Bsp: "6") werden ausgewertet, aber verworfen.
a, b = "da" -- Fehlende Werte auf der rechten Seite werden mit "nil" ersetzt.
a = nil -- Zerstört a. Der Speicherbereich von a wird vom Garbage-Collector freigegeben.
a = z -- Falls z nicht definiert ist, wird "nil" zugewiesen und somit a freigegeben.
a = "3" + "2" -- Der Operator + erwartet Zahlen, die Zeichenketten werden also
-- in Zahlen konvertiert, also erfolgt hier die Zuweisung a = 5.
a = 3 .. 2 -- Der Verbindungsoperator erwartet Zeichenketten, die Zahlen werden
-- konvertiert - a = "32".
local a <const> = 5 -- lexikalische (lokale) Konstanten wurden in Lua 5.4 eingeführt
local f <close> = io.open(file) -- ebenfalls ab 5.4: to-close-Variablen mit ähnlicher Semantik
-- wie Pythons Context Manager (with ...)
Funcții
Funcțiile pot fi create cu cuvântul cheie function. Funcțiile nu au un număr fix de parametri și valori returnate.
function probe(zahl1, zahl2, text, tabelle)
zahl3 = zahl1 + zahl2
zahl4 = zahl1 - zahl2
print(text)
if tabelle ~= nil then
print(tabelle.eintrag)
end
return zahl3,zahl4
end
probe(10, 20, "Hallo ", {eintrag = "Welt"}) -- erlaubter Funktionsaufruf
x,y = probe(10,20) -- ebenfalls erlaubter Aufruf, text und tabelle sind nil.
Când funcția este apelată, nu toate variabilele trebuie transferate. Parametrii lipsă au automat valoarea zero nil . Același lucru este valabil și pentru valorile returnate. Acest lucru face mai ușoară implementarea supraîncărcărilor funcției, dar crește incidența erorilor de rulare.
Cuvinte cheie rezervate
and break do else elseif end false for function goto if in
local nil not or repeat return then true until while
Cuvântul cheie nil(lângă fals ) înseamnă fals și, în general, pentru variabilele neinițializate sau valori care nu pot fi interpretate.
Cod simplu
Programul clasic Hello World arată astfel:
print("Hallo Welt!")
Comentariile pot fi cu o singură linie sau cu mai multe linii:
-- Ein Kommentar in Lua beginnt mit zwei Bindestrichen und geht bis zum Ende der Zeile.
--[[Kommentare können auch über mehrere
Zeilen ausgeweitet werden, sodass die Dokumentation
des Quellcodes leichter fällt.]]
Exemplu de recursivitate (calculul factorialului ):
function factorial(n)
if n == 0 then
return 1
end
return n * factorial(n - 1)
end
Cu operatorii de scurtcircuit "și" și "sau" funcția poate fi scrisă într-un mod mai scurt (aceasta corespunde operatorului de selecție ?: Din C și limbile conexe):
function factorial(n)
return n == 0 and 1 or n * factorial(n - 1)
end
Funcțiile sunt considerate obiecte de primă clasă în Lua . Aceasta înseamnă, în special, că funcțiile pot fi generate dinamic în timpul runtime-ului și că pot fi atribuite și variabile (existente) Următorul exemplu arată cum variabila print(care indică o funcție standard a bibliotecii Lua) este suprascrisă cu o altă funcție:
do
local oldprint = print -- aktuelle (globale) print-Funktion über oldprint zugreifbar machen
function print(s) -- Neue (globale) Definition von print, ...
oldprint("I say: " .. s) -- ... die die alte print-Funktion aufruft.
end
end
Comenzile din Lua pot fi terminate cu un punct și virgulă . Dacă mai multe comenzi sunt într-o singură linie, acest lucru face codul mai ușor de citit.
Sintaxa se bazează pe cea a lui Pascal , ceea ce face mai ușor începătorii să înceapă cu Lua. Spre deosebire de limbile derivate din Pascal, cu toate acestea, Lua folosește „==” și nu „=” ca operator de comparație, „=” ca operator de atribuire (în loc de „: =” în Pascal) și „~ =” pentru că nu este egal (în loc de „<>").
Module
Lua poate fi extins după cum este necesar cu module definite de utilizator. Managerul de pachete LuaRocks, scris în Lua, este disponibil pentru gestionarea acestora .
O listă de module Lua comune:
| modul | Descriere |
|---|---|
| LuaFileSystem | Acces la structurile de dosare și proprietățile fișierelor. |
| LuaDoc | Instrument de documentare pentru codul sursă Lua. |
| LuaSocket | Biblioteca de programare socket. |
| LuaSQL | Interfață Lua pentru PostgreSQL , ODBC , MySQL , SQLite , Oracle și OLE DB . |
| stdlib | Biblioteca pentru sarcini comune de programare; se referă la liste, tabele, programare funcțională, expresii regulate , obiecte, pretty -printing și getopt. |
| MD5 | funcție hash criptografică simplă |
| Copas | Dispecerat bazat pe co-rutine care pot fi utilizate de serverele TCP / IP . |
| LuaZip | Biblioteca care poate citi din fișiere ZIP . |
| LuaInterface | Conexiune între Lua și Microsoft .NET Common Language Runtime (CLR). |
| LuaBitOps | O extensie bazată pe C pentru Lua pentru operații pe biți pe numere. |
| LuaXML | Conexiune simplă între XML și Lua. |
| Benzi | Permite diferitelor medii Lua să ruleze în paralel. |
| Penlight | Biblioteca care simplifică manipularea tabelelor, matricelor , șirurilor, căilor de fișiere, folderelor, datelor și aplicațiilor de programare funcționale. |
| Ulei | Broker de cereri de obiecte simplu și eficient ( CORBA ). |
literatură
- Roberto Ierusalimschy: Programming in Lua , ediția a IV-a, Open Source Press, 2016, ISBN 978-8-59037-986-7 .
- Roberto Ierusalimschy, LH Figueiredo, W. Celes: Manual de referință Lua 5.1 , august 2006, ISBN 85-903798-3-3 .
- Kurt Jung, Aaron Brown: Beginning Lua Programming , Wrox, 2007, ISBN 0-470-06917-1 .
- Claus Kühnel, Daniel Zwirner: Lua: Use of Lua in Embedded Systems , 2nd edition, Script Verlag Kühnel, 2012, ISBN 978-3-90785-715-1 .
- David Young: Learning Game AI Programming with Lua , Packt Publishing, 2014, ISBN 1-783-28133-2 .
Link-uri web
- Lua.org - site-ul oficial (engleză și portugheză)
- Întrebări frecvente despre Lua
- LuaRocks - manager de pachete și depozit
- Utilizatori Lua Wiki
- Lua minunat pe GitHub
- Aflați Lua în 15 minute
- Scriere rapidă, ușoară, încorporată cu Lua de Jan Bornholdt, Universitatea Wedel de Științe Aplicate