Lua

Lua
Logo.
Data pierwszej wersji 1993
Paradygmat Wieloparadygmat: proceduralny , obiektowy, prototypowy i funkcjonalny
Autor Luiz Henrique de Figueiredo, Roberto Ierusalimschy i Waldemar Celes
Ostatnia wersja 5.4.3 (29 marca 2021)
Pisanie na maszynie dynamiczny , słaby
Wpływem PODSTAWOWE , C , C++
Pod wpływem Micro Lua DS
Realizacje Lua , LuaJIT , LLVM-Lua , LuaCLR , Nua , Lua Alchemia , MicroLua ,

Mochalua , Jill , luaj , LuaRT

Napisane w VS
System operacyjny Wieloplatformowy
Licencja Licencja MIT
Stronie internetowej lua.org
Rozszerzenie pliku lua, luna, księżycowy i anair

Lua jest wolnym , refleksyjnym i imperatywnym językiem skryptowym .

Stworzony w 1993 roku , został zaprojektowany tak, aby można go było osadzić w innych aplikacjach w celu ich rozszerzenia. Lua (z portugalskiego  : Lua [ˈlu.ɐ] , w Brazylii  : [ˈlu.a] , co oznacza "  Księżyc  ") została opracowana przez Luiza Henrique de Figueiredo , Roberto Ierusalimschy  (en) i Waldemara Celesa , członków grupy badawczej TeCGraf , z Papieskiego Uniwersytetu Katolickiego w Rio de Janeiro w Brazylii .

Interpreter Lua jest napisany w ścisłym języku ANSI C i dlatego może być kompilowany na wielu różnych systemach. Jest również bardzo kompaktowy, wersja 5.0.2 zajmuje tylko  95kb do  185kb w zależności od używanego kompilatora i systemu docelowego. Jest często używany w systemach wbudowanych, takich jak OpenWrt, gdzie ta kompaktowość jest bardzo ceniona. Wykorzystuje kompatybilność, jaką język C ma z dużą liczbą języków, aby łatwo zintegrować się z większością projektów.

Jest szczególnie popularny w przypadku gier osadzonych, sieciowych i gier wideo .

Lua jest używana w grach wideo takich jak: Transformice , World of Warcraft , Roblox , Garry's Mod , Onset , mod ComputerCraft ( mod do Minecraft ), Multi Theft Auto ( mod multiplayer Grand Theft Auto: San Andreas ) FiveM ( mod multiplayer Grand Theft ) Auto V ), a także silniki gier wideo , takie jak SourceEngine , CryENGINE , LÖVE , a nawet konsole fantasy , takie jak Pico-8 .

Jest również używany na poziomie sieci jako hook na Apache , Lighttpd (domyślnie), Nginx (przez OpenResty ), w routerach Cisco , w analizatorze pakietów Wireshark , antyspam Rspamd , prywatny przełącznik telefoniczny Asterisk (opcjonalnie) ), dla skryptów MediaWiki .

Ogólny

Uwagi

W Lua komentarze zaczynają się --i kończą na końcu linii, tak jak w Adzie . Jeśli pierwsza linia zaczyna się od #! ( shebang ) jest również traktowany jako komentarz. Komentarze wielowierszowe są również dostępne ze składnią

--[[...]]

Zmienne

Zmienne mogą zawierać nil(wartość null, pusta), wartość logiczną, ciąg znaków, liczbę (brak różnicy między liczbą całkowitą a liczbą zmiennoprzecinkową), tabelę lub funkcję. Istnieją również inne typy, które są userdatalub threadrzadziej spotykane. Typ userdatajest bardzo praktyczny, odpowiada obiektowi C/C++ zdefiniowanemu przez użytkownika: możliwe jest zatem stworzenie struktury C lub klasy C++ i użycie obiektów tego typu w skrypcie Lua, po po dołączeniu do tego obiektu metatablicy odpowiedzialnej za wywoływanie funkcji klasy C++. Możemy zatem wyobrazić sobie tworzenie podstawowych klas biznesowych programu w C, a kodowanie samej aplikacji w Lua, co znacznie przyspiesza jej rozwój dzięki wysokopoziomowym narzędziom dostarczanym przez język.

Wewnętrznie też możemy je spotkać proto, rodzaj prototypu funkcji, ładowany jest kod bajtowy tej funkcji, ale ten ostatni nie został wykonany; Z prototypami spotkamy się, gdy plik zostanie załadowany (skompilowany), ale niewykonany lub z domknięciami .

