Iyini i-Lua: umlando, idizayini, ukusetshenziswa kwangempela kwempilo, nezici ezibalulekile zolimi

Isibuyekezo sokugcina: 3 September ka-2025
  • I-Lua ilula, iyashumeka, futhi ine-paradigm eminingi: amathebula, imisebenzi, nama-coroutines kuhlanganisa yonke into.
  • Ukuthayipha okunamandla, amamojula adingayo, i-OOP enama-metatable nama-coroutines wokugeleza ngokubambisana.
  • I-Clean C API yokuhlanganisa i-Lua logic kuzinhlelo zokusebenza zomdabu; ilungele imidlalo kanye ne-IoT.
  • Ukusetshenziswa kwangempela okubanzi: izinjini, ama-mods, ama-DAW kanye nama-microcontrollers afana ne-ESP8266/NodeMCU.

Ulimi lohlelo lwe-Lua

I-Lua ingenye yalezo zilimi ezimangazayo ngokulinganisela kwayo : encane, esheshayo, futhi eyenzelwe ukufakwa ezinhlelweni zokusebenza, kodwa iveza ngokwanele ukumboza izitayela eziningi zokuhlela. Uma uzibuza ukuthi iyini ngempela, isetshenziselwani, nokuthi kungani amathuluzi amaningi kangaka eyikhetha, nansi umhlahlandlela osebenzayo nobhalwe kahle.

Ngaphambi kokuhlola imininingwane, kufanelekile ukucacisa amaphuzu amabili abalulekile: I-Lua yadalwa ngo-1993 eBrazil (i-PUC-Rio, iqembu le-TeCGraf) ngenhloso yokuba lula futhi inwebeke, futhi kusukela kunguqulo 5.0 isatshalaliswe ngaphansi kwelayisensi ye-MIT (ngaphambilini, ilayisensi efana ne-BSD). Ukusebenza kwayo akuchazi ngokuqondile umbhalo womthombo: ihlanganisa i-bytecode futhi iyisebenzise emshinini wayo obonakalayo; ngaphezu kwalokho, kukhona i-LuaJIT yokuhlanganiswa kwesikhathi sokusebenza.

Iyini i-Lua futhi ivelaphi?

I-Lua isho "inyanga" ngesiPutukezi futhi yadalwa nguRoberto Ierusalimschy, uLuiz Henrique de Figueiredo, noWaldemar Celes. Ukugxila kwayo kwakucacile kusukela ekuqaleni: ukuba ulimi olufakekayo, oluphathekayo, noluncane , olune-syntax elula ephefumulelwe yi-C kanye nokwandiswa okufana ne-Perl. Eminyakeni edlule, izimise njengenjini yokubhala imidlalo yevidiyo, ama-plugin, kanye nezinhlelo ezifakelwe.

Kusukela ekuqaleni kwayo, ukuphatheka kube yinto ebalulekile ekugxilwe kuyo : isetshenziswe ku -ISO C , isebenza cishe noma kuphi, kusukela kumaseva amakhulu kuya kuma-microcontrollers anememori engama-kilobytes ambalwa kuphela. Izinguqulo zokuqala zazinelayisensi ngaphansi kwelayisensi yesitayela se-BSD, futhi kusukela ku-Lua 5.0, zisebenzise ilayisensi ye-MIT , ehambisana ngokuphelele ne-GPL.

Ifilosofi kanye nomklamo: engasindi, ihlehlisiwe kanye ne-multi-paradigm

I-Lua ibeka phambili "izingcezu ezimbalwa, ezinamandla kakhulu." Uhlaka lwayo lomqondo lusekelwe ezinsikeni ezintathu : amathebula njengesakhiwo sedatha kuphela, asebenza njengezakhamuzi zekilasi lokuqala, kanye nama-coroutines okulawula ukugeleza ngokubambisana. Ngalezi zisekelo, abasebenzisi bangakha amamojula enziwe ngokwezifiso , izinto, izindawo, kanye nezifinyezo .

