- Lua ir viegla, ieguljama un daudzparadigmiska: tabulas, funkcijas un korutīnas visu saista kopā.
- Dinamiskā tipizēšana, moduļi ar prasībām, darbības pārtraukums ar metatabulām un korutīnām kooperatīvai plūsmai.
- Tīra C API Lua loģikas integrēšanai vietējās lietotnēs; ideāli piemērots spēlēm un lietu internetam (IoT).
- Plašs reāls pielietojums: dzinēji, modifikācijas, DAW un mikrokontrolleri, piemēram, ESP8266/NodeMCU.

Lua ir viena no tām valodām, kas pārsteidz ar savu līdzsvaruMazs, ātrs un izstrādāts iegulšanai lietojumprogrammās, tomēr pietiekami izteiksmīgs, lai aptvertu vairākus programmēšanas stilus. Ja jūs interesē, kas tas īsti ir, kam tas tiek izmantots un kāpēc tik daudzi rīki to izvēlas, šeit ir praktisks un labi dokumentēts ceļvedis.
Pirms pievērsties tēmai, ir vērts izcelt divas galvenās idejas: Lua ir dzimusi Brazīlijā 1993. gadā. (PUC-Rio, TeCGraf grupa) ar mērķi būt vieglam un paplašināmam, un kopš 5.0 versijas tas tiek izplatīts zem MIT licence (agrāk BSD tipa licence). Tās izpilde tieši neinterpretē avota tekstu: kompilējas baitkodā un darbina to savā virtuālajā mašīnā; turklāt ir arī LuaJIT izpildlaika kompilācijai.
Kas ir Lua un no kurienes tā nāk?
Lua portugāļu valodā nozīmē “mēness” un to izveidoja Roberto Jerusalimskijs, Luiss Enrike de Figeiredo un Valdemārs Seless. Tās mērķis bija ļoti skaidrs jau no paša sākuma: būt iegultai, pārnēsājamai un minimālistiskai valodai, ar vienkāršu sintaksi, kas iedvesmota no C, un idejām, kas līdzīgas Perl paplašināmības ziņā. Gadu gaitā tā ir kļuvusi par skriptēšanas dzinēju videospēlēm, spraudņiem un iegultām sistēmām.
No tās izcelšanās Pārnesamība ir bijusi apsēstībaieviests ISO C, darbojas praktiski jebkur, sākot no lieliem serveriem līdz mikrokontrolleriem ar tikai dažiem simtiem kilobaitu atmiņas. Agrīnās versijas tika licencētas saskaņā ar BSD stila licenci, un Sākot ar Lua 5.0, viņi izmanto MIT, pilnībā saderīgs ar GPL.
Filozofija un dizains: viegls, iebūvēts un daudzparadigmisks
Lua izvēlas "nedaudzus, ļoti spēcīgus gabalus". Tās konceptuālā slodze ir apkopota trīs pīlāros: galdi kā vienīgā datu struktūra, funkcijas kā pirmās šķiras pilsoņi un korutīnas kooperatīvai plūsmas kontrolei. Ar šīm pamatnēm lietotājs pats var pacelt moduļi, objekti, vides un abstrakcijas pielāgots.
To bieži raksturo kā procedurālu, bet dabiski pieņem funkcionālie stili (slēgumi, augstākas kārtas), objektorientācija (izmantojot metatabulu un prototipu izmantošanu) un uz datiem orientēta pieeja. Tās minimālisms Tas nenozīmē stingrību: valoda paplašinās un veidojas, pārdefinējot uzvedību, izmantojot metatabulas.
Būtiskā sintakse un izpilde
Lua valodā mainīgajiem nav statisku tipu; vērtību klātbūtne raksturo tipu. Tam ir astoņi pamata veidi: nulle, būla, skaits, rinda, tabula, funkcija, lietotāja dati y vītne (korutīnas). Turklāt, atzīst kontrolētu piespiešanu starp skaitļiem un virknēm izpildes laikā.
Valoda ir organizēta gabali (koda daļas), ko kompilators pārveido anonīmās funkcijās; tas palīdz iekapsulēt valsti tagad darbojas bez nejaušiem “maģiskajiem globālajiem efektiem”. Komentāri ir apzīmēti ar -- un atbalsta virkņu literāļus ar garām pēdiņām vai iekavām; operatoriem ietver aritmētisko, relāciju, īsslēguma loģiku (and, or, not), konkatenācija (..) un garums (#).
Runājot par plūsmas kontroli, mēs atradām if/elseif/else, while, repeat until (korpuss garantēts vismaz vienu reizi) un divi varianti for: skaitlisks (ar sākumu, beigām un soli) un vispārējs (iteratori, piemēram, pairs o ipairs). The vietējie paziņojumi ierobežot leksisko darbības jomu un atgriešanās atļauj vairākas vērtības.
Datu tipi un piespiešana
Pēc dizaina, Lua tiek dinamiski tipizētsAutomātiskās konvertēšanas notiek galvenokārt starp rinda y skaits aritmētiskajās darbībās vai teksta kontekstā. Nosacījumi ņem vērā tikai nepatiess un nulle kā nepatiess; viss pārējais ir patiess (ieskaitot 0 un tukšu virkni).
Galvenie veidi ir šādi: tabula (vārdnīcas/asociatīvie masīvi), funkcija (pirmās klases vērtības), lietotāja dati (C atmiņas bloki) un vītne (korutīnas). Tabulas ir neviendabīgas, tie atbalsta jebkura veida atslēgas, izņemot nulle un veido pamatu sarežģītām struktūrām, piemēram, sarakstiem, ierakstiem, kokiem vai retām matricām.
Tabulas un metatabulas: valodas būtība
Tabula ir vienīgā datu struktūra un tiek izmantots visam: sākot no vienkārša masīva ({10,20,30}) katalogiem, objektiem, moduļiem un vidēm. Piekļuve t y t.x ir līdzvērtīgs, ja atslēga ir vārds. Konstruktori ar iekavām to atļauj ļoti kompaktas izpausmes inicializācijas.
ar metatabulas se no jauna definēt uzvedību operatoru un piekļuves: __add, __eq, __lt, __concat, __len, __index, __newindex, __callutt. Tas ļauj pārslogot saskaitīšana, salīdzināšana, konkatenācija vai kā reaģēt uz piekļuvi trūkstošam laukam, cita starpā. Tādējādi jūs varat veidot komplekso skaitļu klases, starpniekserveri, validatori vai apvalki tikai ar dažām rindiņām.
Moduļi un vides
Funkcija require ielādē moduli (gabalu, kas, izpildot, parasti atgriež tabulu ar funkcijām un konstantēm). Iekšēji Lua kompilē kodu funkcijā un izpilda to savā vide, atgriežot rezultātu atkārtotai izmantošanai. Globālie mainīgie “atrodas” tabulā, kas ir pieejama kā _G un modernākās versijās — caur funkcijas redzamo vidi (_ENV).
Šī arhitektūra rada binārā faila izmērs joprojām ir mazsTā vietā, lai ielādētu visu, katrs modulis atklāj tieši tik daudz, cik nepieciešams, un izstrādātājs izlemj, ko iekļaut. Leksiskā redzamība un atdalīšana pa vidēm samazina blakusefektus starp koda daļām.
Funkcijas, slēgumi un fragmenti
Lua valodā funkcija ir vērtība: piešķirts mainīgajiem, nodots kā arguments un atgriezts kā rezultāts. Nav stingras aritātes: Ja argumentu ir pārāk daudz, tie tiek ignorēti; ja to trūkst, tie ir piepildīti ar nullePat fragmenti tiek uzskatīti par anonīmām funkcijām, kas atvieglo iekapsulēt vietējās valstis nepiesārņojot globālo vidi.
Kā sintaktiskais cukurs, operators : (kols) ļauj definēt un izsaukt “metodes”, nododot self netieši: obj:metodo(x) ekvivalents a obj.metodo(obj, x). Slēgšana Tie uztver augšupvērstas vērtības, kas ir ļoti spēcīgs pamats iteratoru, rūpnīcu un tīru API veidošanai.
Objektorientācija “Lua veidā”
Lai gan tajā nav tādu nodarbību, Lua īsteno OOP, izmantojot tabulas un metatabula.Visizplatītākie modeļu pielietojumi __index Lai deleģētu prototipam: objekti saglabā savu stāvokli un meklē savas metodes “veidnē” (prototipa tabulā). Konstruktors var viegli piešķirt metatabulu un atgriezt jaunas instances.
Apvienojot konstruktori, __index un sugar:, tiek iegūts pragmatisks OOP: metodes ar self, pseidomantošanu (ķēdētus prototipus), pārrakstīšanas iespēju un elastīgs sastāvsTā ir vienkārša un ļoti efektīva pieeja spraudņiem, spēlēm vai konfigurācijas skriptiem.
Korutīnas: kooperatīva daudzuzdevumu veikšana
the korutīnas Tie piedāvā ļoti smalku plūsmas kontroli: tos var yield y resume noteiktos punktos, tādējādi taupot akumulatoru. Tie darbojas kā kooperatīva daudzpavedienu apstrāde, ideāli piemērots spēļu loģikai, reaktīvām sistēmām, vienkāršiem plānotājiem vai slinki iteratoriTurklāt tie ļauj eleganti pārslēgties starp Lua un resursdatora kodu (piemēram, C/C++).
Praktiski runājot, korutīna virzās uz priekšu, līdz tā piekāpjas, atgriežot vērtības tam, kurš to atsāk, un vēlāk turpinot tieši tur, kur tas tika pārtraukts. Interaktīviem uzdevumiem, uz stāvokli balstītam mākslīgajam intelektam vai simulācijām tas ir ļoti vērtīgs rīks tā dēļ zemas izmaksas un skaidrība.
Standarta bibliotēkas un utilītas
Lua komplektā ir kompakts, bet ļoti noderīgs standarta bibliotēku komplekts: pamata (apgalvot, tips, pāri, pieprasīt…), rinda (raksti, gsub, gmatch, formāts), tabula (ievietot, noņemt, kārtot, apvienot), matemātika (trigonometrija, eksponenciāli, nejaušība), io (faili), os (datumi, vide, procesi) un atkļūdošanas (āķi, sliedes, pārbaude). Tie ir izstrādāti, lai segtu 80 % no reālajām vajadzībām ar minimāls nospiedums.
sistēma stīgu raksti piedāvā jaudīgu meklēšanu, uztveršanu un aizstāšanu, neizmantojot pilnas regulārās izteiksmes; ar tādām funkcijām kā gmatch o gsub Tipiskākie teksta apstrādes gadījumi tiek atrisināti vienkāršā veidā. kodolīgi.
Iegults C/C++ un integrācijas API
Viena no tās stiprajām pusēm ir API C valodāSaimnieks izveido lua_State, ielādējiet fragmentus (lua_load), izsauc funkcijas (lua_pcall lai izpildītu aizsargātus), reģistrus vietējās funkcijas pieejams no Lua un pārvieto datus starp virtuālā kaudzeIr utilītas kļūdu apstrādei, atkritumu savākšanai, metatabulām un “lietotāja datiem”, kas atklāj C pasaules struktūras.
Šis dizains padara Lua par universāla skriptēšanas dzinēja C/C++ lietojumprogrammām: loģika tiek deleģēta Lua (viegli iterējama un izvietojama), vienlaikus saglabājot vietējā kodola veiktspēju. Mazais izmērs (~25.000 XNUMX C rindu ieviešana un binārie faili simtiem KB apjomā) palīdz to integrēt. pat uz pieticīgām ierīcēm.
Lua lietu internetā un mikrokontrolleros (ESP8266/NodeMCU)
Lua ir lieliski piemērota lietu internetam (IoT), pateicoties tās vienkāršībai un ātrajam izstrādes ciklam. NodeMCU priekš ESP8266 piedāvā programmaparatūru, kas darbina Lua, un ar tādiem rīkiem kā Lua augšupielādētājs o ESPlorer Varat augšupielādēt skriptus, atvērt konsoli, testēt fragmentus un atkļūdot acumirklī. Fails init.lua parasti sākt loģiku ierīces darbības (piemēram, mirgojoša gaismas diode vai GPIO konfigurēšana).
Iespēja pakāpeniski izpildīt koda daļas, nevajadzot visu pārkompilēt, ir ļoti ērti eksperimentēt: deklarēt mainīgos, izveidot print(a+b), pārslēgšanas tapas utt. Tiem, kas nāk no Arduino, šī plūsma ir veikls un didaktisks, un bieži vien nelielas izmaiņas ir pietiekamas, lai skriptus pārnestu uz citām saderīgām ierīcēm.
Ievērojami pielietojumi videospēlēs un programmatūrā
Pateicoties jūsu vieglums, veiktspēja un atļaujoša licenceLua ir iecienīta valoda dzinējos un modifikācijās. Tādas platformas kā Roblox Viņi ir reklamējuši tipisku variantu (Luau); tādus nosaukumus un dzinējus kā World of Warcraft, smilšu kaste Garry s Mod (par Half-Life 2), RTS Virspavēlnieks, daļa no STALKER, LucasArts piedzīvojumi, piemēram Grim Fandango y Bēgšana no Pērtiķu salas, Worms 4: Mayhemvai tādas sistēmas kā LÖVE2D ir parādījuši savu spēku saskarnes skripti, spēles loģika un modifikācijas.
Parādās arī MMO un platformas kā stilba kaula (ar plašu pielāgošanas iespēju kopā ar XML), Ragnarok tiešsaistē (Homunculus AI), serveru un modu tips Vairāku zādzību auto: San Andreas o Pieci miljoni, spēles, piemēram, Faktorio (Uz Lua balstītas modifikācijas), Dzīvžogu kari, transformācija, Minimālais tests (izveidot modifikācijas vai veselas spēles), StepMania (animācijas un komandas), un pat tādos nosaukumos kā Īzāka saistība: Atdzimšana (Afterbirth+ DLC pievienoja Lua mod atbalstu.)
Instrumentu un sistēmu jomā logu pārvaldnieki kā jons y satriecošs izmantojiet Lua konfigurēšanai un paplašināšanai, savukārt tādas lietojumprogrammas kā REAPER, Rockbox vai DAW trokšņot Viņi to izmanto, lai skripti un dziļa pielāgošana (paša API, OSC, MIDI, izvēlnes, peldošie logi, integrēts terminālis). Tas ir izmantots arī procesa ievades dati, konfigurēt lietojumprogrammas, kontrolēt aparatūru un automatizēt uzdevumus.
Veiktspēja, ieviešana un atkritumu savākšana
Lua kompilējas uz baitkods un darbojas efektīvā virtuālajā mašīnā; sarežģītos scenārijos, LuaJIT pievieno izpildlaika kompilāciju. Atkritumu savācējs ir pakāpeniska atzīmju slaucīšanas tipa, konfigurējams (pauzes un soļu reizinātājs) un atbalsta finālisti (__gc) par lietotāja dati y vājas tabulas (atslēgas/vērtības, kas neliedz atbrīvot atmiņu).
Šī kombinācija no ātrums un kontrole Tas nodrošina pieņemami zemu latentumu spēlēm, spraudņiem un iegultajām sistēmām. Minimālais aizņemtais laiks ļauj to izvietot ierīcēs ar ļoti ierobežoti resursi neatsakoties no izteiksmīgas valodas.
Dizaina salīdzinājums un mācīšanās
Atšķirībā no smagākām valodām, Lua prioritāte ir ekonomija un sadarbspējaTā mērķis nav aizstāt Python vai JavaScript kā “pilnīgu ekosistēmu”, bet gan būt par labāko izvēli, kad Tie nodrošina vienkāršību, pārnesamību un paplašināmību C valodā. Grāmata Programmēšana Lua valodā un tehniskajos rakstos tiek iedziļināti aplūkoti lēmumi, kas izskaidro tā eleganto dizainu.
Tie, kas nāk no Pascal, C vai valodām ar skaidru sintaksi, atrod vienmērīga ieejas līkne: bloki ar do ... end, lasāmi nosacītie teikumi, 20 precīzi definēti atslēgvārdi un modelis local par ierobežot blakusparādībasTās “līme” ar C un elastīgā tabulu semantika mudina veidot no apakšas uz augšu tikai to, kas ir nepieciešams.
Bieži sastopami gadījumi un anekdotes
Pārnesamības ziņā Migrēt Lua lietotni starp operētājsistēmām parasti ir nepieciešamas minimālas izmaiņas. Konsolēm un ierīcēm ir pieejamas versijas PSP, Wii o SEGA Saturns (ar īpašām bibliotēkām) un mājas alus darītavu kopienām, kas ir izmantojušas Lua savam vienkāršība.
Privātajos serveros un modifikācijās (piemēram, stilba kaula), cilvēki izmanto Lua priekš izveidot sistēmas, skriptus un paplašinājumus augstā līmenī. Un, ja jūs pārvietojaties radošās platformās, piemēram, piektdienas vakara jautrība'Lua tiek izmantota, lai mainītu HUD. modu diagrammas un ainavu dekorācijas, demonstrējot tā daudzpusību dinamiskas horeogrāfijas.
Stiprās puses, kas izskaidro tā panākumus
Vieglums un ātrumsļoti mazi binārie faili, mērens atmiņas izmantojums un efektīvs interpretētājs/virtuālā mašīna. Ierīcēs ar ierobežotiem resursiem šī taupība ir ļoti svarīga.
Lieliska C APIVietējo funkciju reģistrēšana un struktūru atklāšana ir vienkārša. Sarežģītām, uz resursdatora balstītām lietotnēm Lua ir ideāla līme starp vietējo kodolu un augsta līmeņa loģiku.
Daudzparadigma un modulāraAr tabulām, metatabulām, funkcijām un korutīnām jūs veidojat to, kas jums nepieciešams, ne vairāk un ne mazāk. Tas labi pārdomāts minimums izvairieties no nevajadzīgiem riteņiem.
Kopiena un dokumentācijaKodolīga uzziņu rokasgrāmata, bagāta ar piemēriem un daudzvalodu materiāls (angļu, spāņu, portugāļu). Kultūra, kas balstīta uz “darbības izpratnes” principu ievērošanu, izpaužas šādi: skaidrs un stabils kods.
Sintakses detaļas un operatori, kas jāatceras
Loģiskie operatori ar īsslēgumu kas atgriež operandus (ne tikai loģiskās vērtības): a and b y a or b var atgriezt nebūla vērtības, kas ir ļoti noderīgi noklusējuma piešķirjumiem (x = x or {}).
Savienošana ar .., garums ar # (virknēs un “masīva tipa” tabulās), kāpināšana ar ^un C līdzīgas precedentes ar tādām īpatnībām kā labā asociativitāte .. y ^. ķēdes raksti Tie piedāvā ērtu uztveršanu un meklēšanu bez ārējām atkarībām.
Kāpēc tik daudzi dzinēji un instrumenti to izvēlas?
Jo samazina berzi starp dizainu un izpildiAtkārtota iterācija Lua valodā ir ātra, skriptus ir viegli izplatīt un auditēt, un vietējais kodols ir aizsargāts no biežām izmaiņām. Turklāt, būdams bezmaksas programmatūra ar atļaujošu licenci, lieliski iederas komerciālos produktos un kopienas projektos.
Un ir vēl viens svarīgs kultūras faktors: valodas skaidrība Tas veicina programmēšanas koncepciju (augstākas kārtas funkciju, slēgumu, iteratoru) apguvi, kas pēc tam tiek pielietotas citās vidēs. Jauktām komandām (dizains, skriptēšana, dzinējs) tas paātrina piegādes nezaudējot kvalitāti.
Pēc Lua vēstures, dizaina un lietojuma pārskatīšanas ir viegli saprast, kāpēc tas ir ieguvis īpašu vietu: maza valoda, kas dara lielas lietasNo videospēlēm un DAW līdz lietu internetam un peldošajiem logiem — tā tabulu un metatabulu, pirmklasīgu funkciju un korutīnu kombinācija nodrošina tīrus, modulārus un ātri uzturējamus risinājumus. Neatkarīgi no tā, vai meklējat uzticamu skriptēšanas dzinēju, ko integrēt savās lietojumprogrammās, vai vienkāršu automatizācijas valodu, neupurējot jaudu, Lua ir izcils sabiedrotais.
Saturs
- Kas ir Lua un no kurienes tā nāk?
- Filozofija un dizains: viegls, iebūvēts un daudzparadigmisks
- Būtiskā sintakse un izpilde
- Datu tipi un piespiešana
- Tabulas un metatabulas: valodas būtība
- Moduļi un vides
- Funkcijas, slēgumi un fragmenti
- Objektorientācija “Lua veidā”
- Korutīnas: kooperatīva daudzuzdevumu veikšana
- Standarta bibliotēkas un utilītas
- Iegults C/C++ un integrācijas API
- Lua lietu internetā un mikrokontrolleros (ESP8266/NodeMCU)
- Ievērojami pielietojumi videospēlēs un programmatūrā
- Veiktspēja, ieviešana un atkritumu savākšana
- Dizaina salīdzinājums un mācīšanās
- Bieži sastopami gadījumi un anekdotes
- Stiprās puses, kas izskaidro tā panākumus
- Sintakses detaļas un operatori, kas jāatceras
- Kāpēc tik daudzi dzinēji un instrumenti to izvēlas?
