Lua

Lua
Logo 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

Commons : Lua  - colecție de imagini, videoclipuri și fișiere audio

Surse și note

  1. Versiunea 5.4.3 . 29 martie 2021 (accesat la 30 martie 2021).
  2. a b LuaJIT. Adus la 26 februarie 2017 .
  3. LLVM-Lua. Adus la 26 februarie 2017 .
  4. LuaCLR. Adus pe 3 ianuarie 2016 .
  5. Julien Danjou: Why not Lua , accesat la 19 iunie 2021.