Ngokuvamile kuchazwa njengenqubo, kodwa ngokwemvelo isebenzisa izitayela zokusebenza (ukuvalwa, imiyalo yezinga eliphezulu), izindlela eziqondiswe ezintweni (ngokusebenzisa ama-metatable nama-prototypes), kanye nendlela eqhutshwa idatha. Ubuncane bayo abusho ukuqina: ulimi luyanda futhi luzivumelanise nezimo ngokuchaza kabusha ukuziphatha ngama-metatable.

I-syntax ebalulekile kanye nokusebenza

Ku-Lua, iziguquguquko azinazo izinhlobo ezimile ; amanani azo ayizinhlobo ezibekiwe. Inikeza izinhlobo eziyisisekelo eziyisishiyagalombili : nil , boolean , number , string , table , function , userdata , kanye ne-thread (coroutines). Ngaphezu kwalokho, isekela ukuphoqelelwa okulawulwayo phakathi kwezinombolo nezintambo ngesikhathi sokusebenza.

Ulimi luhlelwe ngo iziqubu (izingcezu zekhodi) umdidiyeli aziguqule zibe imisebenzi engaziwa; lokhu kuyasiza hlanganisa umbuso manje gijima ngaphandle kwengozi “yomhlaba womlingo”. Ukuphawula amakwe nge -- futhi isekela ama-string literals anezingcaphuno ezinde noma abakaki; abaqhubi zihlanganisa izibalo, ubudlelwano, i-short-circuit logic (and, or, not), ukuhlanganisa (..) kanye nobude (#).

Mayelana nokulawulwa kokugeleza, encontramos if/elseif/else, while, repeat until (umzimba uqinisekisiwe okungenani kanye) kanye nezinhlobo ezimbili ze for: ngokwezinombolo (ngesiqalo, isiphetho kanye nesinyathelo) kanye generic (abaphindayo bathanda pairs o ipairs). I- izitatimende zendawo nciphisa ububanzi be-lexical futhi ukubuya ivumela amanani amaningi.

Izinhlobo zedatha nokuphoqelela

Ngomklamo, i-Lua ithayishwa ngokuguquguquka . Ukuguqulwa okuzenzakalelayo kwenzeka ikakhulukazi phakathi kwentambo nenombolo ekusebenzeni kwezibalo noma ezimweni zombhalo. Izitatimende ezinemibandela zibheka kuphela amanga kanye ne-nil njengamanga ; konke okunye kuyiqiniso (kufaka phakathi u-0 kanye nentambo engenalutho).

Izinhlobo zedatha ebalulekile zifaka ithebula (izichazamazwi/ama-array ahlobene), umsebenzi (amanani ekilasi lokuqala), i-userdata (ama-block enkumbulo ka-C), kanye nentambo (ama-coroutine). Amathebula ayahlukahluka , amukela noma yiluphi uhlobo lwekhiye ngaphandle kwe-nil , futhi akha isisekelo sezakhiwo eziyinkimbinkimbi njengezinhlu, amarekhodi, izihlahla, kanye nama-array angavamile.

  Indlela yokusebenzisa i-Python ne-HTML kusiphequluli

Amathebula namametatable: inhliziyo yolimi

Ithebula ukuphela kwesakhiwo sedatha futhi isetshenziselwa yonke into: kusuka kuhlu olulula ({10,20,30}) kumakhathalogi, izinto, amamojula, kanye nezindawo. Ukufinyelela ku t y t.x kuyalingana uma ukhiye kuyigama. Abakhi abanezinsimbi bavumela izinkulumo ezihlangene kakhulu yokuqalisa.

cunt ama-metatable se chaza kabusha ukuziphatha yabasebenzisi kanye nokufinyelela: __add, __eq, __lt, __concat, __len, __index, __newindex, __call, njll. Lokho kwenza umthwalo onzima ngaphezu kwalokho, ukuqhathanisa, ukuhlanganisa, noma indlela yokusabela ekufinyeleleni inkambu engekho, phakathi kokunye. Ngakho, ungakwazi ukwakha izigaba zezinombolo eziyinkimbinkimbi, ama-proxies, iziqinisekisi noma ama-wrapper anemigqa embalwa nje.

Amamojula kanye nezindawo

Umsebenzi require ilayisha imojula (i-chunk, lapho isenziwa, ngokuvamile ibuyisela itafula enemisebenzi nama-constants). Ngaphakathi, i-Lua ihlanganisa ikhodi kumsebenzi futhi iyenze kuwo nxazonke, ibuyisela umphumela wayo ukuze usetshenziswe kabusha. Okuguquguqukayo komhlaba wonke "bukhoma" kuthebula, okufinyeleleka njenge _G futhi, ezinguqulweni zesimanjemanje, ngendawo ebonakalayo yomsebenzi (_ENV).

Lo mklamo ugcina usayizi we-binary uncane : esikhundleni sokulayisha konke, imodyuli ngayinye iveza kuphela lokho okudingekayo, bese unjiniyela enquma ukuthi yini azoyifaka. Ukubonakala kwe-lexical kanye nokuhlukaniswa kwemvelo kunciphisa imiphumela emibi phakathi kwezingcezu zekhodi.

Imisebenzi, ukuvalwa kanye nezingxenye

Ku-Lua, umsebenzi uyinani : unikezwa iziguquguquko, udluliswe njengempikiswano, bese ubuyiselwa ngenxa yalokho. Akukho ukungezwani okuqinile: izimpikiswano ezengeziwe azinakwa ; izimpikiswano ezingekho zigcwele i-nil . Ngisho nezingcezu ziphathwa njengemisebenzi engaziwa, okwenza kube lula ukuhlanganisa isimo sendawo ngaphandle kokungcolisa imvelo yomhlaba.

Njengoshukela we-syntactic, opharetha : (ikholoni) ikuvumela ukuthi uchaze futhi ubize "izindlela" ngokudlula self ngokungaqondile: obj:metodo(x) ukulingana a obj.metodo(obj, x). Ukuvalwa Bathwebula amanani aphezulu, okuyisisekelo esinamandla kakhulu sokwakha ama-iterators, izimboni, nama-API ahlanzekile.

Object-orientation "the Lua way"

Nakuba ingenawo amakilasi anjalo, I-Lua isebenzisa i-OOP isebenzisa amathebula nama-metatableIphethini evame kakhulu isetshenziswa __index Ukudlulisela kusibonelo: Izinto zigcina isimo sazo futhi zibheke izindlela zazo kokuthi “isifanekiso” (ithebula lesibonelo). Umakhi angabela kalula i-metatable futhi abuyisele izimo ezintsha.

Ukuhlanganisa abakhi, __inkomba noshukela:, i-OOP ye-pragmatic iyatholakala: izindlela nge self, i-pseudoinheritance (ama-prototypes aboshwe ngamaketanga), amathuba okubhala ngaphezulu kanye ukwakheka okuguquguqukayo. Kuyindlela elula nephumelelayo kakhulu yama-plugin, imidlalo, noma imibhalo yokumisa.

Ama-Coroutines: ukusebenzisana okuningi

I-Las ama-coroutines Banikeza ukulawulwa kokugeleza okuhle kakhulu: bangaba yield y resume ezindaweni ezithile, ukulondoloza ibhethri yabo. Basebenza njenge cooperative multi-threading, ilungele umdlalo onengqondo, amasistimu asebenzayo, abahleli abalula noma lazy iterators. Ukwengeza, avumela ukushintsha okuhle phakathi kwe-Lua nekhodi yokusingatha (isb., C/C++).

Ngamazwi angokoqobo, i-coroutine isebenza ize iphele , ibuyisele amanani kumuntu oyiqala kabusha, bese iqhubeka lapho igcine khona. Ngemisebenzi exhumanayo, i-AI eqondile, noma ukulingisa, iyithuluzi eliwusizo kakhulu ngenxa yezindleko zayo eziphansi kanye nokucaca kwayo.

Imitapo yolwazi ejwayelekile kanye nezinsiza

I-Lua iza nesethi encane kodwa ewusizo kakhulu yemitapo yolwazi ejwayelekile: okuyisisekelo (assert, type, pairs, require…), string (patterns, gsub, gmatch, format), table (insert, remove, sort, concat), math (trigonometry, exponentials, random), io (files), os (date, environment, processes), kanye nokulungisa amaphutha (hooks, traces, inspection). Zenzelwe ukumboza u-80% wezidingo zomhlaba wangempela nge- footprint encane kakhulu.

Uhlelo lwe amaphethini ezintambo inikeza ukusesha okunamandla, ukuthwebula, nokushintsha ngaphandle kokusebenzisa izinkulumo ezijwayelekile ezigcwele; ngezici ezifana gmatch o gsub Izimo eziningi ezijwayelekile zokucubungula umbhalo zixazululwa ngendlela elula. kafushane.

  Izici eziyi-10 zolimi lokuhlela lwe-Perl: I-Chameleon Yokuhlela?

Kushunyekwe ku-C/C++ kanye ne-API yokuhlanganisa

Elinye lamaphuzu aqinile yiwo I-API ku-C. Umsingathi udala a lua_State, layisha izingcezu (lua_load), icela imisebenzi (lua_pcall ukwenza okuvikelwe), amarejista imisebenzi yendabuko kufinyeleleka kusuka ku-Lua futhi ihambisa idatha ku-a isitaki esibonakalayoKukhona izinsiza zokuphatha amaphutha, ukuqoqwa kukadoti, ama-metatable, kanye “nedatha yomsebenzisi” edalula izakhiwo ze-C-world.

Lo mklamo wenza i-Lua ibe yinjini yokubhala esetshenziswa kabanzi yezinhlelo zokusebenza ze-C/C++: i-logic inikezwa i-Lua (kulula ukuyiphinda nokuyihambisa) ngenkathi igcina ukusebenza kwe-kernel yemvelo. Umzila wayo omncane (ukuqaliswa okungu-25.000 imigqa ye-C kanye nama-binary kumakhulu e-KB) kusiza ukuyihlanganisa ngisho nakumadivayisi aphansi.

I-Lua ku-IoT nama-microcontrollers (ESP8266/NodeMCU)

I-Lua iyifanele kahle i-IoT ngenxa yobulula bayo nomjikelezo wokuthuthuka osheshayo. I-NodeMCU ye-ESP8266 inikeza i-firmware esebenzisa i-Lua, namathuluzi afana Lua Umlayishi o I-ESplorer Ungakwazi ukulayisha imibhalo, uvule ikhonsoli, amazwibela okuhlola, futhi ulungise iphutha ngokushesha. Ifayela init.lua ngokuvamile qala i-logic yocingo (isb. ukucwayiza i-LED noma ukulungisa i-GPIO).

I kungenzeka yenza izingxenye zekhodi ngokuqhubekayo, ngaphandle kokubuyisela yonke into, ikwenza kukhululeke kakhulu ukuhlola: memezela okuguquguqukayo, yenza a print(a+b), toggle pins, njll. Kulabo abavela e-Arduino, lokhu kugeleza kuwukuthi ishesha futhi i-didactic, futhi ngokuvamile izinguquko ezincane zanele ukufaka imibhalo kwamanye amadivaysi ahambisanayo.

Ukusetshenziswa okuphawulekayo emidlalweni yevidiyo nesofthiwe

Ngenxa yobuntu bayo obulula, ukusebenza kahle, kanye nelayisensi evumelayo , i-Lua iyintandokazi ezinjinini nakuma-mods. Amapulatifomu afana ne- Roblox akhuthaze uhlobo oluthayishiwe (i-Luau); izihloko nezinjini ezifana ne- World of Warcraft , umdlalo we-sandbox i-Garry's Mod (osekelwe ku-Half-Life 2), i-RTS Supreme Commander , ingxenye ye- STALKER , ama-adventures e-LucasArts afana ne -Grim Fandango kanye ne -Escape from Monkey Island , i-Worms 4: Mayhem , kanye nezinhlaka ezifana ne -LÖVE2D zibonise amandla azo okubhala umbhalo we-interface, i-game logic, kanye nama-mods.

Iphinde ivele kuma -MMO namapulatifomu afana ne -Tibia (ngokwenza ngokwezifiso okukhulu kanye ne-XML), i-Ragnarok Online (homunculus AI), amaseva nama-mods afana ne -Multi Theft Auto: San Andreas noma i-FiveM , imidlalo efana ne-Factorio (ama-mods asekelwe ku-Lua), i-Hedgewars , i-Transformice , i-Minetest (dala ama-mods noma imidlalo yonke), i-StepMania (ama-animation nemiyalo), ngisho nasezihlokweni ezifana ne -The Binding of Isaac: Rebirth (i-DLC Afterbirth+ yengeze ukwesekwa kwe-Lua mod).

Emkhakheni wamathuluzi nezinhlelo, abaphathi befasitela abanjengo -Ion no- Awesome basebenzisa i-Lua ekucushweni nasekunwetshweni, kuyilapho izinhlelo zokusebenza ezifana ne -REAPER , i-Rockbox , kanye ne- Renoise DAW bezisebenzisa ekubhaleni nasekuhleleni okujulile (i-custom API, i-OSC, i-MIDI, amamenyu, amafasitela antantayo, i-integrated terminal). Iphinde yasetshenziswa ukucubungula idatha yokufaka , ukumisa izinhlelo zokusebenza, ukulawula ihadiwe, kanye nokwenza imisebenzi ngokuzenzakalelayo.

Ukusebenza, ukuqaliswa, nokuqoqwa kukadoti

I-Lua ihlanganisa i- bytecode futhi isebenza ku-VM esebenza kahle; ngezimo ezidinga kakhulu, i-LuaJIT ingeza ukuhlanganiswa kwesikhathi sokusebenza. Umqoqi kadoti uyanda, ufulegi-usula , ungalungiseka (umise futhi uphindaphinde isinyathelo), futhi usekela ama-finalizer (__gc) edatha yomsebenzisi kanye namathebula abuthakathaka (okhiye/amanani angavimbeli ukukhishwa kwememori).

Lokhu kuhlanganiswa kwesivinini nokulawula kuholela emazingeni aphansi okubambezeleka amukelekayo emidlalweni, kuma-plugin, kanye nezinhlelo ezifakiwe. Umkhawulo wayo omncane uvumela ukuthunyelwa kumadivayisi anezinsiza ezilinganiselwe kakhulu ngaphandle kokulahlekelwa amakhono okuveza.

Ukuqhathanisa nokuklama nokufunda

Ngokungafani nezilimi ezisindayo, i-Lua ibeka phambili umnotho kanye nokusebenzisana . Ayihlose ukuthatha indawo ye-Python noma i-JavaScript "njenge-ecosystem ephelele," kodwa kunalokho ibe yindlela engcono kakhulu lapho ubulula, ukuphatheka, kanye nokwandiswa ku-C kubalulekile . Incwadi ethi i-Programming in Lua kanye nezihloko zobuchwepheshe zigxila ezinqumweni ezichaza ukwakheka kwayo okuhle.

Labo abavela kuPascal, C noma izilimi ezine-syntax ecacile yokuthola ijika lokungena elibushelelezi: amabhlogo nge do ... end, izimo ezifundekayo, amagama angukhiye angu-20 achazwe kahle, kanye nephethini local ukuze khawulela imiphumela emibi"Iglue" yayo eno-C kanye ne-semantics yetafula eguquguqukayo ikhuthaza ukwakha kusukela phansi kuya phezulu kuphela okudingekayo.

  Umhlahlandlela Ophelele Wezinqamuleli Zekhibhodi zeKhodi Yesitudiyo Esibonakalayo

Amacala avamile nama-anecdotes

Ngokuphathelene nokuphatheka kalula, ukuhambisa uhlelo lokusebenza lwe-Lua phakathi kwezinhlelo zokusebenza ngokuvamile kudinga izinguquko ezincane. Kuma-consoles namadivayisi, kunezakhiwo ze- PSP , Wii , kanye ne-SEGA Saturn (ezinemitapo yolwazi ethile), futhi imiphakathi yasekhaya isebenzise i-Lua ngenxa yobulula bayo.

Kumaseva nama-mods azimele (isibonelo, i-Tibia ), abantu basebenzisa i-Lua ukudala izinhlelo ezisezingeni eliphezulu , izikripthi, kanye nezandiso . Futhi uma usebenza kumapulatifomu okudala njenge- Friday Night Funkin' , i-Lua isetshenziselwa ukushintsha ama-HUD, ama-modchart , kanye nemihlobiso yesigcawu, okubonisa ukuguquguquka kwayo kwe -choreography enamandla.

Luyini ulimi olushumekiwe lwesiLua?

Amandla achaza impumelelo yawo

Ilula futhi iyashesha : ama-binary amancane kakhulu, ukusetshenziswa okuncane kwememori, kanye nomhumushi/i-VM osebenzayo. Kumadivayisi anezinsiza ezilinganiselwe, lokhu konga kwenza umehluko omkhulu.

I-C API Enhle Kakhulu : ukubhalisa imisebenzi yemvelo kanye nokuveza izakhiwo kulula. Kuzinhlelo zokusebenza eziyinkimbinkimbi, eziguqulwa zibe "ama-host," i-Lua iyiglue efanelekile phakathi kwe-kernel yemvelo kanye ne-logic ephezulu.

I-Multi-paradigm kanye ne-modular : ngamathebula, ama-meta-tables, imisebenzi, kanye nama-coroutines, wakha lokho okudingayo, hhayi okunye, noma okuncane. Lokhu okuncane okucatshangelwe kahle kugwema ubunzima obungadingekile.

Umphakathi kanye nemibhalo : incwadi yokubhekisela emfushane, izibonelo eziningi, kanye nezinto ezisetshenziswa ngezilimi eziningi (isiNgisi, iSpanishi, isiPutukezi). Isiko "lokuqonda ukuthi lisebenza kanjani" lihumusha libe ikhodi ecacile neqinile.

Imininingwane ye-syntax nama-opharetha okufanele uwakhumbule

Ama-opharetha anengqondo anesekhethi emfushane lokho kubuyisela ukusebenza (hhayi nje ama-booleans): a and b y a or b ingabuyisela amanani angewona ama-boolean, awusizo kakhulu kuzabelo ezizenzakalelayo (x = x or {}).

Ukuxhumana ne.., ubude obuno-# (ngezintambo kanye namathebula “ohlobo lohlu”), i-exponentiation nge-^, nokulandelana okufana no-C ngemininingwane efana nokuhlotshaniswa kwamalungelo ku .. y ^. I amaphethini amaketanga Banikeza ukuthwebula okulula nokusesha ngaphandle kokuncika kwangaphandle.

Kungani izinjini namathuluzi amaningi kangaka ekhetha?

Ngoba kunciphisa ukungqubuzana phakathi kokuklama nokusebenza : ukuphindaphinda ku-Lua kuyashesha, izikripthi kulula ukuzisakaza nokuzihlola, futhi i-kernel yomdabu ivikelwe ezinguqukweni ezivamile. Ngaphezu kwalokho, njengesofthiwe yamahhala enelayisensi evumelekile , ifanelana kahle nemikhiqizo yezentengiselwano kanye namaphrojekthi omphakathi.

Futhi kunesici esibalulekile samasiko: ukucaca kolimi kukhuthaza ukufunda imiqondo yokuhlela (imisebenzi esezingeni eliphezulu, ukuvalwa, iziphindaphindo) ezingasetshenziswa kwezinye izindawo. Kumaqembu axubile (ukuklama, ukubhala, injini), lokhu kusheshisa ukulethwa ngaphandle kokulahlekelwa ikhwalithi.

Ngemva kokuhlola umlando wayo, ukwakheka kwayo, kanye nokusetshenziswa kwayo, kulula ukuqonda ukuthi kungani iLua ithole indawo ekhethekile: ulimi oluncane olwenza izinto ezinkulu . Kusukela emidlalweni yevidiyo kanye nama-DAW kuya kuma-IoT namafasitela antantayo, inhlanganisela yayo yamatafula nama-metatable, imisebenzi yeklasi yokuqala, kanye nama-coroutines kuphumela ezixazululweni ezihlanzekile, ezihlanganisiwe, nezilula ukuzinakekela. Uma ufuna injini yokubhala ethembekile ongayihlanganisa nezinhlelo zakho zokusebenza noma ulimi olulula lokwenza izinto ngokuzenzakalela ngaphandle kokudela amandla, iLua ingumlingani ovelele.

Izinhlobo zezilimi zokuhlela
I-athikili ehlobene:
Izinhlobo zezilimi zokuhlela nezici zazo