(Go: >> BACK << -|- >> HOME <<)

Змесціва выдалена Змесціва дададзена
Няма апісаньня зьменаў
Няма апісаньня зьменаў
Радок 1:
{{Мова праграмаваньня|назва=Lua|лёга=[[File:Lua-Logo.svg|128px]]|парадыгма=[[Шматпарадыгмавая мова праграмаваньня|Шматпарадыгмавая]]: [[скрыптовая мова|скрыптовая]], [[Імпэратыўнае праграмаваньне|імпэратыўная]] ([[Працэдурнае праграмаваньне|працэдурная]], [[Прататыпнае праграмаваньне|прататыпная]], [[Аб'ектна-арыентаванае праграмаваньне|аб'ектна-арыентаваная]]), [[Функцыянальнае праграмаваньне|функцыянаяльная]], [[Мэтапраграмаваньне|падтрымлівае мэтапраграмаваньне]], [[Рэфлектыўнае праграмаваньне|рэфлектыўная]]|дата=1993|аўтар=Раберту Ерусалімскі<br />Вальдэмар Салес<br />Луіс Энрыке дэ Фігуэйрэда|вэрсія_стабрэліз=|дата_стабрэліз=|тыпізацыя=[[Дынамічная тыпізацыя|Дынамічная]], [[Моцная і слабая тыпізацыя|слабая]], [[Качыная тыпізацыя|качыная]]|рэалізацыі=[//www.lua.org/download.html Lua], [[LuaJIT]], [//eliasdaler.github.io/luavela/ LuaVela], [https://www.moonsharp.org/ MoonSharp], [//luvit.io Luvit], [//www.luart.org LuaRT], [https://luau-lang.org Lua''u'']|дыялекты=[http://metalua.luaforge.net/ Metalua<!--{{dead link |date=July 2018}}-->], [http://idle.thomaslauer.com Idle], [https://www.nongnu.org/gsl-shell/ GSL Shell]|уплыў_ад=[[C++]], [[CLU (programming language)|CLU]], [[Modula-2|Modula]], [[Scheme (programming language)|Scheme]], [[SNOBOL]]|уплыў_на=[[GameMonkey Script|GameMonkey]]<!--2003-->, [[Io (programming language)|Io]]<!--2002-->, [[JavaScript]]{{Citation needed|date=November 2022}}, [[Julia (programming language)|Julia]]<!--2012-->, MiniD<!--2006-->, [[Red (programming language)|Red]], [[Ring_(programming_language)|Ring]],<ref name="The Ring programming language and other languages">{{cite web |url=http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |title=The Ring programming language and other languages |author=Ring Team |date=5 December 2017 |work=ring-lang.net |access-date=5 December 2017 |archive-date=25 December 2018 |archive-url=https://web.archive.org/web/20181225175312/http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |url-status=dead }}</ref> [[Ruby (programming language)|Ruby]],{{Citation needed|date=November 2022}} [[Squirrel (programming language)|Squirrel]]<!--2003-->, MoonScript<!--2011-->, [[C--]]|АС=[[Cross-platformКросплятформавае праграмнае забясьпячэньне|Кросплятформавая]]|ліцэнзія=[[MIT License]]|сайт={{official[//www.lua.org URL}}www.lua.org]}}
{{Мова праграмаваньня|назва=Lua|лёга=[[File:Lua-Logo.svg|128px]]|парадыгма=[[Multi-paradigm]]: [[scripting language|scripting]], [[imperative programming|imperative]] ([[procedural programming|procedural]], [[prototype-based programming|prototype-based]], [[object-oriented programming|object-oriented]]), [[functional programming|functional]], [[metaprogramming|meta]], [[reflective programming|reflective]]|дата={{Start date and age|df=yes|1993}}|аўтар=[[Roberto Ierusalimschy]]<br /> Waldemar Celes<br /> Luiz Henrique de Figueiredo|вэрсія_стабрэліз={{wikidata|property|reference|edit| Q207316 |P348}}|дата_стабрэліз={{start date and age|{{wikidata|qualifier| Q207316 |P348|P577}}}}|тыпізацыя=[[Dynamic typing|Dynamic]], [[Strong and weak typing|weak]], [[Duck typing|duck]]|рэалізацыі=[//www.lua.org/download.html Lua], [[LuaJIT]], [//eliasdaler.github.io/luavela/ LuaVela],
[https://www.moonsharp.org/ MoonSharp], [//luvit.io Luvit], [//www.luart.org LuaRT], [https://luau-lang.org Lua''u'']|дыялекты=[http://metalua.luaforge.net/ Metalua<!--{{dead link |date=July 2018}}-->], [http://idle.thomaslauer.com Idle], [https://www.nongnu.org/gsl-shell/ GSL Shell]|уплыў_ад=[[C++]], [[CLU (programming language)|CLU]], [[Modula-2|Modula]], [[Scheme (programming language)|Scheme]], [[SNOBOL]]|уплыў_на=[[GameMonkey Script|GameMonkey]]<!--2003-->, [[Io (programming language)|Io]]<!--2002-->, [[JavaScript]]{{Citation needed|date=November 2022}}, [[Julia (programming language)|Julia]]<!--2012-->, MiniD<!--2006-->, [[Red (programming language)|Red]], [[Ring_(programming_language)|Ring]],<ref name="The Ring programming language and other languages">{{cite web |url=http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |title=The Ring programming language and other languages |author=Ring Team |date=5 December 2017 |work=ring-lang.net |access-date=5 December 2017 |archive-date=25 December 2018 |archive-url=https://web.archive.org/web/20181225175312/http://ring-lang.sourceforge.net/doc1.6/introduction.html#ring-and-other-languages |url-status=dead }}</ref> [[Ruby (programming language)|Ruby]],{{Citation needed|date=November 2022}} [[Squirrel (programming language)|Squirrel]]<!--2003-->, MoonScript<!--2011-->, [[C--]]|АС=[[Cross-platform]]|ліцэнзія=[[MIT License]]|сайт={{official URL}}}}
 
'''Lua''' (ад [[Партугальская мова|партугальскага]]: lua [ ˈlu(w)ɐ ] "луэлуа", што значыць [[Месяц (спадарожнік)|Месяц]] ) — [[Высокаўзроўневая мова праграмаваньня|высокаўзроўневая]] [[Шматпарадыгмавая мова праграмаваньня|шматпарадыгмавая]] [[Скрыптовая мова|скрыптовая]] [[мова праграмаваньня]]<ref name="luaspe">{{cite journal|last1=Ierusalimschy|first1=Roberto|last2=de Figueiredo|first2=Luiz Henrique|last3=Filho|first3=Waldemar Celes|title=Lua—An Extensible Extension Language|journal=Software: Practice and Experience|date=June 1996|volume=26|issue=6|pages=635–652|doi=10.1002/(SICI)1097-024X(199606)26:6<635::AID-SPE26>3.0.CO;2-P|s2cid=61066194 |url=https://www.lua.org/spe.html|access-date=24 October 2015}}</ref>. Lua з'яўляецца [[КросплатформеннаеКросплятформавае праграмнае забеспячэньне|кросплатформеннайкросплятформавай]], паколькі [[інтэрпрэтатар]] скампіляванага [[Байт-код|байт-кода]] напісаны на [[ANSI C]],<ref name=luaabout>{{cite web| url = https://www.lua.org/about.html#why| title = About Lua| publisher = Lua.org| access-date = 2011-08-11}}</ref> і Lua мае адносна простае C [[API]] для ўбудаванняўбудаваньня яго ў дадаткі.<ref>{{cite magazine |url=https://www.foreignaffairs.com/articles/139332/yuri-takhteyev/from-brazil-to-wikipedia?page=2 |title=From Brazil to Wikipedia |magazine=[[Foreign Affairs]] |author=Yuri Takhteyev |date=21 April 2013 |access-date=25 April 2013}}</ref>
 
== Гісторыя ==
Lua быўбыла створаныствораная ў 1993 годзе Раберту Ерусалімскім, Луісам Энрыке дэ Фігуэйрэда і Вальдэмарам Салесам, членаміудзельнікамі Tecgraf (Computer Graphics Technology Group - групы тэхналогійтэхналёгій камп'ютэрнайкампутарнай графікі) у Папскім каталіцкім універсітэцеунівэрсытэце Рыа-дэды-ЖанэйраЖанейра ў Бразіліі .
 
З 1977 па 1992 год у Бразілія праводзіла палітыку жорсткіх [[Гандлёвы бар'ер|гандлёвых бар'ераў]] (так званых рынкавых рэзерваў) у дачыненьні да кампутарнага абсталяванняабсталяваньня і праграмнага забеспячэннязабеспячэньня, мяркуючы, што Бразілія можа і павінна вырабляць іх сама. З-за чаго кліенты Tecgraf не маглі дазволіць сабе, ні палітычна, ні фінансава, купляць індывідуальнае праграмнае забеспячэнне з-за мяжы; згодна з рынкавым рэзервам, кліенты павінны былі б прайсці праз складаны бюракратычны працэс, каб даказаць, што іх патрэбы не могуць быць задаволенызадаволеныя бразільскімі кампаніямі. Гэта вымусіла Tecgraf даствараць стварэннянеабходныя неабходных інструмэнтаўінструмэнты з нуля.<ref name=hopl2007>{{cite book| last1 = Ierusalimschy | first1 = R.| author1-link = Roberto Ierusalimschy| last2 = Figueiredo| first2 = L. H. | last3 = Celes| first3 = W.| title = Proceedings of the third ACM SIGPLAN conference on History of programming languages| contribution = The evolution of Lua| contribution-url = https://www.lua.org/doc/hopl.pdf| doi = 10.1145/1238844.1238846| url = https://www.acm.org/sigs/sigplan/hopl| year = 2007| pages = 2–1–2–26| isbn = 978-1-59593-766-7| s2cid = 475143}}{{dead link |date=July 2018}}</ref>
 
Папярэднікамі Lua былі мовы ''SOL'' (Simple Object Language - простая аб'ектная мова) і ''DEL'' (Data-Entry Language - мова ўводаўводу даныхзьвестак).<ref Яныname="luahist2001">{{cite былі незалежна распрацаваны ў Tecgraf у 1992–1993 гадах, каб дадаць некаторую гнуткасць у два розныя праекты (абодва былі інтэрактыўнымі графічнымі праграмамі для кампаніі Petrobras )web|url=https://www.lua.org/history.html|title=The Уevolution SOLof іan DELextension неlanguage: хапалаa структурhistory кіраванняof патокам, і Petrobras адчувала ўсё большую патрэбу ў тым, каб дадаць да іх поўную магутнасць праграмавання.Lua|year=2001|access-date=2008-12-18}}
<!-- {{cite journal| last1 = Ierusalimschy | first1 = R. | author1-link = Roberto Ierusalimschy| last2 = Figueiredo | first2 = L. H.| last3 = Celes | first3 = W. | contribution = The evolution of an extension language: a history of Lua| contribution-url = https://www.lua.org/history.html| title = Proc. of V Brazilian Symposium on Prog. Lang.| year = 2001| pages = B–14–B–28}} --></ref> Яны былі незалежна распрацаваны ў Tecgraf у 1992–1993 гадах, каб дадаць некаторую гнуткасць у два розныя праекты (абодва былі інтэрактыўнымі графічнымі праграмамі для кампаніі Petrobras). У SOL і DEL не хапала структур кіравання патокам, і Petrobras адчувала ўсё большую патрэбу ў тым, каб дадаць да іх поўную магутнасць праграмаваньня.
 
Lua 1.0 быў распрацаваны такім чынам, што яго канструктары аб'ектаў, якія ў той час крыху адрознівалісяадрозьніваліся ад цяперашняга лёгкага і гнуткага стылю, уключалі сінтаксіссынтакс апісанняапісаньня дадзеныхзьвестак SOL (адсюль назва Lua: ''Sol'' азначае «Сонца» на партугальскай мове, а ''Lua'' азначае «Месяц»). [[СынтаксісСынтакс (мова праграмаваньня)|Сынтакс]] Lua для структур кіраваннякіраваньня ў асноўным быў запазычаны з [[Modula]] ( <code>if</code>, <code>while</code>, <code>repeat</code> / <code>until</code> ), але таксама паспытаў уплыў [[CLU]] (множныя прызначэнні і множныя вяртанні з функцый, як больш простая альтэрнатыва [[Спасылачны параметар|спасылачным параметрам]] або яўным [[Указальнік (машыннае праграмаваньне)|указальнікам]]), [[C++]] ("выдатная ідэя дазволіць [[ЛакальнаяЛякальная зменнаязьменная|лакальнайлякальнай зменнайзьменнай]] быць аб'яўленай толькі там, дзе яна патрэбна" ), [[SNOBOL]] і [[AWK]] ( [[АсацыятыўныАсацыяцыйны масіў|асацыятыўныяасацыяцыйныя масівы]] ). У артыкуле, апублікаваным у ''часопісе Dr. Dobb's Journal'', стваральнікі Lua таксама сцвярджаюць, што [[LISP]] і [[Scheme]] з іх адзінай універсальнай структурай даныхзьвестак ([[Спіс (структура даных)Сьпіс|спісамсьпісам]]) аказалі вялікі ўплыўпаўплывалі на іх рашэннерашэньне выкарыстаць табліцу ў якасціякасьці асноўнай структуры даныхзьвестак Lua.<ref name=ddj96>{{cite news| last1 = Figueiredo | first1 = L. H. | last2 = Ierusalimschy | first2 = R. | last3 = Celes| first3 = W. | title = Lua: an Extensible Embedded Language. A few metamechanisms replace a host of features| magazine = Dr. Dobb's Journal| volume = 21| issue = 12| pages = 26–33| date = December 1996| url = https://www.lua.org/ddj.html}}</ref>
 
ЗЗь цягам часу семантыкасэмантыка Lua падвяргалася ўсё большаму ўплыву Scheme ,<ref name=hopl2007 /> асабліва з увядзеннемувядзеньнем [[Ананімная функцыя|ананімных функцый]] і поўнага лексічнага[[Абсяг прывязкі ахопуімя|лексычнага абсягу]]. У новых версіях Lua было дададзена некалькі функцый.
 
Версіі Lua да версіівэрсіі 5.0 выпускалісявыпускалася пад ліцэнзіяй, падобнай да ліцэнзіі BSD . Пачынаючы з версіівэрсіі 5.0 і далей, Lua распаўсюджваецца па ліцэнзіі MIT . АбедзвеАбедзьве з'яўляюццадазваляюць дазвольнымікарыстацца ліцэнзіямі на бясплатнае праграмнае забеспячэнне і амальLua аднолькавыябясплатна.
 
== Асаблівасьці ==
Lua звычайна апісваюць як "[[Шматпарадыгмавая мова праграмаваньня|шматпарадыгмавую]]" мову, якая мае невялікую базавую функцыянальнасць, якая можа быць пашыраны ў адпаведнасціадпаведнасьці з вырашаемай праблемай. Lua не мае яўнай падтрымкі [[УспадкоўваньнеСпадкаваньне (аб'ектна-арыентаванае праграмаваньне)|ўспадкоўваньняспадкаваньня]], але дазваляе рэалізаваць яго з дапамогай [[Удзельнік:Хачапуры/Lua#Мэтатабліцы|мэтатабліц]]. АналагічнымАналягічным чынам Lua дазваляедае праграмістаммагчымасьць выкарыстоўваць [[Прастора імёнаў|прасторы імёнаў]], [[Кляса (праграмаваньне)|клясы]] і іншую функцыянальнасць з дапамогай табліц; [[Першаклясная функцыя|першаклясныя функцыі]] дазваляюць выкарыстоўваць мноства метадаў [[Функцыянальнае праграмаваньне|функцыянальнага праграмавання]], а поўны [[ляксічны ахоп]] дазваляе схаваць дэталёвую інфармацыю для выканання [[Прынцып найменьшых прывілеяў|прынцыпу найменьшых прывілеяў]].
 
Увогуле, Lua імкнецца прадастаўляць простыя, гнуткія [[Мэтад (праграмаваньне)|мета-функцыі]], якія можна пашыраць па меры неабходнасці, а не набор функцый, характэрны для адной парадыгмы праграмавання. У выніку базавая мова выкарыстоўвае невялікі аб'ём памяці; скампіляваны [[інтэрпрэтатар]] займае толькі каля 247&nbsp;[[Кілябайт|kB]]<ref name=luaabout />.
 
Як мова з [[Дынамічная тыпізацыя|дынамічнай тыпізацыяй]], прызначаная для выкарыстання ў якасці [[Скрыптовая мова|мовы сцэнарыяў]], Lua досыць кампактная, каб змясціцца на розных хост-платформах. Яна падтрымлівае толькі невялікую колькасць простых тыпаў даных, такіх як [[Булевы тып даных|булевыя]] значэнні, лічбы (па змаўчанні з плаваючай кропкай падвойнай дакладнасці і 64-бітныя [[Цэлы лік|цэлыя]]) і [[Радок (тып даных)|радкі]]. Тыповыя структуры даных, такія як [[Масіў (структура даных)|масівы]], [[Сэт (структура даных)|сэты]], [[Сьпіс|сьпісы]] і [[Запіс (структура даных)|запісы]], могуць быць прадстаўлены з дапамогай адзінай уласнай структуры даных Lua, табліцы, якая па сутнасці з'яўляецца гетэрагенным [[Асацыятыўны масіў|асацыятыўным масівам]].
Радок 27:
 
=== Сынтаксіс ===
Клясычная [["Hello, World!" праграма]] можа быць запісана наступным чынам, з дужкамі або без:<ref>{{cite web | url=https://www.lua.org/pil/1.html | title=Programming in Lua : 1}}</ref>
 
<syntaxhighlight lang="lua">
Радок 218:
</syntaxhighlight>
 
Табліца часта ўжываецца як структура (або [[Запіс (структура даных)|запіс]]), выкарыстоўваючы [[Радок (тып даных)|радкі]] ў якасці ключоў. Паколькі такое выкарыстанне вельмі распаўсюджана, Lua мае спецыяльны сынтаксіс для доступу да такіх палёў.<ref>{{cite web|url=https://www.lua.org/manual/5.1/manual.html#2.3|title=Lua 5.1 Reference Manual|access-date=2014-02-27|year=2014}}</ref>
 
<syntaxhighlight lang="lua">
Радок 271:
</syntaxhighlight>
 
Памер табліцы <code>t</code> вызначаецца як любы цэлы індэкс <code>n</code> такі што <code>t[n]</code> не <code>nil</code> і <code>t[n+1]</code> роўны <code>nil</code>; акрамя таго, калі <code>t[1]</code> <code>nil</code>, <code>n</code> можа быць роўным нулю. Для рэгулярнага масіву з ненулявымі значэннямі ад 1 да дадзенага <code>n</code> яго памер дакладна роўны <code>n</code>, індэксу яго апошняга значэння. Калі масіў мае "дзіркі" (нулявыя значэнні паміж іншымі значэннямі, выдатнымі ад нуля), то <code>#t</code> можа быць любым з індэксаў, які непасрэдна папярэднічае <code>nil</code> значэнню (гэта значыць, ён можа разглядаць любое такое нулявое значэнне як канец масіву).<ref>{{cite web|url=https://www.lua.org/manual/5.1/manual.html#2.5.5|title=Lua 5.1 Reference Manual|access-date=2012-10-16|year=2012}}</ref>
 
<syntaxhighlight lang="lua">
Радок 304:
</syntaxhighlight>
 
Выкарыстанне хэш-табліцы для эмуляцыі масіву звычайна павольней, чым выкарыстанне фактычнага масіву; аднак табліцы Lua аптымізаваны для выкарыстання ў якасці масіваў, каб пазбегнуць гэтай праблемы.<ref name=lobject_h_array>{{cite web|url=https://www.lua.org/source/5.1/lobject.h.html#array|title=Lua 5.1 Source Code|access-date=2011-03-24|year=2006}}</ref>
 
=== Мэтатабліцы ===
Радок 398:
==== Спадкаваньне ====
 
Спадкаваньне у Lua таксама магчыма з дапамогай мэтатабліц.<ref>{{cite book|title=Programming in Lua, 4th Edition|page=165|author=Roberto Ierusalimschy}}</ref> У наступным прыкладзе апэрацыя памнажэньня вэктара на канстанту рэалізаваная ў вытворнай клясе.
 
<syntaxhighlight lang="lua">
Радок 448:
</syntaxhighlight>
 
Lua таксама падтрымлівае [[множнае спадкаваньне]]; <code>__index</code> можа быць функцыяй або табліцай.<ref>{{Cite web|title=Programming in Lua : 16.3|url=https://www.lua.org/pil/16.3.html|access-date=2021-09-16|website=Lua}}</ref> [[Перагрузка апэратара]] таксама можа быць зроблена; мэтатабліцы Lua могуць мець такія элементы, як <code>__add</code>, <code>__sub</code> і гэтак далей.<ref>{{Cite web|title= Metamethods Tutorial|url=http://lua-users.org/wiki/MetamethodsTutorial|access-date=2021-09-16|website=lua-users wiki |url-status=dead |archive-url=https://web.archive.org/web/20210916182214/http://lua-users.org/wiki/MetamethodsTutorial |archive-date= Sep 16, 2021 }}</ref>
 
== Рэалізацыя ==
 
Праграма на Lua не [[Інтэрпрэтуемая мова|інтэрпрэтуецца]] непасрэдна з тэкставага файла, а [[Кампілятар|кампілююцца]] ў байт-код, які потым запускаецца на [[Віртуальная машына|віртуальнай машыне]] Lua. Увесь працэс звычайна нябачны для карыстальніка і выконваецца падчас працы. Кампіляцыя можа быць выкананы загадзя, каб паскорыць загрузку або, прыбраўшы кампілятар, паменшыць аб'ём памяці хост-асяроддзя. Кампіляцыя магчыма таксама ўнутры праграмы на Lua з выкарыстаньнем функцыі <code>dump</code> з бібліятэкі радкоў альбо адной з функцый <code>load/loadstring/loadfile</code>.<ref name="luaspe" /><ref name="luaabout" />
 
У адрозненьне ад большасьці віртуальных машын (якія звычайна [[Стэкавыя машына|стэкавыя]]), віртуальная машына Lua [[Рэгістравая машына|рэгістравая]] і больш нагадвае рэальную апаратную канструкцыю. Рэгістравая архітэктура пазбягае празмернага капіравання значэнняў і памяншае агульную колькасць інструкцый на функцыю. Віртуальная машына Lua 5 з'яўляецца адной з першых чыста рэгістравых віртуальных машын, якія атрымалі шырокае прымяненне.<ref name=lua5impl>{{cite journal| last1 = Ierusalimschy | first1 = R. | last2 = Figueiredo | first2 = L. H. | last3 = Celes | first3 = W. | title = The implementation of Lua 5.0| journal = J. Of Universal Comp. Sci.| volume = 11| issue = 7| pages = 1159–1176| year = 2005| url = http://www.jucs.org/jucs_11_7/the_implementation_of_lua/jucs_11_7_1159_1176_defigueiredo.html |doi=10.3217/jucs-011-07-1159 |doi-access=free }}</ref>
 
Наступны прыклад - гэта байт-код функцыі фактарыялу, рэалізаванай [[#Прыклад факторыял|вышэй]] (згодна з кампілятарам <code>luac</code> 5.1):<ref name=luavm51instr>{{cite web| author = Kein-Hong Man| title = A No-Frills Introduction to Lua 5.1 VM Instructions| year = 2006| url = https://talk.pokitto.com/uploads/default/original/2X/7/716c67a0b5b1636cbc4dc1fec232ca2536cb74d1.pdf}}</ref>
function <factorial.lua:1,7> (9 instructions, 36 bytes at 0x8063c60)
Радок 472:
== C API ==
 
Lua была распрацавана з мэтай убудавання ў іншыя праграмы, дзеля гэтага яна распаўсюджваецца разам з [[C (мова праграмаваньня)|C]] [[API]]. Які складаецца з дзвюх частак: ядро Lua і дапаможнай бібліятэкі Lua.<ref name="luarefman">{{cite web| url = https://www.lua.org/manual/5.2/| title = Lua 5.2 Reference Manual| publisher = Lua.org| access-date = 2012-10-23}}</ref> Апошняя складаецца ў асноўным з макрасаў прэпрацэсара, якія дапамагаюць са складанымі таблічнымі аперацыямі.
 
Lua C API заснаваны на [[Стэк|стэку]]. Lua забяспечвае функцыі для праштурхоўвання і выцягвання большасці простых тыпаў даных C (цэлыя лікі, плывучыя і г.д.) у стэк і са стэка, а таксама функцыі для маніпулявання табліцамі праз стэк. Стэк Lua некалькі адрозніваецца ад традыцыйнага стэка; напрыклад, яго можна непасрэдна праіндэксаваць. Адмоўныя індэксы паказваюць зрушэнні ад вяршыні стэка. Напрыклад, −1 з'яўляецца верхнім (апошняе значэнне), у той час як дадатныя індэксы паказваюць зрушэнні ад ніжняга (самае старое значэнне). Маршалінг даных паміж функцыямі C і Lua таксама выконваецца з дапамогай стэка. Каб выклікаць функцыю Lua, аргументы замяшчаюцца ў стэк, а затым <code>lua_call</code> выкарыстоўваецца для выкліку Lua функцыі. Пры напісанні функцыі C для непасрэднага выкліку з Lua аргументы счытваюцца са стэка.
Радок 531:
</syntaxhighlight>
 
C API таксама забяспечвае некаторыя спецыяльныя табліцы, размешчаныя ў розных "псеўдаіндэксах" у стэку Lua. У <code>LUA_GLOBALSINDEX</code> да Lua 5.2<ref name="Changes in the API, Lua 5.2 manual">{{cite web| url = https://www.lua.org/manual/5.2/manual.html#8.3 |first1=Roberto |last1=Ierusalimschy |first2=Luiz Henrique |last2=de Figueiredo |first3=Waldemar |last3=Celes | title = Changes in the API | work = Lua 5.2 Reference Manual| publisher = Lua.org| access-date = 2014-05-09}}</ref> знаходзілася глабальная табліца <code>_G</code>, якая з'яўляецца асноўнай [[Прастора імёнаў|прасторай імёнаў]]. Існуе таксама рэестр, размешчаны ў <code>LUA_REGISTRYINDEX</code>, дзе праграмы на C могуць захоўваць даныя Lua для пазнейшага выкарыстання.
 
=== Модулі ===
 
Акрамя стандартных бібліятэчных (асноўных) модуляў, можна пісаць пашырэнні з дапамогай Lua API. Скрыпты Lua могуць загружаць модулі пашырэння з дапамогай <code>require</code>,<ref name="luarefman" /> гэтак жа, як стандартныя модулі самой Lua, або з дапамогай <code>package.loadlib</code>.<ref>{{Cite web |title=Lua 5.4 Reference Manual |url=https://www.lua.org/manual/5.4/manual.html#pdf-package.loadlib |first1=Roberto |last1=Ierusalimschy |first2=Luiz Henrique |last2=de Figueiredo |first3=Waldemar |last3=Celes |access-date=2022-06-01 |website=Lua}}</ref> Калі бібліятэка C загружаецца праз <code>require('foo')</code> Lua выклікае функцыю <code>luaopen_foo</code>, якая дзейнічае як любая функцыя C, якую можна выклікаць з Lua, і звычайна вяртае табліцу, запоўненую мэтодамі. Модулі Lua, вядомыя пад назвай ''rocks,'' даступная праз сістэму кіравання пакетамі LuaRocks.<ref>{{cite web| url = https://luarocks.org/| title = LuaRocks| publisher = luarocks.org | access-date=2009-05-24}}</ref>
 
== Выкарыстанне ==
 
Lua шырока выкарыстоўваецца ў якасці [[Скрыптовая мова|мовы сцэнарыяў]] у [[Распрацоўка відэагульняў|распрацоўцы відэагульняў]], галоўным чынам дзякуючы сваёй лёгкасці ўбудавання, хуткаму выкананню і кароткаму працэсу навучання.<ref>{{cite web|url=https://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |title=Why is Lua considered a game language? |website=Stack Overflow |access-date=2017-04-22 |url-status=dead |archive-url=https://web.archive.org/web/20130820131611/http://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |archive-date=20 August 2013 }}</ref> Сярод вядомых гульняў, якія выкарыстоўваюць Lua, ''[[Roblox]]'',<ref>{{Cite web|title=Why Lua''u''?|url=https://luau-lang.org/why.html|access-date=2022-03-23|website=Luau|language=en-US}}</ref> ''[[Garry's Mod]]'', ''[[World of Warcraft]]'', ''[[Payday 2]]'', ''[[Phantasy Star Online 2]]'', ''[[Dota 2]]'', ''[[Crysis]]''<ref>{{cite web |url = https://crymp.net/thread?id=347 |title = Introduction to Crysis server-side modding |access-date = 23 March 2022}}</ref> і многія іншыя. Некаторыя гульні маюць мадыфікацыі, якія падтрымліваюць Lua, напрыклад, ComputerCraft для ''[[Minecraft]]''. Акрамя таго, Lua таксама выкарыстоўваецца ў праграмным забеспячэнні, не звязаным з відэагульнямі, такім як [[Adobe Lightroom]], [[Moho]], [[iClone]], [[Aerospike]] і пэўным сістэмным праграмным забеспячэнні ў [[FreeBSD]] і [[NetBSD]], а таксама выкарыстоўваецца ў якасці шаблоннай мовы сцэнарыяў на [[МэдыяВікі]] з выкарыстаннем пашырэння Scribunto.<ref>{{Cite web|title=Lua Functions|url=https://wow.gamepedia.com/Lua_functions|access-date=2021-03-01|website=wow.gamepedia.com|language=en-US}}</ref>
 
У 2003 годзе апытанне, праведзенае GameDev.net, паказала, што Lua была самай папулярнай мовай сцэнарыяў для праграмавання гульняў. 12 студзеня 2012 года Lua быў абвешчаны пераможцам прэміі Front Line Award 2011 ад часопіса ''Game Developer'' у катэгорыі «Сродкі праграмавання».
Радок 550:
== Зьнешнія спасылкі ==
 
* [//www.lua.org Афіцыйная старонка]
* {{Official website}}
* [https://luarocks.org/ Lua Rocks - PackageПакетны managerмэнэджар]
 
[[Катэгорыя:Скрыптовыя мовы]]
[[Катэгорыя:Мовы праграмаваньня]]
[[Катэгорыя:Аб'ектна-арыентаваныяСкрыптовыя мовы праграммаваньня]]
[[Катэгорыя:Аб'ектна-арыентаваныя мовы праграмаваньня]]
[[Катэгорыя:Дынамічна тыпізуемыя мовы праграмаваньня]]