Поддерживать
www.wikidata.ru-ru.nina.az
Zapros Lua perenapravlyaetsya syuda sm takzhe drugie znacheniya Ob ispolzovanii yazyka Lua v Vikipedii sm Vikipediya Moduli Stil etoj stati neenciklopedichen ili narushaet normy literaturnogo russkogo yazyka Statyu sleduet ispravit soglasno stilisticheskim pravilam Vikipedii Lua lu a s port luna skriptovyj yazyk programmirovaniya razrabotannyj v podrazdelenii Tecgraf Computer Graphics Technology Group angl Braziliya Interpretator yazyka yavlyaetsya svobodno rasprostranyaemym s otkrytym ishodnym kodom na yazyke programmirovaniya Si LuaKlass yazyka yazyk programmirovaniyaPoyavilsya v 1993Avtor Robertu Ieruzalimski Valdemar Selish Luish Enrike di FigejreduRazrabotchik Robertu IeruzalimskiRasshirenie fajlov lua luna lunaire ili anairVypusk 5 4 6 14 maya 2023 Ispytal vliyanie C Klu Simple Object Language vd DEL d Snobol Modula Modula 2 i SchemeLicenziya licenziya MITSajt lua org angl port OS krossplatformennost Mediafajly na Vikisklade Po ideologii i realizacii yazyk Lua blizhe vsego k JavaScript v chastnosti on takzhe realizuet prototipnuyu model OOP no otlichaetsya paskalepodobnym sintaksisom i bolee moshnymi i gibkimi konstrukciyami Harakternoj osobennostyu Lua yavlyaetsya realizaciya bolshogo chisla programmnyh sushnostej minimumom sintaksicheskih sredstv Tak vse sostavnye polzovatelskie tipy dannyh massivy struktury mnozhestva ocheredi spiski realizuyutsya cherez mehanizm tablic a mehanizmy obektno orientirovannogo programmirovaniya vklyuchaya mnozhestvennoe nasledovanie s ispolzovaniem metatablic kotorye takzhe otvechayut za peregruzku operacij i ryad drugih vozmozhnostej Lua prednaznachen dlya polzovatelej ne yavlyayushihsya professionalnymi programmistami vsledstvie chego bolshoe vnimanie udeleno prostote dizajna i lyogkosti obucheniya Yazyk shiroko ispolzuetsya dlya sozdaniya tirazhiruemogo programmnogo obespecheniya naprimer na nyom napisan graficheskij interfejs paketa Adobe Lightroom Takzhe poluchil izvestnost kak yazyk programmirovaniya urovnej i rasshirenij vo mnogih igrah v tom chisle Garry s Mod Roblox Minetest IstoriyaYazyk razrabotan podrazdeleniem Tecgraf gruppa tehnologij kompyuternoj grafiki Katolicheskogo universiteta Rio de Zhanejro v Brazilii istoriya yazyka vedyot otschyot s 1993 goda Avtory yazyka Robertu Ieruzalimski Luish Enrike di Figejredu Luiz Henrique de Figueiredo i Valdemar Selish Waldemar Celes Lua rasprostranyaetsya svobodno s otkrytym ishodnym kodom na yazyke Si Kak otmetil Luish Enrike di Figejredu Lua edinstvennyj yazyk programmirovaniya razrabotannyj v razvivayushejsya strane i poluchivshij vsemirnoe priznanie kotoroe v chastnosti vyrazilos v priglashenii na konferenciyu angl Istoricheskimi roditelyami yazyka byli yazyki konfigurirovaniya i opisaniya dannyh SOL Simple Object Language i DEL Data Entry Language oni byli nezavisimo razrabotany v Tecgraf v 1992 1993 godah dlya dobavleniya nekotoroj gibkosti v dva otdelnyh proekta oba byli interaktivnymi graficheskimi prilozheniyami dlya konstruktorskih nuzhd v kompanii Petrobras V SOL i DEL otsutstvovali kakie libo upravlyayushie konstrukcii i Petrobras chuvstvoval rastushuyu neobhodimost v dobavlenii k nim polnocennogo programmirovaniya Kak pishet avtor yazyka v The Evolution of Lua V 1993 godu edinstvennym realnym pretendentom byl Tcl kotoryj byl specialno sozdan dlya vstraivaniya v prilozheniya Odnako u Tcl byl neprivychnyj sintaksis ne bylo horoshej podderzhki opisaniya dannyh i zapuskalsya on tolko na platformah Unix My ne rassmatrivali Lisp ili Scheme iz za ih nedruzhelyubnogo sintaksisa Python byl eshyo vo mladencheskom vozraste V atmosfere sdelaj sam kotoraya togda carila v Tecgraf bylo vpolne estestvenno chto my reshili razrabotat svoj sobstvennyj skriptovyj yazyk Iz za togo chto bolshinstvo polzovatelej ne bylo professionalnymi programmistami yazyku sledovalo izbegat zamyslovatogo sintaksisa i semantiki Realizaciya novogo yazyka dolzhna byt legko portiruema tak kak klienty Tecgraf imeli ochen raznoobraznye platformy Nakonec poskolku my ozhidali chto drugim produktam Tecgraf takzhe ponadobitsya vstroennyj skriptovyj yazyk novyj yazyk dolzhen sledovat primeru SOL i predostavlyatsya v vide biblioteki s API na C Lua 1 0 byla sproektirovan takim obrazom chto konstruktory obektov togda chut otlichavshiesya ot tekushego lyogkogo i gibkogo stilya vklyuchali v sebya sintaksis yazyka SOL otsyuda nazvanie Lua po portugalski sol solnce lua luna Upravlyayushie konstrukcii Lua v osnovnom zaimstvovany iz Moduly 2 if while repeat until hotya na nih takzhe povliyali Klu parallelnoe prisvaivanie mnozhestvennoe vozvrashaemoe znachenie funkcii kak bolee prostaya alternativa vmesto peredachi parametrov po ssylke ili yavnyh ukazatelej C otlichnaya ideya obyavlyat lokalnye peremennye lish togda kogda oni nuzhny Snobol i awk associativnye massivy Sozdateli Lua takzhe priznayut chto edinyj vezdesushij mehanizm strukturirovaniya dannyh v Lispe i Scheme svyaznyj spisok okazal bolshoe vliyanie na ih reshenie o vybore tablic v kachestve osnovnoj struktury dannyh dlya Lua Versii Lua vplot do 5 0 vypuskalis pod licenziej podobnoj licenzii BSD Nachinaya s versii 5 0 i vyshe Lua rasprostranyaetsya pod licenziej MIT Obe licenzii yavlyayutsya razreshitelnymi i prakticheski identichny Obshaya harakteristikaYazyk prednaznachen dlya ispolzovaniya v kachestve otdelnogo libo vstroennogo v prilozhenie skriptovogo yazyka On iznachalno sozdavalsya dostatochno prostym i kompaktnym chtoby pomestitsya na razlichnyh platformah i obespechit priemlemuyu proizvoditelnost Takzhe pri proektirovanii uchityvalis trebovaniya prostoty obucheniya i vozmozhnosti ispolzovaniya ne professionalnymi programmistami Lua eto procedurnyj dinamicheski tipizirovannyj modulnyj yazyk s avtomaticheskim upravleniem pamyatyu Vklyuchaet bazovye elementy dlya podderzhki funkcionalnogo i obektnogo stilej programmirovaniya Takim obrazom yazyk mozhno cchitat multiparadigmennym Vstroennye sredstva parallelnogo programmirovaniya pozvolyayut pisat mnogopotochnye programmy tolko sredstvami yazyka ne obrashayas k API operacionnoj sistemy ili vneshnim bibliotekam Tak kak osnovnym naznacheniem Lua yavlyaetsya vstraivanie on imeet effektivnye sredstva mezhyazykovogo vzaimodejstviya orientirovannye glavnym obrazom na vyzov bibliotek Si i na rabotu v Si okruzhenii Yazyk podderzhivaet nebolshoe kolichestvo vstroennyh tipov dannyh logicheskie znacheniya chisla stroki funkcii potoki Tipichnye kombinirovannye struktury dannyh takie kak massivy nabory spiski i zapisi otsutstvuyut vmesto vseh ih ispolzuetsya odna bazovaya struktura Lua tablica sm nizhe Otdelnyj tip userdata prednaznachen specialno dlya nizkourovnevogo programmirovaniya i obmena dannymi s vneshnim kodom na drugih yazykah Funkcii v Lua yavlyayutsya obektami pervogo klassa mogut prisvaivatsya i peredavatsya v parametrah Podderzhivayutsya zamykaniya est vozmozhnost sozdaniya funkcij vysshih poryadkov Obektnaya sistema prototipnaya otsutstvuet yavnaya podderzhka nasledovaniya odnako ono legko realizuetsya s pomoshyu metatablic Voobshe Lua stremitsya obespechit gibkie metafunkcii kotorye mogut byt rasshireny po mere neobhodimosti a ne postavlyat nabor funkcij specifichnyh dlya konkretnoj paradigmy programmirovaniya Kak rezultat osnova yazyka prosta i legko adaptiruema k bolshinstvu prilozhenij Predostavlyaya minimalnyj nabor bazovyh sredstv Lua pytaetsya najti balans mezhdu moshnostyu i razmerom SintaksisSintaksis Lua v osnovnom postroen na osnove pozdnih paskalepodobnyh yazykov takih kak Modula 2 ili Oberon Format zapisi teksta svobodnyj komandy v tekste programmy razdelyayutsya lyubymi probelnymi simvolami Dopuskaetsya no ne yavlyaetsya obyazatelnym primenenie tochki s zapyatoj dlya razdeleniya operacij V odnom iz intervyu Robertu Ieruzalimski zametil chto sintaksis Lua eto kompromissnoe reshenie kotoroe on byl vynuzhden prinyat chtoby uprostit osvoenie yazyka neprofessionalnymi programmistami On oharakterizoval etot sintaksis kak dovolno mnogoslovnyj otmetiv chto lichno dlya sebya predpochyol by bolee kratkuyu notaciyu Leksika Osnovnoj alfavit yazyka anglijskij v strokovyh literalah dopuskaetsya ispolzovanie simvolov drugih yazykov Identifikatory mogut sostoyat iz bukv cifr i znaka podchyorkivaniya no ne mogut nachinatsya s cifry ili sovpadat s odnim iz klyuchevyh slov Rukovodstvo po yazyku ne rekomenduet ispolzovat identifikatory nachinayushiesya s podchyorkivaniya tak kak takie identifikatory ispolzuyutsya dlya sistemnyh celej Yazyk registrozavisimyj vse klyuchevye slova pishutsya v nizhnem registre identifikatory razlichayushiesya tolko registrom bukv schitayutsya razlichnymi Sleduyushie 22 klyuchevyh slova ne mogut byt ispolzovany dlya imyon and break do else elseif end false goto for function if in local nil not or repeat return then true until while Kommentarii Dlya kommentariev ispolzuetsya sintaksis analogichnyj realizovannomu v Ade SQL i VHDL Prostoj odnostrochnyj kommentarij v Lua nachinaetsya s dvojnogo minusa i prodolzhaetsya do konca stroki dim one two three Strochnyj kommentarij ne obyazan nachinatsya s nachala stroki on mozhet sledovat za drugimi yazykovymi konstrukciyami poyasnyaya ih Mnogostrochnyj kommentarij nachinaetsya s idushih podryad za dvumya minusami dvuh otkryvayushihsya kvadratnyh skobok i prodolzhaetsya do dvuh podryad zakryvayushihsya kvadratnyh skobok Kak zdes Interesnyj effekt mozhno poluchit sochetaniem strochnyh i mnogostrochnyh kommentariev Chtoby raskommentirovat kod nizhe dostatochno dobavit v etoj stroke probel mezhdu minusami i skobkami for i 1 dim do print dim i end Esli vyshe mezhdu minusami i skobkami budet dobavlen probel to zdes konec mnogostrochnogo kommentariya prevratitsya v obychnyj strochnyj Tipy dannyh Lua predstavlyaet soboj yazyk s neyavnym dinamicheskim opredeleniem tipov dannyh Peremennaya yazyka mozhet soderzhat znacheniya lyubogo tipa Vse znacheniya v Lua mogut hranitsya v peremennyh ispolzovatsya v kachestve argumentov pri vyzove funkcij i vozvrashatsya v vide rezultata ih vypolneniya V Lua vosem osnovnyh tipov nil neopredelennyj boolean logicheskij number chislovoj string strokovyj function funkciya userdata polzovatelskie dannye thread potok table tablica nil eto tip znacheniya nil pustoe znachenie glavnoe svojstvo kotorogo otlichatsya ot vseh ostalnyh znachenij i oboznachat otsutstvie prigodnogo znacheniya K tipu boolean otnosyatsya znacheniya false lozh i true istina K tipu number otnosyatsya obychno veshestvennye chisla double V pervyh versiyah Lua celye chisla ne vydelyalis v otdelnyj tip takoe reshenie motiviruetsya tem chto veshestvennoe predstavlenie pozvolyaet tochno predstavit dostatochno shirokij diapazon celyh chisel Nachinaya s versii 5 3 dobavlena vozmozhnost yavnogo opredeleniya celogo ili veshestvennogo formata chisla Vnutrennee predstavlenie chisel mozhno izmenit pri sborke interpretatora Tip stringoboznachaet massivy simvolov Stroki Lua mogut soderzhat lyubye 8 bitnye simvoly vklyuchaya nol 0 Stroki neizmenyaemy Strokovye literaly mogut zapisyvatsya v odinarnyh ili dvojnyh kavychkah sluzhebnye simvoly pomeshayutsya v nih v standartnoj dlya C notacii s vedushim obratnym sleshem Mnogostrochnye literaly ogranichivayutsya dvumya podryad otkryvayushimisya i dvumya podryad zakryvayushimisya kvadratnymi skobkami Vstroennaya v yazyk podderzhka Yunikoda otsutstvuet hotya dopuskaetsya ispolzovanie simvolov UTF 8 v strokovyh literalah a sama sistema predstavleniya UTF 8 pozvolyaet vvodit vyvodit i chastichno obrabatyvat stroki v etoj kodirovke standartnymi sistemnymi sredstvami V poslednie versii Lua vhodit biblioteka utf8 obespechivayushaya bolee razvituyu podderzhku UTF 8 sushestvuyut takzhe biblioteki storonnih razrabotchikov predostavlyayushie sredstva raboty s Yunikod strokami v razlichnyh kodirovkah Funkcii v Lua yavlyayutsya polnopravnymi obektami dopuskayushimi prisvaivanie peredachu funkcii v parametre i vozvrat funkcii kak odnogo iz znachenij Tip thread imeyut soprogrammy tip userdata prednaznachen dlya predstavleniya vneshnih dannyh poluchennyh ili predostavlyaemyh iz v kod na drugom yazyke glavnym obrazom na C C Operacii Prisvaivanie Operatorom prisvaivaniya sluzhit simvol Podobno takim skriptovym yazykam kak Perl Python Ruby i Icon dopuskaet parallelnoe prisvaivanie V prostejshem sluchae eto pozvolyaet pisat vyrazheniya vida x y y x V otlichie naprimer ot yazyka Go parallelnoe prisvaivanie v Lua ochen liberalno ono ne trebuet tochnogo sootvetstviya chisla peremennyh chislu znachenij Esli znachenij bolshe chem peremennyh to poslednie znacheniya otbrasyvayutsya esli znachenij menshe poslednie peremennye v spiske poluchayut znachenie nil Sravneniya i logicheskie operatory Operatory sravneniya lt gt lt gt poslednie dva oznachayut sootvetstvenno sravnenie na ravenstvo i na neravenstvo Sravneniya na ravenstvo i neravenstvo primenimy k lyubym tipam dannyh prochie tolko k strokam i chislam Logicheskie operatory and or not logicheskie i ili i ne sootvetstvenno mogut primenyatsya k znacheniyam lyubyh tipov i vozvrashayut true libo false V parametrah etih operaciya znacheniya nil i false schitayutsya lozhnymi lyubye drugie znacheniya istinnymi V otlichie ot C i ryada drugih yazykov dazhe chislovoj nul 0 ili pustaya stroka s tochki zreniya logicheskih operatorov predstavlyayut znachenie istina Vychislenie binarnyh logicheskih operatorov tradicionno vypolnyaetsya do teh por poka rezultat ne budet opredelyon prichyom v kachestve rezultata vozvrashaetsya poslednee vychislennoe podvyrazhenie Poetomu ih mozhno ispolzovat kak ternarnyj operator v yazyke Si analogichno r a lt b f a f b v Si r a lt b and f a or f b r poluchit znachenie funkcii f ot menshego iz dvuh znachenij a i b pri uslovii chto f a ne ravno nil ili false Arifmeticheskie operatory slozhenie vychitanie umnozhenie delenie unarnyj minus ostatok ot deleniya vozvedenie v stepen Vse arifmeticheskie operatory podderzhivayut veshestvennye operandy davaya predskazuemyj rezultat Tak x 0 5 vozvrashaet kvadratnyj koren iz x x 1 3 znachenie obratnoe kubicheskomu kornyu iz x Operator opredelyaetsya vyrazheniem a b a math floor a b b gde funkciya math floor vychislyaet celuyu chast svoego argumenta Dlya celyh argumentov ego rezultat vpolne obychen Dlya veshestvennogo delimogo nuzhno uchityvat chto operaciya ne proizvodit nikakih dopolnitelnyh okruglenij ili otbrasyvaniya drobnoj chasti poetomu rezultat sohranit drobnuyu chast delimogo Naprimer math pi 2 vernyot ne 1 a 1 1415926535898 Takaya realizaciya dayot nekotorye dopolnitelnye vozmozhnosti Naprimer dlya usecheniya x do tryoh znakov posle zapyatoj dostatochno vzyat vyrazhenie x x 0 001 Tablicy Tablica v Lua eto dinamicheskij geterogennyj associativnyj massiv to est mnozhestvo par klyuch znachenie Klyuchami mogut byt znacheniya lyubyh tipov Lua krome nil Klyuchi takzhe mogut byt literalami identifikatorami Lua Zapis nil v element tablicy ravnosilna udaleniyu dannogo elementa Tablicy yavlyayutsya edinstvennym v Lua sostavnym tipom dannyh Oni yavlyayutsya fundamentom dlya vseh polzovatelskih tipov dannyh takih kak struktury massivy mnozhestva i drugie Tablica obshego vida empty Pustaya tablica empty 1 pervyj Dobavlenie elementa s celym indeksom empty 3 vtoroj Dobavlenie elementa s celym indeksom empty tretij tretij Dobavlenie elementa so strokovym indeksom empty 1 nil Udalenie elementa iz tablicy Klassicheskij massiv stroki indeksiruyutsya po umolchaniyu celymi chislami nachinaya s 1 days1 ponedelnik vtornik sreda chetverg pyatnica subbota voskresene Massiv s proizvolnoj indeksaciej days2 0 voskresene 1 ponedelnik 2 vtornik 3 sreda 4 chetverg 5 pyatnica 6 subbota Zapis struktura znacheniya razlichnyh tipov indeksiruyutsya literalami person tabnum 123342 Tabelnyj nomer fio Ivanov Stepan Vasilevich F I O post slesar instrumentalshik Dolzhnost salary 25800 45 Oklad sdate 23 10 2013 Data priyoma na rabotu bdate 08 08 1973 Data rozhdeniya pfio person fio Obrashenie k elementu struktury Mnozhestvo indeksy ispolzuyutsya dlya hraneniya znachenij workDays ponedelnik true vtornik true sreda true chetverg true pyatnica true workDays subbota true Dobavlenie subboty v chislo rabochih dnej workDays sreda nil Po sredam bolshe ne rabotaem Proverka yavlyaetsya li d rabochim dnyom if workDays d then print d rabochij den else print d vyhodnoj den end Multimnozhestva mnozhestva kotorye mogut soderzhat bolee odnogo ekzemplyara odnogo i togo zhe elementa realizuyutsya analogichno poslednemu primeru tolko v kachestve znachenij ispolzuyutsya ne logicheskie a celye schyotchiki chisla sootvetstvuyushih elementov v mnozhestve Svyazannye spiski mogut byt predstavleny kak massivy dvuhelementnyh massivov hranyashih znachenie i ssylku na sleduyushij element Mnogomernye massivy mogut byt realizovany kak massivy massivov Bolee slozhnye struktury takie kak ocheredi grafy seti takzhe realizuyutsya na osnove tablic konkretnyj sposob realizacii opredelyaetsya zadachej Zamykaniya Lua podderzhivaet koncepciyu zamykanij naprimer function makeaddfunc x Vozvrashaet novuyu anonimnuyu funkciyu kotoraya dobavlyaet x k argumentu return function y Kogda my ssylaemsya na peremennuyu x kotoraya vne tekushej oblasti i vremya zhizni kotoroj menshe chem etoj anonimnoj funkcii Lua sozdayot zamykanie return x y end end plustwo makeaddfunc 2 t e plustwo function y return 2 y end print plustwo 5 Vyvodit 7 Kazhdyj raz kogda vyzyvaetsya makeaddfunc sozdayotsya novoe zamykanie dlya peremennoj x tak chto kazhdaya vozvrashaemaya anonimnaya funkciya budet ssylatsya na svoj parametr x Kak i u lyubogo drugogo obekta Lua vremenem zhizni zamykaniya upravlyaet sborshik musora Sredstva i metody programmirovaniyaMetatablicy Mehanizm metatablic obespechivaet mnogie vozmozhnosti v drugih yazykah predostavlyaemye za schyot vvedeniya otdelnyh sintaksicheskih mehanizmov Metatablicy po strukture yavlyayutsya obychnymi tablicami Lua podchinyayushimisya vsem pravilam i ogranicheniyam yazyka Osobennost ih sostoit v primenenii Metatablica hranit dopolnitelnye metadannye tipov i obektov to est informaciyu o parametrah i funkciyah svyazannyh s nimi Svedeniya hranyashiesya v metatablicah ispolzuyutsya interpretatorom Lua ih ispolzovanie pozvolyaet izmenit ili rasshirit funkcionalnost programmnyh obektov Metatablica v Lua mozhet byt svyazana so znacheniem lyubogo tipa Skalyarnye tipy dannyh vse krome userdata i tablic imeyut obshie metatablicy dlya kazhdogo tipa Tablicy i znacheniya tipa userdata imeyut individualnye ssylki na metatablicy v kazhdom ekzemplyare Izmenyat metatablicy vseh tipov krome tablic mozhno tolko posredstvom vneshnego koda na Si Neposredstvenno iz Lua dostupny tolko metatablicy tablic Sozdannaya s nulya tablica Lua ne imeet metatablicy eyo ssylka na metatablicu ravna nil No metatablica dlya neyo mozhet byt v lyuboj moment sozdana libo poluchena ot drugoj tablicy Vstroennaya funkciya getmetatable t vozvrashaet metatablicu tablicy t a funkciya setmetatable t m ustanavlivaet dlya tablicy t metatablicu m Dlya metatablic dokumentirovan nabor polej kotorye mogut ispolzovatsya interpretatorom yazyka Dlya ukazaniya na osobuyu rol etih polej dlya nih prinyato specialnoe pravilo imenovaniya ih identifikatory nachinayutsya s dvuh podchyorkivanij Nekotorye iz takih polej soderzhat informaciyu o specificheskih svojstvah obekta k kotoromu otnositsya metatablica Naprimer parametr mode kogda on zadan mozhet prevratit tablicu v slabuyu to est tablicu vse ssylki na obekty kotoroj yavlyayutsya slabymi ssylkami No znacheniyami bolshinstva vozmozhnyh polej metatablicy yavlyayutsya tak nazyvaemye metametody to est ssylki na funkcii kotorye interpretator vyzyvaet pri opredelyonnyh usloviyah Obshaya logika ispolzovaniya metametodov interpretatorom sostoit v sleduyushem kogda interpretator vstrechaet v programme operaciyu kotoraya ne opredelena dlya obekta operanda on obrashaetsya k svyazannoj s operandom metatablice nahodit v nej sootvetstvuyushij metametod i vyzyvaet ego Sozdanie operacii slozheniya dlya tablic Operandy t1 1 2 3 t2 10 20 30 Sozdanie metatablicy mt Zapis v metatablicu metametoda add mt add function a b local res for k in pairs a do res k a k b k end return res end Privyazka metatablicy k tablice t1 setmetatable t1 mt Teper slozhenie tablic korrektnaya operaciya t3 t1 t2 soedinyaem s t3 metatablicu s metametodom tostring setmetatable t3 tostring function t local res n for v in pairs t do res res tostring v end return res n end V rezultate budet vyvedeno 11 22 33 for v in ipairs t3 do io write v end print tostring t3 vyvedet 11 22 33 V Lua podderzhivayutsya metametody dlya vseh arifmeticheskih operacij i operacij sravneniya tak chto s ih pomoshyu mozhno realizovat arifmetiku dlya lyubyh obektov sozdannyh programmistom Pomimo standartnyh mozhno ispolzovat tak nazyvaemye bibliotechnye metametody kotorye podderzhivayutsya ne yadrom yazyka a konkretnymi bibliotekami V primere vyshe eto metametod tostring podderzhivaemyj bibliotekoj string etot metod vypolnyaet konvertaciyu tablicy v stroku Naibolshij interes predstavlyaet pole index Obrashenie k nemu proishodit togda kogda interpretator pytaetsya prochitat element tablicy no ne nahodit ego Pole index mozhet ssylatsya libo na tablicu libo na metod V pervom sluchae interpretator ne najdya iskomogo znacheniya v osnovnoj tablice budet iskat ego v tablice index Vo vtorom vmesto obrasheniya k tablice budet proishodit vyzov etogo metoda Zadavaya tablicy ili metametody dlya dannogo polya v Lua mozhno realizovat nasledovanie sokrytie dannyh obekta otslezhivanie operacij s dannymi tablicy i mnogoe drugoe Obektno orientirovannoe programmirovanie Osnovoj dlya OOP v Lua yavlyayutsya tablicy V principe tablica i est obekt v OOP smysle tak kak ona mozhet imet polya imenovannye s pomoshyu identifikatorov i hranit v etih polyah proizvolnye znacheniya svojstva obekta i funkcii dlya realizacii povedeniya obekta metody obekta Nekotoryj sintaksicheskij sahar predostavlyaemyj Lua delaet opisanie i obrashenie s obektami bolee privychnym dlya programmistov imeyushih opyt raboty s tradicionnymi OOP yazykami Ponyatiya klassa v Lua net poetomu opisyvaetsya otdelnyj obekt i vse polya i metody otnosyatsya imenno k nemu Svojstva opisyvayutsya analogichno elementam tablicy s klyuchami identifikatorami metody kak polya funkcii Podobno klassicheskomu Oberonu opisanie metodov vklyuchaet yavnoe ukazanie v pervom parametre tak nazyvaemogo poluchatelya parametra kotoryj pri vyzove metoda ssylaetsya na obekt dlya kotorogo on vyzvan No pomimo standartnogo obrasheniya k polyu tablicy cherez tochku kotoroe trebuet i v vyzove metoda yavno ukazyvat poluchatelya Lua podderzhivaet dopolnitelnyj sintaksis kogda v vyzove ili opisanii metoda ego zagolovok zapisyvayutsya v vide Obekt metod to poluchatel ne ukazyvaetsya Pri etom v tele metoda on vsyo ravno dostupen pod imenem self Obekt Account Obekt schyot id name balance 0 svojstva obekta nomer nazvanie balans credit function self v metod rashod opisanie vnutri obekta s yavnym ukazaniem poluchatelya if self balance lt v then error Nedostatochno deneg na schyote end self balance self balance v end function Account debet v metod prihod vneshnee sokrashyonnoe opisanie self ne ukazyvaetsya self balance self balance v end Account debet Account 10000 vyzov metoda polnyj variant Account credit 5000 vyzov metoda sokrashyonnyj variant Nasledovanie v tom chisle mnozhestvennoe realizuetsya s pomoshyu metatablic i metametodov Takzhe s pomoshyu metametodov mozhno realizovat sokrytie dannyh i kontroliruemyj dostup k polyam tablicy obekta Esli sravnivat dannyj podhod s drugimi yazykami gde vsyo vysheperechislennoe realizuetsya s pomoshyu specialnyh yazykovyh sredstv to mozhno zametit chto realizaciya Lua slozhnee i trebuet bolee tshatelnogo kodirovaniya no obespechivaet bo lshuyu gibkost i uproshaet interpretator Primery kodaKlassicheskaya programma Hello world na Lua vyglyadit tak print Hello world Faktorial primer rekursivnoj funkcii function factorial n if n 0 then return 1 else return n factorial n 1 end end Cikl so schyotchikom for i 1 5 do instrukcii operacii end Rabota s funkciyami kak s obektami pervogo klassa demonstriruetsya v sleduyushem primere v kotorom modificiruetsya povedenie funkcii print do local oldprint print Sohranyaem tekushuyu funkciyu print kak oldprint function print s Pereopredelyaem funkciyu print if s foo then oldprint bar else oldprint s end end end Lyuboj budushij vyzov print teper budet perenapravlen k novoj funkcii i blagodarya podderzhke v Lua leksicheskogo konteksta staraya funkciya print budet dostupna tolko posredstvom novoj modificirovannoj funkcii print Lua takzhe podderzhivaet zamykaniya kak opisano vyshe v sootvetstvuyushem razdele Klyuchevoj osobennostyu Lua yavlyaetsya rasshiryaemaya semantika mehanizm metatablic dayot bolshie vozmozhnosti po nastrojke unikalnogo povedeniya dlya tablic Lua V sleduyushem primere demonstriruetsya beskonechnaya tablica Dlya lyubogo n displaystyle n fibs n dast n displaystyle n e chislo Fibonachchi s ispolzovaniem memoizacii fibs 1 1 Pervonachalnye znacheniya dlya fibs 1 i fibs 2 setmetatable fibs index function name n Vyzov funkcii esli fibs n ne sushestvuet name n name n 1 name n 2 Raschyot i memoizaciya fibs n return name n end Lua pozvolyaet ispolzovat logicheskie operatory and i or dlya vvoda ternarnyh konstrukcij kak naprimer v C ili obrashenie k odnomu iz sushestvuyushih obektov do local num tonumber io read Zapisyvanie v peremennuyu vvedyonnoj iz konsoli informacii i preobrazovanie eyo k celochislennomu tipu print num 1 and Vy vveli pravilnoe chislo or Vy vveli nepravilnoe chislo Esli peremennaya num ravnyaetsya 1 togda v konsoli vyveditsya tekst posle and vo vseh ostalnyh sluchayah posle or end Obrashenie k sushestvuyushej tablice i poluchenie znacheniya po pervomu indeksu do local tbl nil local tbl2 1 print tbl or tbl2 1 Vyveditsya chislo 1 tak kak v tablice tbl2 na indekse 1 prisvoeno eto znachenie end Vyzov funkcii iz odnoj iz sushestvuyushih tablic do local tbl nil local tbl2 tbl2 DoSomething function print Delat chto to end tbl or tbl2 DoSomething endRealizaciyaKak i mnogie interpretiruemye yazyki programmirovaniya realizaciya Lua imeet otdelno kompilyator s ishodnogo yazyka v ispolnyaemyj bajt kod i virtualnuyu mashinu dlya ispolneniya sgenerirovannogo bajt koda Prichyom bajt kod eto ne komandy stekovoj mashiny a komandy nekoego virtualnogo processora s neskolkimi registrami chto povyshaet effektivnost ispolneniya V standartnoj virtualnoj mashine Lua ispolzuetsya raspredelenie pamyati so sborkoj musora analogichno Java ili NET Lua ispolzuet edinyj strokovyj pul chto pozvolyaet snizit rashody pamyati na hranenie strok Dlya zadach kritichnyh po vremeni imeetsya JIT kompilyator Lua LuaJIT Takzhe razrabotan kompilyator llvm lua generiruyushij kod dlya virtualnoj mashiny LLVM predostavlyayushej vozmozhnost posleduyushej kompilyacii v ochen effektivnyj mashinnyj kod dlya processorov razlichnoj arhitektury IspolzovanieSm takzhe kategoriyu Programmnoe obespechenie ispolzuyushee Lua V nastoyashee vremya ispolzuetsya v razlichnyh proektah gde trebuetsya vstroit dostatochno bystryj i netrudnyj v osvoenii skriptovyj yazyk programmirovaniya naprimer v razrabotke igr gde Lua chasto ispolzuetsya v kachestve proslojki mezhdu igrovym dvizhkom i dannymi dlya napisaniya scenariev povedeniya i vzaimodejstviya obektov Blagodarya kompaktnosti primenim i v portativnyh ustrojstvah v chastnosti odin iz graficheskih mikrokalkulyatorov Texas Instruments a imenno TI Nspire CX ispolzuet yazyk LUA pomimo tradicionnogo dlya takogo klassa ustrojstv Bejsika Igry Pervymi v razrabotku kompyuternyh igr yazyk Lua vnedrila kompaniya LucasArts nachinaya s igry Grim Fandango Avtory yazyka v svoyom doklade na konferencii angl vspominayut chto v yanvare 1997 oni poluchili soobshenie ot Breta Mogilefski glavnogo razrabotchika Grim Fandango gde on pisal chto prochitav o yazyke v state 1996 goda v Dr Dobb s Journal on planiruet zamenit ispolzuemyj imi samodelnyj skriptovyj yazyk SCUMM na Lua V rezultate im byl sozdan igrovoj dvizhok GrimE ispolzuemyj takzhe bolee pozdnim kvestom ot LucasArts Escape from Monkey Island V 2003 godu v rezultate oprosa na sajte GameDev net Lua byl priznan samym populyarnym skriptovym yazykom dlya razrabotki igr Primerom igry programmiruemoj s pomoshyu Lua yavlyaetsya World of Warcraft Na yazyke Lua opisyvayutsya urovni igry golovolomki Enigma Dostupen ryad svobodnyh igrovyh dvizhkov programmiruemyh na Lua takih kak Defold neavtoritetnyj istochnik znachimost fakta arkadnyj dvizhok LOVE igrovoj konstruktor Novashell i orientirovannyj na kvesty preimushestvenno tekstovye INSTEAD Takzhe ispolzuetsya v aviasimulyatore X Plane v dvizhke X Ray dlya S T A L K E R Dlya populyarnoj igry Minecraft sozdany modifikacii ComputerCraft i ego bolee sovershennyj analog OpenComputers kotorye dobavlyayut kompyutery programmiruemye na yazyke Lua Izvestnaya igra Garry s Mod programmiruetsya a takzhe podderzhivaet modifikacii napisannye na Lua Komanda Croteam razrabotchiki Serious Sam i The Talos Principle ispolzuet Lua v skriptah nachinaya s versii Serious Engine 3 5 Dlya igry GTA San Andreas sozdayutsya modifikacii napisannye na yazyke Lua i podderzhivaemye plaginom Moonloader Takzhe igra podderzhivaet programmirovanie skriptov na yazyke Lua Igrovaya platforma Roblox ispolzuet Lua v kachestve yazyka kodirovaniya igr i upravleniya igrovoj sredoj Soobshestvom igry Satisfactory sozdan mod Ficsit Networks dayushij vozmozhnost programmirovat kakie libo dejstviya na yazyke Lua V igre Factorio ispolzuetsya Lua dlya sozdaniya modov V igre Dual Universe ispolzuetsya dlya vnutri igrovoj mehaniki i programmirovaniya igrovyh blokov znachimost LuaTeX Programma kompyuternoj vyorstki LuaTeX rasshirennaya versiya pdfTeX ispolzuet Lua kak vstroennyj skriptovyj yazyk RPM Paketnyj menedzher RPM soderzhit vstroennyj interpretator Lua IDESushestvuet kak minimum dve rodnye sredy razrabotki dlya Lua ZeroBrane Studio multiplatformennaya sreda razrabotki napisannaya na samom Lua Decoda sreda razrabotki pod Windows napisannaya na C s bogatymi vozmozhnostyami otladki Lua skriptov v tom chisle v rabotayushih prilozheniyah Na 2018 god poslednij vypusk sredy datirovalsya 2014 godom i imeet status beta versii Krome togo Lua podderzhivaetsya nekotorymi universalnymi IDE v chastnosti Geany dlya sredy Eclipse plagin EmmyLua dlya sredy IntelliJ IDEA takzhe osnashyonnyj proverkoj sintaksisa na letu i razvitoj sistemoj annotacij tipov rasshirenie dlya Visual Studio Code s podderzhkoj IntelliSense podsvetki sintaksisa formatirovaniya koda otladki Sushestvoval modul podderzhki Lua dlya sredy NetBeans no ego razvitie prekratilos v 2013 godu i on dostupen tolko dlya versii NetBeans 7 4 i bolee rannih V NetBeans 8 plagin ne podderzhivaetsya Sm takzhe angl Primechaniyahttps www lua org authors html de Figueiredo L H ANN Lua 5 4 6 now available angl 2023 Lua about Lua 5 1 Reference Manual 2019 A Look at the Design of Lua angl New York City Association for Computing Machinery 2018 ISSN 0001 0782 1557 7317 https www lua org license html The lua Open Source Project on Open Hub Licenses Page 2006 https www lua org about html About Lua neopr Lua org Data obrasheniya 19 iyunya 2013 26 dekabrya 2018 goda Byankucci Uorden 2011 s 216 The evolution of an extension language a history of Lua neopr 2001 Data obrasheniya 24 avgusta 2016 14 oktyabrya 2017 goda HOPL 2007 p 2 1 2 26 Figueiredo L H Ierusalimschy R Celes W 1996 12 Lua an Extensible Embedded Language A few metamechanisms replace a host of features Dr Dobb s Journal Vol 21 no 12 pp 26 33 20 oktyabrya 2014 Data obrasheniya 20 sentyabrya 2014 Lua 5 1 Reference Manual neopr Data obrasheniya 5 noyabrya 2019 15 noyabrya 2013 goda The LuaJIT Project neopr Data obrasheniya 18 maya 2009 16 aprelya 2009 goda llvm lua JIT Static compiler for Lua using LLVM on the backend neopr Data obrasheniya 21 yanvarya 2009 22 yanvarya 2009 goda Bret Mogilefsky Lua in Grim Fandango neopr Data obrasheniya 9 dekabrya 2011 Arhivirovano 4 fevralya 2012 goda HOPL 2007 s 11 Paul Emmerich Beginning Lua with World of Warcraft Add ons Apress July 2009 ISBN 1430223715 James Whitehead II Bryan McLemore and Matthew Orlando World of Warcraft Programming Wiley May 2008 ISBN 0470229810 Tom Gutschmidt Ch 8 The Lua Game Community Game Engines Game Programming with Python Lua and Ruby Premier Press 2003 472 p ISBN 1 59200 079 7 Defold game development manual Lua in Defold neopr Defold game engine Data obrasheniya 2 marta 2017 3 marta 2017 goda Dj Walker Morgan The H Speed Guide to Lua Developing with Lua neopr The H 17 aprelya 2012 Data obrasheniya 26 fevralya 2015 26 fevralya 2015 goda Darmie Akinlaja LOVE for Lua Game Programming Packt 2013 106 p ISBN 978 1 78216 160 8 Alan Thorn Chapter 8 Novashell and 2D Games Cross Platform Game Development Jones amp Bartlett Learning 2008 P 225 264 421 p ISBN 978 1 59822 056 8 Pyotr Kosyh INSTEAD Kak vse nachinalos IFPrint org Mart 18 2013 Vyp 1 ISSN 2307 535X 26 fevralya 2015 goda Ronnie Tucker Full Circle Magazine 90 THE INDEPENDENT MAGAZINE FOR THE UBUNTU LINUX COMMUNITY Full Circle Magazine 2014 10 31 50 s Matthew Monk Simon Monk ComputerCraft Lua Programming in Minecraft CreateSpace Independent Publishing Platform 2013 01 28 58 s ISBN 9781481927659 Zero Cool Istoriya tehnologij Serious Engine History Test GPU neopr gamegpu com Data obrasheniya 10 aprelya 2016 20 aprelya 2016 goda Izbrannoe Lua ASI MoonLoader BlastHack Cheating as Art 29 yanvarya 2018 Data obrasheniya 28 yanvarya 2018 Learn Roblox Coding and Scripts neopr developer roblox com Data obrasheniya 23 avgusta 2019 23 avgusta 2019 goda FicsIt Networks Satisfactory Modding Documentation angl docs ficsit app Data obrasheniya 24 marta 2022 Modding Factorio Wiki neopr wiki factorio com Data obrasheniya 1 iyunya 2022 1 iyunya 2022 goda API Docs Factorio neopr lua api factorio com Data obrasheniya 1 iyunya 2022 18 maya 2022 goda CTAN Package luatex angl Data obrasheniya 6 fevralya 2019 7 fevralya 2019 goda Lua in RPM angl Data obrasheniya 11 fevralya 2019 24 iyunya 2018 goda ZeroBrane Studio Lua IDE editor debugger for Windows Mac OSX and Linux neopr Data obrasheniya 31 iyulya 2013 18 yanvarya 2016 goda Lua Development Tools neopr Data obrasheniya 14 fevralya 2012 9 fevralya 2012 goda EmmyLua JetBrains Plugin Repository angl JetBrains Plugin Repository Data obrasheniya 26 fevralya 2018 27 fevralya 2018 goda LiteraturaRoberto Ieruzalimski Programmirovanie na yazyke Lua 3 e izd DMK 2014 ISBN 9785940747673 original Roberto Ierusalimschy Programming in Lua 3 nd ed 2012 ISBN 9788590379850 Ian Dees Lua Seven More Languages in Seven Weeks Languages That Are Shaping the Future Bruce Tate Fred Daoud Jack Moffitt Ian Dees The Pragmatic Bookshelf 2015 S 1 48 320 s ISBN 978 1941222157 Mario Kasuba Lua Game Development Cookbook Packt Publishing 2015 402 s ISBN 978 1849515504 David Young Learning Game AI Programming with Lua Packt Publishing 2014 352 s ISBN 978 1783281336 Jayant Varma Learn Lua for iOS Game Development Apress 2012 410 s ISBN 9781430246626 Kurt Jung Aaron Brown Beginning Lua Programming John Wiley amp Sons 2011 675 s Programmer to Programmer ISBN 9781118079119 Istoriya yazykaR Ierusalimschy L H de Figueiredo W Celes The evolution of Lua Proceedings of ACM HOPL III 2 1 2 26 2007 Roberto Ierusalimschy Luiz Henrique de Figueiredo Waldemar Celes The evolution of an extension language a history of Lua neopr Reprint from Proceedings of V Brazilian Symposium on Programming Languages 2001 B 14 B 28 Data obrasheniya 9 dekabrya 2011 Arhivirovano 4 fevralya 2012 goda Federiko Byankucci Shejn Uorden Glava 7 Lua Pionery programmirovaniya Dialogi s sozdatelyami naibolee populyarnyh yazykov programmirovaniya Masterminds of Programming Conversations with the Creators of Major Programming Languages Simvol 2011 S 211 230 608 s 1500 ekz ISBN 9785932861707 dlya Computerworld o yazyke LuaSm takzheSquirrel yazyk programmirovaniya na osnove LuaPrimechaniyaSsylkiOficialnyj sajt razrabotchikov Lua angl angl Sajt polzovatelej Lua angl Lua na russkom Perevody rukovodstvLua 5 3 Rukovodstvo polzovatelya Spravochnoe rukovodstvo po yazyku Lua 5 1 vklyuchaya dopolnitelnye biblioteki ispolzuemye pri rabote s MediaWiki fragment spravochnogo rukovodstva po yazyku Lua 5 0 dlya napisaniya skriptov dlya igr Heroes of Might and Magic V i Serp i molot Spravochnoe rukovodstvo po yazyku Lua 4 0Stati i obzoryMartin Strajcher Sozdanie vstraivaemyh scenariev na yazyke Lua Andrej Zubinskij Eshe odin letnij yazyk programmirovaniya chast 2 chast 3 chast 4 Ash Matheson Vvedenie v Lua perevod stati angl Keith Fieldhouse Vvedenie v Lua perevod stati angl Seriya statej o Lua Linux Format Ya lyublyu Lua uroki po yazyku Lua i ego vstraivaniyu v C prilozheniya Novyj Sajt Ispolzovanie Lua v robototehnike
Вершина