Domyślnie po zadeklarowaniu zmiennej jest ona globalna dla całego środowiska wykonania, chyba że jest poprzedzona słowem kluczowym local.

Ciągi znaków są oddzielone pojedynczymi cudzysłowami (') lub podwójnymi ("), a nawet dosłownym znakiem ciągu

[[...]]

(multilinia, bez znaku specjalnego).

Operator konkatenacji ciągów jest reprezentowany przez dwukropek ( ..).

Funkcje

Funkcje są traktowane jako zmienne. Zapewnia to dużą elastyczność: na przykład możliwe jest tworzenie funkcji lokalnych dla innej funkcji, przekazywanie funkcji jako parametru innej funkcji (lub wartości zwracanej) lub umieszczanie funkcji w tabelach. Jeżeli przypisujemy nildo funkcji (np. print = nil), funkcja już nie istnieje, nie może być już wywołana.

Zaletą funkcji w Lua jest to, że mogą przyjmować nieskończoną liczbę parametrów, ale także zwracać kilka wartości.

Tabele, metatabele

Tabele są strukturą Lua, która pozwala na przechowywanie zmiennych indeksowanych przez klucz (jak na przykład w PHP ). Tabele są używane do wielu rzeczy w Lua.


Są one używane na dwa różne sposoby:

  • Lista (z indeksem zaczynającym się od 1, a nie od 0)
  • Tablica mieszająca (działająca jako struktura), która może przyjmować klucz i wartość dowolnego typu zmiennej not nil.


Całkiem możliwe (ale zdecydowanie odradzane ze względu na jakość kodu) jest posiadanie tabeli, która łączy listę i tablicę haszującą.

Konwencja polega na przeglądaniu listy za pomocą iteratora ipairsi tablicy mieszającej za pomocą iteratora pairs.


W tabeli nie jest możliwe przypisanie zmiennej do nil lub indeksowanie jej do klucza nil.

Metatabele to tabele, dla których funkcja została powiązana z każdym operatorem podstawowym (+, -, (), [] ...). Ten mechanizm jest bardzo zbliżony do przeciążania operatorów w C++. Na przykład, jeśli zmienna x zawiera tabelę powiązaną z odpowiednią metatablicą, wywołanie funkcji x (argumenty) będzie poprawne, ponieważ Lua będzie wtedy szukał w metatablicy, jak obsłużyć to wywołanie.

W ten sposób możemy zaimplementować dziedziczenie między tabelami. Jeśli pole nie zostanie znalezione na żądanie, Lua przeszuka metatablicę, aby znaleźć tabelę nadrzędną i poprosi tabelę nadrzędną o dostarczenie odpowiedniego elementu.

Przykłady

Stan

if condition1 and condition2 then -- instructions exécutées si les conditions 1 et 2 sont vraies elseif condition1 then -- instructions exécutées si la condition 1 est vraie et la condition 2 est fausse elseif condition2 then -- instructions exécutées si la condition 2 est vraie et la condition 1 est fausse else -- instructions exécutées si les deux conditions sont fausses end

Klamry

repeat -- code until condition

oraz

while condition do -- code end

jak również

for var = start, valend, step do -- code end

Gdzie

for var_1, ..., var_n in explist do -- code end

Deklaracja funkcji

function mafonction(arg1, arg2, ...) -- code return résultat1, résultat2 end

Gdzie

mafonction = function (arg1, arg2, ...) -- code return résultat1, résultat2 end

Wywołania funkcji

res1, res2 = mafonction(var)

Bloki bezwarunkowe

Bloki bezwarunkowe są używane na przykład do deklarowania zmiennych lokalnych dla tego bloku:

do local mavariable = "chaîne" -- déclaration de variable, optionnel -- code utilisant mavariable end

Deklaracja tabeli

Tabela z kolejnymi indeksami liczbowymi (w Lua pierwszym indeksem tabeli jest 1)

a = { 5, "foo", [[C:\Lua\Lua.exe]], 'bar', 42 }

Tabela z wyraźnymi indeksami, wskazanymi w nawiasach (indeksy będące ciągami o składni zmiennej nie wymagają cudzysłowów ani nawiasów)

a = { d = 5, [12] = "foo", ['chaîne avec espace'] = true }

Kiedy przypisujemy zmienną do innej, jeśli wartość tej nie jest liczbą, ciągiem znaków lub wartością logiczną, kopiowane jest odwołanie do tej zmiennej. Czyli w przypadku tabel, jeśli zmienna a ma tabelę i przypiszemy zmienną b do zmiennej a to wszelkie modyfikacje, jakich dokonał a będą bezpośrednio widoczne na b

local a = {1,"b",3} local b = a a.foo = "bar" print(b.foo) -- bar -- b et a on les mêmes références

Tablica przechowująca zmienne złożone: inne tabele, funkcje, odsyłacze… Gdy wartości jako indeks nie są liczbami, ciągami znaków ani wartościami boolowskimi, to indeks będzie odniesieniem do danej zmiennej.

fonction = function (a, b) return (a + b) / a * b end t = { b = { -- Fonction comme clé -- La référence de la fonction agira comme clé [fonction] = 'Fonction !', -- Index numérique [5] = 42, -- Index chaîne simple (ie. syntaxe d'une variable) ls = [[Valeur Multiligne]] , -- Index chaîne quelconque ['Expression rationnelle'] = [[(?:\d{1,3}\.){3}\d{1,3}]], [ [[C:\Lua\Lua.exe]] ] = true, }, -- Stockage d'une fonction f = function () return math.random(100) end, ff = fonction, -- Table comme clé -- La table étant anonyme, aucune référence a cette table est stockée et donc la valeur stockée inaccessible [ { 'a', 'b' } ] = { "aa", "bb" }, } -- Référence dans la table t.reference = t.a t.self = t -- Référence a soi même t.self.réference = t.a print(t[ { t.a, t.b } ]) -- nil car aucune valeur n'a pour clé la référence de cette nouvelle table, l'ancienne table a une référence différente

Funkcje

Funkcje matematyczne

Funkcja math.pi zwraca wartość pi.

print(math.pi) --> Affiche dans la console la valeur de pi (3.1415926535898)

Funkcja math.min (lista) zwraca najmniejszą liczbę z listy

print(math.min(6,4,2,9,1)) --> Affiche 1 dans la console étant donné que 1 est le plus petit nombre de la liste.

Funkcja math.max (lista) zwraca największą liczbę z listy

print(math.max(4,6,7,9,1)) --> Affiche 9 dans la console étant donné que ce nombre est le plus grand de sa liste.

Funkcja math.floor (x) zwraca największą liczbę całkowitą mniejszą lub równą x.

print(math.floor(1.5)) --> Retourne dans la console le nombre 1 print(math.floor(1.5 + 0.5)) --> Retourne dans la console le nombre 2

Funkcja math.abs (x) zwraca wartość bezwzględną x.

print(math.abs(-100)) --> Retourne dans la console le nombre 100.

Funkcja math.pow (x, y) zwraca x do potęgi y. Możemy również użyć wyrażenia x ^ y

print(math.pow(6,8)) --> Retourne dans la console le nombre 1679616. -- On peut également utiliser: print(6^8)

Funkcja math.random (x, y) zwraca losową liczbę między wartością x a wartością y.

local x = 1 local y = 10 print(math.random(x, y)) --> Retourne dans la console un nombre entier aléatoire entre 1 et 10.

Funkcja math.sqrt (x) zwraca pierwiastek kwadratowy z x.

local x = 6 print(math.sqrt(x)) --> Retourne la racine carrée de x(6) donc 2.4494897427832.

Funkcje kości

Funkcja os.time () zwraca liczbę sekund między 1 st styczeń 1970 o godzinie 00:00 i w drugim wywołaniu funkcji.

print(os.time())

Funkcja os.date () zwraca dzień, miesiąc, numer miesiąca, godzinę, minuty, sekundy i rok, w którym się znajdujesz, gdy wywołujesz tę "funkcję"

print(os.date()) --> Retourne Thu Jul 1 14:52:59 2021

Funkcja os.clock() zwraca czas w sekundach, który upłynął od uruchomienia Lua.

print(os.clock()) --> Retourne dans la console 853312.913685

Funkcja typu

Funkcja type (x) podaje typ x.

local a = "Bonjour" local b = 5 local c = true local d print(type(a)) --> Retourne dans la console "string" car la variable est de type string. print(type(b)) --> Retourne dans la console "number" car la variable est de type number. print(type(c)) --> Retourne dans la console "boolean" car la variable est une valeur booléene print(type(print())) --> Retourne dans la console "function" car string est une fonction. print(type(d)) --> Retourne nil dans la console "nil" car la variable d ne contient pas de valeur.

Funkcje stołu

W lua jest 9 funkcji tabeli.

Funkcja table.insert (x, y, z) pozwala wstawić wartość y do tablicy x. Możemy również nadać mu pozycję, do której należy dodać, dodając argument z. Jeśli nie podano argumentu z, wartość zostanie wyświetlona na ostatniej pozycji tabeli.

local tableau = {"je", "suis", "un", "utilisateur", "du"} table.insert(tableau, "wiki") --> Insert dans la variable tableau enla valeur wiki. Le troisième argument pour donner la position n'est pas donné donc la valeur se positionnera en dernière place du tableau.

Funkcja table.remove (x, y) umożliwia usunięcie wartości z tablicy x poprzez wskazanie pozycji wartości y.

local tableau = {"je", "suis", "un", "faux", "utilisateur"} table.remove(tableau, 4) --> Retire la valeur "faux" du tableau qui était en 4ème position. Malheureusement, on ne peut pas retirer de valeur en indiquant le nom de la valeur, si vous voulez retirer une valeur sans connaître le numéro de position, merci de suivre le paragraphe si dessous avec les boucles pairs().

Funkcja table.sort(x) służy do sortowania i modyfikowania pozycji elementów tablicy x.

local tableau = {6, 4, 5, 3, 2, 1} table.sort(tableau) --> Va venir trier les valeurs du tableau et le modifier en {1, 2, 3, 4, 5, 6}

Funkcja table.concat (x, y) pozwala na grupowanie wszystkich wartości tablicy i przekształcanie ich w ciągi znaków. Y jest opcjonalnym argumentem, którego można użyć jako separatora między poszczególnymi grupami wartości.

local tableau = {"un", "renard", "caché", "dans", 1, "arbre"} local concatTableau = table.concat(tableau) print(concatTableau) --> Retourne dans la console la valeur unrenardcachédans1arbre

Możesz także dodać separator podczas sortowania (y).

local tableau = {"un", "renard", "caché", "dans", 1, "arbre"} local concatTableau = table.concat(tableau, " | ") print(concatTableau) --> Retourne dans la console: un | renard | caché | dans | 1 | arbre. L'argument y était " | " donc y a été ajouté entre chaque valeurs transformées.

Funkcja table.foreach (x, z) nie działa już od wersji 5.1 Lua i musi zostać zastąpiona przez pętle parzyste (), patrz poniżej.

-- Maintenant obsolète.

Funkcja table.foreachi (x, y) nie działa już od wersji 5.1 Lua i musi zostać zastąpiona pętlami ipairs().

-- Maintenant obsolète.

Funkcja table.getn (x) wyświetla rozmiar tablicy x.

local tableau = {"un", "renard", "gentil"} local longueur = table.getn(tableau) print(longueur) --> Retourne dans la console la longueur du tableau "tableau" donc 3.

Funkcje ciągów

Funkcje ciągów służą do przetwarzania ciągów, jest ich 15.

String.find (x, y) pozwala szukać y postaci w x ciąg. Jeśli zwróci zero, nic nie zostało znalezione, jednak jeśli coś zostanie znalezione, wskaże, z którego miejsca znaleziono postacie.

local variable = "Bonjour, je m'appel Lua." local find = string.find(variable, "our") if find then -- Si find n'est pas égal à nil est donc il a trouvé quelque chose alors print(find) -- Retourne le numéro de commencement des caractères recherchaient. En l'occurence, 5. end

Możesz także dodać argument z, który pozwala rozpocząć wyszukiwanie znaków y od określonego znaku.

local MA_VARIABLE = "Je suis quelqu'un qui suis une autre personne." local resultat = string.find(MA_VARIABLE, "is", 17) if resultat then -- S'il a trouvé dans le string à partir du caractère 17 un mot contenant is alors: print(resultat) -- Retourne dans la console l'endroit où se situe le début des caractères souhaitaient. En l'occurence, 25. end

String.byte (x, y, z) jest używana do zwrócenia kodu numerycznego (kod znaków ASCII) łańcucha x.

local MA_VARIABLE = "Je suis une gentille personne" local RESULTAT_ASCII = string.byte(MA_VARIABLE) print(RESULTAT_ASCII) --> Retourne dans la console le résultat de la conversion de la string en code numérique ASCII

Możliwe jest również użycie argumentu y do określenia początku konwersji oraz argumentu z do określenia końca konwersji (liczba znaków).

local MA_VARIABLE = "Je suis une gentille personne" local RESULTAT_ASCII = string.byte(MA_VARIABLE, 1, 10) --> Retourne la conversion du caractère 1 à 10 de la string print(RESULTAT_ASCII) --> Retourne dans la console le résultat de la conversion en ASCII du caractère 1 à 10 de la string.

String.char (x), przetwarza się kod liczbowy x, który jest kodem ASCII do normalnej postaci.

local ASCII_CODE = 74 local RESULTAT = string.char(ASCII_CODE) print(RESULTAT) --> Retourne dans la console la conversion du code numérique ASCII en caractères numériques (de la variable ASCII_CODE)

String.dump (x) przekształca funkcji X w reprezentacji binarnej, aby mógł następnie być wywołana przez funkcję loadString (y).

function demonstration() print("Lancement de la fonction") end local dumped = string.dump(demonstration) assert(loadstring(dumped)) () --> Retourne dans la console "Lancement de la fonction."

String.Format () pozwala na powrót sformatowany ciąg znaków.

print(string.format("Je suis %s, j'adore les %s, et j'aime le chiffre %i", "gentil", "bananes", 15)) --> Je suis gentil, j'adore les bananes, et j'aime le chiffre 15 --> %s permet de rajouter des strings --> %i permet de rajouter des nombres

String.gmatch (x, y), zwraca fragment głównego łańcucha x.

for i in string.gmatch("Je suis quelqu'un de gentil", "%a+") do print(i) end Je suis quelqu un de gentil

String.gsub (x, y, z) pozwala zastąpić słowami y napisu x innego słowa z.

print(string.gsub("Je suis une personne", "une personne", "un zombie")) -- string.gsub(x(la string), y(mot à remplacer), z(mot qui remplace)) --> Je suis un zombie

String.upper (x) pozwala na powrót tekst napisu x zmieniając małe litery na wielkie litery (oprócz znaków specjalnych).

local MA_STRING = "Je suis un éléphant Rose" print(string.upper(MA_STRING)) --> JE SUIS UN éLéPHANT ROSE

String.lower (x) pozwala na powrót tekst napisu x zmieniając przypadków góry do dołu litery.

local MA_STRING = "JE SUIS QUELQU'UN" print(string.lower(MA_STRING)) --> je suis quelqu'un

String.reverse (x) pozwala na powrót tekst napisu x odwracając ciąg znaków.

local MA_STRING = "je suis un scripter" print(string.reverse(MA_STRING)) --> retpircs nu sius ej

String.sub (x, y, z), pozwala na powrót do jego części napisu x utrzymując tylko żądany znak y. Jeśli istnieje argument z, otrzyma podłańcuch od znaku y do znaku z. Jeśli argument y jest ujemny, zacznie się od tyłu i zajmie koniec zdania.

local MA_STRING = "je suis un scripter" print(string.sub(MA_STRING, 1, 7)) --> je suis print(string.sub(MA_STRING, -2)) --> e

String.rep (x, y), pozwala na mnożenie zawartość łańcucha X o numerze y.

local MA_STRING = "je suis " print(string.rep(MA_STRING, 5)) --> je suis je suis je suis je suis je suis

String.match (x, y, z) pozwala powrócić podciąg znaków napisu x biorąc, co jest pożądane przez uruchomienie tam z Z charakteru. Z jest opcjonalne.

local MA_STRING = "Je suis un scripter" print(string.match(MA_STRING, "s...")) --> suis local DEUXIEME_STRING = "Je suis un scripter" print(string.match(MA_STRING, "s...", 12)) --> scri

Funkcja par ()

Funkcja pairs (x) pozwala znaleźć różne elementy tablicy. Obecnie jest używany do zastąpienia funkcji table.foreach, która została zepsuta od wersji lua 5.1. Jego użycie jest proste, przyjmuje pierwszy argument po słowie for, aby upewnić się, że jest to indeks, który nosi numer pozycji w tablicy. A po drugim argumencie, który często nazywamy v dla wartości, który wskazuje wartość. Co daje dla i, v w parach (x) zrobić. I to numer pozycji wartości w tablicy, a v to wartość.

Aby znaleźć wartość w tablicy, wstawimy zatem argument, który będzie nazwą tablicy x.

local tableau = {"premier", "second", "troisième", "quatrième", "cinquième"} for i, v in pairs(tableau) do print(i, v) end --> Résultat dans la console: 1 premier 2 second 3 troisième 4 quatrième 5 cinquième

Aby móc usunąć wartość z tablicy, również korzystamy z tej funkcji, przetwarzając je, aż otrzymamy odpowiednią liczbę:

local tableau = {"un", "deux", "trois", "quatre", "cinq"} local compteur = 0 -- Mettre la valeur à 0 pour pouvoir ensuite ajouter une valeur à chaque traitement. for index, value in pairs(tableau) do compteur += 1 -- Ajoute un au compteur if value == "trois" then table.remove(tableau, compteur) -- Retire du tableau la valeur trois. break -- Arrêt de la boucle. end end

Funkcja pcall ()

Funkcja pcall() służy do wyodrębniania błędów zawartych w funkcji. Zapobiega to zatrzymaniu skryptu i wyświetla, czy wystąpił błąd, z możliwością zobaczenia, jaki to błąd.

pcall(function() print(table.find("s")) --> est une erreur. print("Salut") end) print("Je suis quelqu'un de gentil") --> Dans la console: Je suis quelqu'un de gentil

Funkcję pcall() można również aktywować za pomocą dwóch poprzednich zmiennych

local success, error = pcall(function() print(table.find("s")) --> est une erreur. print("Ca marche") end) print("Je suis quelqu'un de gentil") if not success then -- S'il y'a pas de succès et donc a une erreur, alors: print(error) end --> Dans la console: Je suis quelqu'un de gentil Script:2: invalid argument #1 to 'find' (table expected, got string)

Bonjour Monde

print('Hello World!')

Zastosowania

Konsole

Lua została osadzona w PlayStation Portable od Sony , dzięki programowi Lua Player, a ostatnio Lua Lua Player HM i Player Euphoria, które czytają aplikacje napisane za pomocą Lua, aby rozszerzyć możliwości konsoli. XtreamLua Player, przeznaczony do tworzenia gier wideo, pojawi się później. (Nieoficjalna) modyfikacja oprogramowania PSP umożliwiła uruchamianie programów niesygnowanych przez Sony, stąd stworzenie interpretera Lua przystosowanego do PSP.

Lua Player Euphoria używa składni oryginalnego Lua Playera i wykonuje skrypt z prędkością błyskawicy w porównaniu do Lua Player HM. Jednak Lua Player Euphoria jest mniej kompletna niż jej starszy odpowiednik.

Lua Player One, jeden z ostatnich zaktualizowanych Lua Player na PSP, to Lua Player opracowany przez społeczność hiszpańskich programistów; pozwala m.in. na zarządzanie 3D na PSP. Za pomocą tego narzędzia opracowano grę w minigolfa w kosmosie.

Lua Player Plus (LPP) został wydany na PlayStation Vita w dniu16 sierpnia 2015 r.. Ten Lua Player umożliwia tworzenie gier na konsolę.

Lua jest zawarta w podręcznej konsoli Pocket Chip o otwartym kodzie źródłowym (projekt Kickstater ). Rzeczywiście, ten ostatni zawiera program wirtualnej konsoli Pico-8, który pozwala grać i tworzyć gry w Lua.

Rozszerzenia gier wideo

Wśród gier wideo z piaskownicy , które używają zawierać Garry'ego Mod , Roblox , Rdzenia , Stormworks  (In) oraz Minecraft . W przypadku tych ostatnich ComputerCraft , rozszerzenie gry Minecraft , wykorzystuje Lua do projektowania programów graficznych lub konsol oraz autonomicznych „robotów” wewnątrz gry, pozwalających na automatyzację wielu powtarzalnych zadań; Minetest , licencjonowana przez LGPL gra typu sandbox podobna do tej ostatniej, używa Lua jako języka do pisania rozszerzeń i wewnątrz samej gry (w określonych trybach) za pomocą mikrokontrolera lub programowania FPGA .

Istnieje również silnik gry wykorzystujący Lua jako język programowania (rodzaj Pygame dla Lua): LÖVE .

Korzysta z niego wiele innych gier wideo, takich jak World of Warcraft od Blizzard Entertainment , Far Cry (i ogólnie silnik CryEngine ) od Crytek Studios , oprogramowanie do gry wieloosobowej od GTA: SA Multi Theft Auto , SimCity 4 i Natural Selection 2 od Unknown Worlds Entertainment (która między innymi opracowała Decoda , IDE dla Lua). Wreszcie niektóre skrypty Zoo Tycoon 2 ( Blue Fang Games ) są również obecne w nieskompilowanych formach w plikach gry.The Binding of Isaac: Afterbirth + to DLC do gry The Binding of Isaac: Rebirth, który umożliwia obsługę modów napisany w Lua.

Inne oprogramowanie

Lua służy również do rozszerzania możliwości odtwarzacza multimedialnego VLC , w menedżerach okien EFL Edje firmy Enlightenment, a także Awesome (jako język konfiguracji i skryptów).

Asterisk PABX oferuje Lua jako alternatywę rozszerzenia swojego planu numeracyjnego.

Witryny MediaWiki i Wikimedia używają Lua jako języka skryptowego dla modeli (zwanych modułami ).

Oprogramowanie CraftStudio wykorzystuje Lua do programowania dynamicznych elementów modeli.

Darmowe oprogramowanie interfejsu mózg-komputer OpenViBE  (w) używa Lua jako języka skryptowego, zwłaszcza do zarządzania bodźcami do eksperymentów neuronaukowych.

Robot IRC irccd używa Lua do tworzenia wtyczek.

Rspamd antyspamowy korzysta również Lua dla jego interfejsu programowania .

Lua to język skryptowy używany głównie we wbudowanym systemie operacyjnym OpenWrt działającym na wielu routerach. Graficzny interfejs administracyjny LuCI jest w całości napisany w Lua.

Lua jest językiem ojczystym Domoticz, oprogramowania do automatyzacji domu o otwartym kodzie źródłowym . Umożliwia tworzenie skryptów z zaawansowanymi funkcjami: Domoticz automatycznie uruchamia te skrypty przy zmianach stanu, w funkcji czasu itp.

Lua jest również językiem ojczystym NSBase , oprogramowania do zarządzania bazami danych. Skrypty umożliwiają zdynamizowanie formularzy i raportów. W ten sposób zintegrowany Lua umożliwia tworzenie prawdziwych aplikacji do zarządzania bazami danych.

Oprogramowanie do symulacji lotów kosmicznych Orbiter i jego dodatki (UCGO, UMmu) wykorzystują Lua do łatwego tworzenia ekranów kontrolnych ( MFD - Multi Function Display), misji lub statków. W szczególności budowanie statków, w przeciwieństwie do modułów DLL , nie wymaga kompilacji pliku C++ .

BeamNG.drive używa Lua do uzupełniania swoich równań fizycznych.

Prosody  : lekki serwer XMPP napisany w całości w Lua.

Środowisko graficzne Awesome (linux) również używa Lua w swoich plikach konfiguracyjnych od wersji 3.

FreeBSD zawiera interpreter lua w swoim programie ładującym od wersji 11.3.

Rozwiązanie łączące edycję , gradację kolorów , efekty wizualne , ruchomą grafikę i postprodukcję dźwięku Davinci Resolve wykorzystuje Lua, Py2 i Py3

Uwagi i referencje

  1. Wydanie 5.4.3  " ,29 marca 2021(dostęp 30 marca 2021 )
  2. (w) "  O  " na lua.org
  3. Luci: LuCI: interfejs konfiguracyjny OpenWrt , openwrt,12 października 2017 r.( przeczytaj online ).
  4. Witryna rozszerzenia ComputerCraft .
  5. Tryb Minetest dodający cyfrowe i analogowe obwody elektroniczne (takie jak bramki logiczne, mikrokontrolery lub FPGA) i pozwalający na automatyzację pewnych działań i zdarzeń.
  6. "  TYRON! NIE ZNOWU!  » , W (dostęp 06 stycznia 2017 ) .
  7. Wikipedia Signpost, Lua wybrany jako nowy język skryptowy szablonu , 30 stycznia 2012 ( strona projektu ).
  8. (w) Demon klienta IRC  " .
  9. (w) „  Funkcje Rspamd — Unikalne funkcje  ” w witrynie rspamd.com .
  10. „  BeamNG.drive  ” (dostęp 6 sierpnia 2016 r . ) .
  11. “  Projekt FreeBSD | FreeBSD 11.3-RELEASE Release Notes  ” , na stronie www.freebsd.org (dostęp 22 kwietnia 2021 r. )

Załączniki

Bibliografia

Powiązane artykuły

Linki zewnętrzne