लुआ (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(22 intermediate revisions by 4 users not shown)
Line 1: Line 1:
हांग और कमजोर टाइपिंग, [[बतख टाइपिंग]]
लुआ ({{IPAc-en|ˈ|l|uː|ə}} {{Respell|LOO|ə}}; से {{Lang-pt|[[विकट:लुआ#पुर्तगाली|लुआ]]}}  [ˈlu.(w)ɐ] अर्थ [[चांद|चंद्रमा]]) [[हल्की प्रोग्रामिंग भाषा]], उच्च-स्तरीय प्रोग्रामिंग भाषा, [[बहु-प्रतिमान प्रोग्रामिंग भाषा]] है जिसे मुख्य रूप से अनुप्रयोगों में स्क्रिप्टिंग भाषा के लिए डिज़ाइन किया गया है।<ref name="luaspe">{{cite journal|last1=Ierusalimschy|first1=Roberto|last2=de Figueiredo|first2=Luiz Henrique|last3=Filho|first3=Waldemar Celes|title=लुआ-एक एक्स्टेंसिबल एक्सटेंशन लैंग्वेज|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|url=https://www.lua.org/spe.html|access-date=24 October 2015}}</ref> लुआ क्रॉस-प्लेटफ़ॉर्म है, चूंकि [[संकलक]] [[बाईटकोड]] का इंटरप्रेटर (कंप्यूटिंग) एएनएसआई सी में लिखा गया है,<ref name="luaabout">{{cite web| url = https://www.lua.org/about.html#why| title = लुआ के बारे में| publisher = Lua.org| access-date = 2011-08-11}}</ref> और लुआ के पास इसे अनुप्रयोगों में अंतःस्थापित करने के लिए अपेक्षाकृत सरल सी [[एपीआई]] है।<ref>{{cite web |url=https://www.foreignaffairs.com/articles/139332/yuri-takhteyev/from-brazil-to-wikipedia?page=2 |title=ब्राजील से विकिपीडिया तक|work=[[Foreign Affairs]] |author=Yuri Takhteyev |date=21 April 2013 |access-date=25 April 2013}}</ref>
| कार्यान्वयन = [//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 Luau]
| प्रोग्रामिंग_भाषा = [[एएनएसआई सी]]
| बोलियाँ = [http://metalua.luaforge.net/ Metalua], [http://idle.thomaslauer.com आइडल], [https://www.nongnu.org/gsl-shell/ जीएसएल शेल]
| impact_by = [[C++]], CLU (प्रोग्रामिंग भाषा), [[Modula-2]], [[योजना (प्रोग्रामिंग भाषा)]], [[SNOBOL]]
| प्रभावित = [[GameMonkey Script]], [[आयो (प्रोग्रामिंग भाषा)]], [[जावास्क्रिप्ट]], [[जूलिया (प्रोग्रामिंग भाषा)]], मिनी डी, [[लाल (प्रोग्रामिंग भाषा)]], रिंग_ (प्रोग्रामिंग_भाषा),<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=रिंग प्रोग्रामिंग भाषा और अन्य भाषाएँ|author=Ring Team |date=5 December 2017 |work=ring-lang.net }}</ref> [[रूबी (प्रोग्रामिंग भाषा)]], [[गिलहरी (प्रोग्रामिंग भाषा)]], मूनस्क्रिप्ट, [[सी--]]
| ऑपरेटिंग_सिस्टम = [[क्रॉस-प्लेटफॉर्म]]
| लाइसेंस = [[मेरा लाइसेंस]]
| वेबसाइट =  
| फ़ाइल एक्सट = <code>.lua</code>
<nowiki>| विकिबुक्स =
}}</nowiki>


लुआ ({{IPAc-en|ˈ|l|uː|ə}} {{Respell|LOO|ə}}; से {{Lang-pt|[[wikt:lua#Portuguese|lua]]}} {{IPA-pt|ˈlu.(w)ɐ|}} मीनिंग [[चांद]]) एक [[हल्की प्रोग्रामिंग भाषा]] है, उच्च-स्तरीय प्रोग्रामिंग भाषा | उच्च-स्तरीय, [[बहु-प्रतिमान प्रोग्रामिंग भाषा]] जिसे मुख्य रूप से अनुप्रयोगों में स्क्रिप्टिंग भाषा के लिए डिज़ाइन किया गया है।<ref name="luaspe">{{cite journal|last1=Ierusalimschy|first1=Roberto|last2=de Figueiredo|first2=Luiz Henrique|last3=Filho|first3=Waldemar Celes|title=लुआ-एक एक्स्टेंसिबल एक्सटेंशन लैंग्वेज|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|url=https://www.lua.org/spe.html|access-date=24 October 2015}}</ref> लुआ क्रॉस-प्लेटफ़ॉर्म है, चूंकि [[संकलक]] [[बाईटकोड]] का इंटरप्रेटर (कंप्यूटिंग) एएनएसआई सी में लिखा गया है,<ref name=luaabout>{{cite web| url = https://www.lua.org/about.html#why| title = लुआ के बारे में| publisher = Lua.org| access-date = 2011-08-11}}</ref> और लुआ के पास इसे अनुप्रयोगों में एम्बेड करने के लिए अपेक्षाकृत सरल सी [[एपीआई]] है।<ref>{{cite web |url=https://www.foreignaffairs.com/articles/139332/yuri-takhteyev/from-brazil-to-wikipedia?page=2 |title=ब्राजील से विकिपीडिया तक|work=[[Foreign Affairs]] |author=Yuri Takhteyev |date=21 April 2013 |access-date=25 April 2013}}</ref>
लुआ की उत्पत्ति 1993 में उस समय अनुकूलन की बढ़ती मांग को पूरा करने के लिए [[अनुप्रयोग प्रक्रिया सामग्री|सॉफ्टवेयर अनुप्रयोगों]] के विस्तार के लिए भाषा के रूप में हुई थी। इसने अधिकांश [[प्रक्रियात्मक प्रोग्रामिंग]] भाषाओं की मूलभूत सुविधाएं प्रदान किया था, किन्तु अधिक जटिल या [[डोमेन-विशिष्ट भाषा]] सुविधाओं को सम्मिलित  नहीं किया गया; किन्तु, इसमें प्रोग्रामर को ऐसी सुविधाओं को प्रायुक्त करने की अनुमति देने वाली भाषा का विस्तार करने के लिए तंत्र सम्मिलित  थे। जैसा कि लुआ को सामान्य अंतःस्थापित करने योग्य विस्तार भाषा बनाने का विचार था, लुआ के डिजाइनरों ने इसकी [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)]], [[में porting|में पोर्टेबिलिटी]], एक्स्टेंसिबिलिटी और विकास में उपयोग में आसानी पर ध्यान केंद्रित किया था।
लुआ की उत्पत्ति 1993 में उस समय अनुकूलन की बढ़ती मांग को पूरा करने के लिए [[अनुप्रयोग प्रक्रिया सामग्री]] के विस्तार के लिए एक भाषा के रूप में हुई थी। इसने अधिकांश [[प्रक्रियात्मक प्रोग्रामिंग]] भाषाओं की बुनियादी सुविधाएं प्रदान कीं, लेकिन अधिक जटिल या [[डोमेन-विशिष्ट भाषा]]|डोमेन-विशिष्ट सुविधाओं को शामिल नहीं किया गया; बल्कि, इसमें भाषा का विस्तार करने के लिए तंत्र शामिल थे, जिससे प्रोग्रामर ऐसी सुविधाओं को लागू कर सकें। जैसा कि लुआ को एक सामान्य एम्बेड करने योग्य विस्तार भाषा बनाने का इरादा था, लुआ के डिजाइनरों ने इसकी [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)]], [[में porting]], एक्स्टेंसिबिलिटी और विकास में उपयोग में आसानी पर ध्यान केंद्रित किया।


== इतिहास ==
== इतिहास ==
लुआ को 1993 में [[ब्राज़िल]] में रियो डी जनेरियो के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में कंप्यूटर ग्राफिक्स टेक्नोलॉजी ग्रुप (टेक्ग्राफ) के सदस्य [[रॉबर्टो इरुसलिम्स्की]], लुइज़ हेनरिक डी फिगुएरेडो और वाल्डेमर सेलेस द्वारा बनाया गया था।
लुआ को 1993 में [[ब्राज़िल]] में रियो डी जनेरियो के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में कंप्यूटर ग्राफिक्स टेक्नोलॉजी ग्रुप (टेक्ग्राफ) के सदस्य [[रॉबर्टो इरुसलिम्स्की]], लुइज़ हेनरिक डी फिगुएरेडो और वाल्डेमर सेलेस द्वारा बनाया गया था।


1977 से 1992 तक, ब्राजील में कंप्यूटर हार्डवेयर और सॉफ्टवेयर के लिए मजबूत व्यापार बाधाओं (जिसे मार्केट रिजर्व कहा जाता है) की नीति थी। उस माहौल में, टेकग्राफ के ग्राहक राजनीतिक या आर्थिक रूप से विदेश से अनुकूलित सॉफ्टवेयर खरीदने का जोखिम नहीं उठा सकते थे। उन कारणों ने टेकग्राफ को खरोंच से आवश्यक बुनियादी उपकरणों को लागू करने के लिए प्रेरित किया।<ref name=hopl2007>{{cite book| last1 = Ierusalimschy | first1 = R.| author1-link = Roberto Ierusalimschy| last2 = Figueiredo| first2 = L. H. | last3 = Celes| first3 = W.| contribution = The evolution of Lua| contribution-url = https://www.lua.org/doc/hopl.pdf| doi = 10.1145/1238844.1238846| title = प्रक्रिया। एसीएम एचओपीएल III का| 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>
1977 से 1992 तक, ब्राजील में कंप्यूटर हार्डवेयर और सॉफ्टवेयर के लिए शक्तिशाली व्यापार बाधाओं (जिसे मार्केट रिजर्व कहा जाता है) की नीति थी। उस माहौल में, टेकग्राफ के ग्राहक राजनीतिक या आर्थिक रूप से विदेश से अनुकूलित सॉफ्टवेयर खरीदने का जोखिम नहीं उठा सकते थे। उन कारणों ने टेकग्राफ को खरोंच से आवश्यक मूलभूत उपकरणों को प्रायुक्त करने के लिए प्रेरित किया था।<ref name=hopl2007>{{cite book| last1 = Ierusalimschy | first1 = R.| author1-link = Roberto Ierusalimschy| last2 = Figueiredo| first2 = L. H. | last3 = Celes| first3 = W.| contribution = The evolution of Lua| contribution-url = https://www.lua.org/doc/hopl.pdf| doi = 10.1145/1238844.1238846| title = प्रक्रिया। एसीएम एचओपीएल III का| 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>
लुआ के पूर्ववर्ती डेटा-विवरण/कॉन्फ़िगरेशन भाषाएँ SOL (सिंपल ऑब्जेक्ट लैंग्वेज) और DEL (डेटा-एंट्री भाषा) थीं।<ref name="luahist2001">{{cite web|url=https://www.lua.org/history.html|title=एक विस्तार भाषा का विकास: लुआ का इतिहास|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 = एक विस्तार भाषा का विकास: लुआ का इतिहास| contribution-url = https://www.lua.org/history.html| title = प्रक्रिया। प्रोग पर वी ब्राजीलियाई संगोष्ठी का। लैंग।| year = 2001| pages = B–14–B–28}} --></ref> वे 1992-1993 में टेकग्राफ में दो अलग-अलग परियोजनाओं में कुछ लचीलापन जोड़ने के लिए स्वतंत्र रूप से विकसित किए गए थे (दोनों [[पेट्रोब्रास]] कंपनी में इंजीनियरिंग अनुप्रयोगों के लिए इंटरैक्टिव ग्राफिकल प्रोग्राम थे)। एसओएल और डीईएल में किसी भी प्रवाह-नियंत्रण संरचनाओं की कमी थी, और पेट्रोब्रास ने उन्हें पूर्ण प्रोग्रामिंग शक्ति जोड़ने की बढ़ती आवश्यकता महसूस की।
लुआ के पूर्ववर्ती डेटा-विवरण/कॉन्फ़िगरेशन भाषाएँ एसओएल (सिंपल ऑब्जेक्ट लैंग्वेज) और डीईएल (डेटा-एंट्री भाषा) थीं।<ref name="luahist2001">{{cite web|url=https://www.lua.org/history.html|title=एक विस्तार भाषा का विकास: लुआ का इतिहास|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 = एक विस्तार भाषा का विकास: लुआ का इतिहास| contribution-url = https://www.lua.org/history.html| title = प्रक्रिया। प्रोग पर वी ब्राजीलियाई संगोष्ठी का। लैंग।| year = 2001| pages = B–14–B–28}} --></ref> वे 1992-1993 में टेकग्राफ में दो अलग-अलग परियोजनाओं में कुछ लचीलापन जोड़ने के लिए स्वतंत्र रूप से विकसित किए गए थे (दोनों [[पेट्रोब्रास]] कंपनी में इंजीनियरिंग अनुप्रयोगों के लिए इंटरैक्टिव ग्राफिकल प्रोग्राम थे)। एसओएल और डीईएल में किसी भी प्रवाह-नियंत्रण संरचनाओं की कमी थी, और पेट्रोब्रास ने उन्हें पूर्ण प्रोग्रामिंग शक्ति जोड़ने की बढ़ती आवश्यकता अनुभव किया था।


लुआ के विकास में, भाषा के लेखकों ने लिखा:<ref name=hopl2007 />
लुआ के विकास में, भाषा के लेखकों ने लिखा:<ref name=hopl2007 />


{{Quote|In 1993, the only real contender was [[Tcl]], which had been explicitly designed to be embedded into applications. However, Tcl had unfamiliar syntax, did not offer good support for data description, and ran only on Unix platforms. We did not consider [[Lisp (programming language)|LISP]] or [[Scheme (programming language)|Scheme]] because of their unfriendly syntax. [[Python (programming language)|Python]] was still in its infancy. In the free, do-it-yourself atmosphere that then reigned in Tecgraf, it was quite natural that we should try to develop our own scripting language&nbsp;... Because many potential users of the language were not professional programmers, the language should avoid cryptic syntax and semantics. The implementation of the new language should be highly portable, because Tecgraf's clients had a very diverse collection of computer platforms. Finally, since we expected that other Tecgraf products would also need to embed a scripting language, the new language should follow the example of SOL and be provided as a library with a C API.}}
{{Quote|1993 में, एकमात्र वास्तविक दावेदार [[टीसीएल]] था, जिसे स्पष्ट रूप से अनुप्रयोगों में एम्बेड करने के लिए डिज़ाइन किया गया था। हालाँकि, Tcl में अपरिचित सिंटैक्स था, डेटा विवरण के लिए अच्छा समर्थन नहीं देता था, और केवल यूनिक्स प्लेटफॉर्म पर चलता था। हमने [[लिस्प (प्रोग्रामिंग लैंग्वेज)|एलआईएसपी]] या [[स्कीम (प्रोग्रामिंग लैंग्वेज)|स्कीम]] पर विचार नहीं किया क्योंकि उनके अमित्र सिंटैक्स थे। [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] अभी भी अपनी प्रारंभिक अवस्था में था। फ्री, डू-इट-योरसेल्फ वातावरण में जो तब टेकग्राफ में राज करता था, यह काफी स्वाभाविक था कि हमें अपनी खुद की स्क्रिप्टिंग भाषा विकसित करने की कोशिश करनी चाहिए&nbsp;... क्योंकि भाषा के कई संभावित उपयोगकर्ता पेशेवर प्रोग्रामर नहीं थे, भाषा से बचना चाहिए गूढ़ वाक्य रचना और शब्दार्थ। नई भाषा का कार्यान्वयन अत्यधिक पोर्टेबल होना चाहिए, क्योंकि टेकग्राफ के ग्राहकों के पास कंप्यूटर प्लेटफॉर्म का एक बहुत ही विविध संग्रह था। अंत में, चूंकि हमें उम्मीद थी कि अन्य टेकग्राफ उत्पादों को भी एक स्क्रिप्टिंग भाषा को एम्बेड करने की आवश्यकता होगी, नई भाषा को एसओएल के उदाहरण का पालन करना चाहिए और सी एपीआई के साथ एक पुस्तकालय के रूप में प्रदान किया जाना चाहिए।}}
लुआ 1.0 को इस तरह से डिजाइन किया गया था कि इसके ऑब्जेक्ट कंस्ट्रक्टर्स, वर्तमान प्रकाश और लचीली शैली से थोड़ा अलग होने के कारण, एसओएल के डेटा-विवरण सिंटैक्स को शामिल किया गया (इसलिए नाम लुआ: सोल का अर्थ पुर्तगाली में सूर्य, और लुआ का अर्थ चंद्रमा) . नियंत्रण संरचनाओं के लिए लुआ [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] ज्यादातर [[मापांक]] से उधार लिया गया था (<code>if</code>, <code>while</code>, <code>repeat</code>/<code>until</code>), लेकिन सीएलयू (प्रोग्रामिंग लैंग्वेज) (कई असाइनमेंट और फ़ंक्शन कॉल से कई रिटर्न, संदर्भ या स्पष्ट [[सूचक (कंप्यूटर प्रोग्रामिंग)]] द्वारा कॉल करने के लिए एक सरल विकल्प के रूप में), सी ++ (एक [[स्थानीय चर]] को अनुमति देने का साफ विचार) से भी प्रभावित हुआ था। केवल वहीं घोषित किया जाए जहां हमें इसकी आवश्यकता है<ref name=hopl2007 />), SNOBOL और [[AWK]] (सहयोगी सरणियाँ)। डॉ. डॉब के जर्नल में प्रकाशित एक लेख में, लुआ के रचनाकारों ने यह भी कहा कि एलआईएसपी और योजना उनके एकल, सर्वव्यापी डेटा-संरचना तंत्र ([[सूची (सार डेटा प्रकार)]]) के साथ तालिका को प्राथमिक के रूप में विकसित करने के उनके निर्णय पर एक बड़ा प्रभाव था। लुआ की डेटा संरचना।<ref name=ddj96>{{cite news| last1 = Figueiredo | first1 = L. H. | last2 = Ierusalimschy | first2 = R. | last3 = Celes| first3 = W. | title = लुआ: एक एक्स्टेंसिबल एंबेडेड लैंग्वेज। कुछ मेटामैकेनिज्म कई सुविधाओं को बदल देते हैं| magazine = Dr. Dobb's Journal| volume = 21| issue = 12| pages = 26–33| date = December 1996| url = https://www.lua.org/ddj.html}}</ref>
लुआ [[अर्थ विज्ञान]] समय के साथ योजना से तेजी से प्रभावित हुए हैं,<ref name=hopl2007 />विशेष रूप से अनाम कार्यों और पूर्ण स्कोप (कंप्यूटर विज्ञान) # लेक्सिकल स्कोप बनाम डायनेमिक स्कोप की शुरुआत के साथ। नए लुआ संस्करणों में कई सुविधाएँ जोड़ी गईं।


संस्करण 5.0 से पहले लुआ के संस्करण [[बीएसडी लाइसेंस]] के समान लाइसेंस के तहत जारी किए गए थे। संस्करण 5.0 के बाद से, लुआ को एमआईटी लाइसेंस के तहत लाइसेंस दिया गया है। दोनों [[अनुमेय मुफ्त सॉफ्टवेयर लाइसेंस]] हैं और लगभग समान हैं।
लुआ 1.0 को इस प्रकार से डिजाइन किया गया था कि इसके ऑब्जेक्ट कंस्ट्रक्टर्स, वर्तमान प्रकाश और लचीली शैली से थोड़ा अलग होने के कारण, एसओएल के डेटा-विवरण सिंटैक्स को सम्मिलित (इसलिए नाम लुआ: सोल का अर्थ पुर्तगाली में सूर्य, और लुआ का अर्थ चंद्रमा) किया गया है। नियंत्रण संरचनाओं के लिए लुआ [[सिंटेक्स (प्रोग्रामिंग भाषाएं)]] अधिकांशतः [[मापांक]] (<code>if</code>, <code>while</code>, <code>repeat</code>/<code>until</code>) से उधार लिया गया था, किन्तु सीएलयू (प्रोग्रामिंग लैंग्वेज) (कई असाइनमेंट और फ़ंक्शन कॉल से कई रिटर्न, संदर्भ या स्पष्ट [[सूचक (कंप्यूटर प्रोग्रामिंग)]] द्वारा कॉल करने के लिए सरल विकल्प के रूप में), सी ++ ([[स्थानीय चर]] को अनुमति देने का साफ विचार) से भी प्रभावित हुआ था। केवल वहीं घोषित किया जाए जहां हमें इसकी आवश्यकता है<ref name=hopl2007 />), SNOBOL और [[AWK]] (सहयोगी सरणियाँ)। डॉ. डॉब के जर्नल में प्रकाशित लेख में, लुआ के रचनाकारों ने यह भी कहा कि एलआईएसपी और योजना उनके एकल, सर्वव्यापी डेटा-संरचना तंत्र ([[सूची (सार डेटा प्रकार)]]) के साथ तालिका को लुआ की प्राथमिक डेटा संरचना के रूप में विकसित करने के उनके निर्णय पर बड़ा प्रभाव था।<ref name=ddj96>{{cite news| last1 = Figueiredo | first1 = L. H. | last2 = Ierusalimschy | first2 = R. | last3 = Celes| first3 = W. | title = लुआ: एक एक्स्टेंसिबल एंबेडेड लैंग्वेज। कुछ मेटामैकेनिज्म कई सुविधाओं को बदल देते हैं| magazine = Dr. Dobb's Journal| volume = 21| issue = 12| pages = 26–33| date = December 1996| url = https://www.lua.org/ddj.html}}</ref>
 
लुआ [[अर्थ विज्ञान|सिमेंटिक्स]] समय के साथ विशेष रूप से गुमनाम कार्यों और पूर्ण शाब्दिक दायरे की प्रारंभ के साथ योजना से प्रभावित हुए हैं।<ref name="hopl2007" /> नए लुआ संस्करणों में कई सुविधाएँ जोड़ी गईं।
 
संस्करण 5.0 से पहले लुआ के संस्करण [[बीएसडी लाइसेंस]] के समान लाइसेंस के अनुसार जारी किए गए थे। संस्करण 5.0 के बाद से, लुआ को एमआईटी लाइसेंस के अनुसार लाइसेंस दिया गया है। दोनों [[अनुमेय मुफ्त सॉफ्टवेयर लाइसेंस]] हैं और लगभग समान हैं।


== सुविधाएँ ==
== सुविधाएँ ==
{{Wikibooks|Lua Programming}}
{{Wikibooks|Lua Programming}}
लुआ को आमतौर पर बहु-प्रतिमान प्रोग्रामिंग भाषा के रूप में वर्णित किया जाता है। बहु-प्रतिमान भाषा, सामान्य सुविधाओं का एक छोटा सा सेट प्रदान करती है जिसे विभिन्न प्रकार की समस्या के लिए बढ़ाया जा सकता है। लुआ में [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] के लिए स्पष्ट समर्थन नहीं है, लेकिन इसे [[मेटाटेबल]]्स के साथ लागू करने की अनुमति देता है। इसी तरह, लुआ प्रोग्रामर्स को नामस्थान, क्लास (कंप्यूटर प्रोग्रामिंग), और अन्य संबंधित विशेषताओं को इसके एकल टेबल कार्यान्वयन का उपयोग करने की अनुमति देता है; प्रथम श्रेणी के कार्य [[कार्यात्मक प्रोग्रामिंग]] से कई तकनीकों के रोजगार की अनुमति देते हैं; और पूर्ण [[लेक्सिकल स्कूपिंग]] कम से कम विशेषाधिकार के सिद्धांत को लागू करने के लिए ठीक-ठाक जानकारी को छिपाने की अनुमति देता है।
लुआ को सामान्यतः बहु-प्रतिमान प्रोग्रामिंग भाषा के रूप में वर्णित किया जाता है। बहु-प्रतिमान भाषा, सामान्य सुविधाओं का छोटा सा सेट प्रदान करती है जिसे विभिन्न प्रकार की समस्या के लिए बढ़ाया जा सकता है। लुआ में [[वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग)]] के लिए स्पष्ट समर्थन नहीं है, किन्तु इसे [[मेटाटेबल|मेटासूचियाँ]] के साथ प्रायुक्त करने की अनुमति देता है। इसी प्रकार, लुआ प्रोग्रामर्स को नामस्थान, क्लास (कंप्यूटर प्रोग्रामिंग), और अन्य संबंधित विशेषताओं को इसके एकल टेबल कार्यान्वयन का उपयोग करने की अनुमति देता है; प्रथम श्रेणी के कार्य [[कार्यात्मक प्रोग्रामिंग]] से कई विधियों के रोजगार की अनुमति देते हैं; और पूर्ण [[लेक्सिकल स्कूपिंग]] कम से कम विशेषाधिकार के सिद्धांत को प्रायुक्त करने के लिए ठीक-ठाक जानकारी को छिपाने की अनुमति देता है।


सामान्य तौर पर, लुआ सरल, लचीला [[मेटाप्रोग्रामिंग]] प्रदान करने का प्रयास करता है| परिणामस्वरूप, आधार भाषा लाइटवेट प्रोग्रामिंग भाषा है—पूर्ण संदर्भ दुभाषिया (कंप्यूटिंग) केवल लगभग 247 [[किलोबाइट]] संकलित है<ref name=luaabout />-और अनुप्रयोगों की एक विस्तृत श्रृंखला के लिए आसानी से अनुकूलनीय।
सामान्यतः, लुआ सरल, लचीली [[मेटाप्रोग्रामिंग]] प्रदान करने का प्रयास करता है, जिसे प्रोग्रामिंग प्रतिमान के लिए विशिष्ट फीचर-सेट की आपूर्ति के अतिरिक्त आवश्यकतानुसार बढ़ाया जा सकता है। परिणामस्वरूप, आधार भाषा हल्की है, पूर्ण संदर्भ इंटरप्रेटर केवल 247 [[किलोबाइट]] संकलित है और अनुप्रयोगों की विस्तृत श्रृंखला के लिए आसानी से अनुकूलनीय है।<ref name=luaabout />


विस्तार भाषा या स्क्रिप्टिंग भाषा के रूप में उपयोग के लिए एक गतिशील रूप से टाइप की गई भाषा, लुआ विभिन्न प्रकार के होस्ट प्लेटफॉर्म पर फिट होने के लिए पर्याप्त कॉम्पैक्ट है। यह [[बूलियन डेटा प्रकार]] मान, संख्या (डबल-परिशुद्धता [[तैरनेवाला स्थल]] और डिफ़ॉल्ट रूप से 64-बिट [[पूर्णांक]]), और [[स्ट्रिंग (कंप्यूटर विज्ञान)]] जैसे परमाणु डेटा संरचनाओं की एक छोटी संख्या का समर्थन करता है। विशिष्ट डेटा संरचनाएं जैसे कि एरे डेटा संरचना, [[सेट (कंप्यूटर विज्ञान)]], [[सूची (कंप्यूटिंग)]], और [[रिकॉर्ड (कंप्यूटर विज्ञान)]] को लुआ की एकल मूल डेटा संरचना, तालिका का उपयोग करके प्रदर्शित किया जा सकता है, जो अनिवार्य रूप से एक विषम साहचर्य सरणी है।
विस्तार भाषा या स्क्रिप्टिंग भाषा के रूप में उपयोग के लिए गतिशील रूप से टाइप की गई भाषा, लुआ विभिन्न प्रकार के होस्ट प्लेटफॉर्म पर फिट होने के लिए पर्याप्त कॉम्पैक्ट है। यह [[बूलियन डेटा प्रकार|बूलियन डेटा]] मान, संख्या (दोहरा-परिशुद्धता [[तैरनेवाला स्थल|फ़्लोटिंग पॉइंट]] और डिफ़ॉल्ट रूप से 64-बिट [[पूर्णांक]]), और [[स्ट्रिंग (कंप्यूटर विज्ञान)]] जैसे परमाणु डेटा संरचनाओं की छोटी संख्या का समर्थन करता है। लुआ की एकल मूल डेटा संरचना, तालिका, जो अनिवार्य रूप से विषम साहचर्य सरणी है, का उपयोग करके सरणियों, सेटों, [[सूची (कंप्यूटिंग)]] और [[रिकॉर्ड (कंप्यूटर विज्ञान)]] जैसे विशिष्ट [[सेट (कंप्यूटर विज्ञान)]] संरचनाओं का प्रतिनिधित्व किया जा सकता है।


लुआ उन्नत सुविधाओं के एक छोटे सेट को लागू करता है जैसे प्रथम श्रेणी के कार्य, [[कचरा संग्रह (कंप्यूटर विज्ञान)]], क्लोजर (कंप्यूटर विज्ञान), उचित [[पूंछ की पुनरावृत्ति]], प्रकार रूपांतरण (रन टाइम पर स्ट्रिंग और संख्या मानों के बीच स्वत: रूपांतरण), कोरटाइन (सहकारी) मल्टीटास्किंग) और [[गतिशील लोडिंग]]
लुआ उन्नत सुविधाओं के छोटे सेट को प्रायुक्त करता है जैसे प्रथम श्रेणी के कार्य, [[कचरा संग्रह (कंप्यूटर विज्ञान)]], क्लोजर (कंप्यूटर विज्ञान), उचित [[पूंछ की पुनरावृत्ति]], प्रकार रूपांतरण (रन टाइम पर स्ट्रिंग और संख्या मानों के बीच स्वत: रूपांतरण), कोरटाइन (सहकारी) मल्टीटास्किंग) और [[गतिशील लोडिंग]] बंद करता है।


=== सिंटेक्स ===
=== सिंटेक्स ===
क्लासिक हैलो, वर्ल्ड! कार्यक्रम को इस प्रकार लिखा जा सकता है:<ref>{{cite web | url=https://www.lua.org/pil/1.html | title=लुआ में प्रोग्रामिंग : 1}}</ref>
क्लासिक हैलो, वर्ल्ड! कार्यक्रम को इस प्रकार लिखा जा सकता है:<ref>{{cite web | url=https://www.lua.org/pil/1.html | title=लुआ में प्रोग्रामिंग : 1}}</ref><syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = लुआ>
print("Hello, World!")
प्रिंट (हैलो, वर्ल्ड!)
</syntaxhighlight>या के रूप में<syntaxhighlight lang="d">
</वाक्यविन्यास हाइलाइट>
print 'Hello, World!'
या के रूप में:
</syntaxhighlight>लुआ में [[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] डबल-हाइफ़न के साथ प्रारंभ होती है और [[एडा (प्रोग्रामिंग भाषा)]], [[एफिल (प्रोग्रामिंग भाषा)]], [[हास्केल (प्रोग्रामिंग भाषा)]], [[एसक्यूएल]] और [[वीएचडीएल]] के समान लाइन के अंत तक चलती है। बहु-पंक्ति तार और टिप्पणियाँ दोहरे वर्ग कोष्ठक से सुशोभित हैं। [[कारख़ाने का]] फ़ंक्शन को इस उदाहरण में फ़ंक्शन के रूप में प्रायुक्त किया गया है:<syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = लुआ>
function factorial(n)
प्रिंट 'हैलो, वर्ल्ड!'
   local x = 1
</वाक्यविन्यास हाइलाइट>
   for i = 2, n do
 
     x = x * i
लुआ में एक [[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] एक डबल-हाइफ़न के साथ शुरू होती है और [[एडा (प्रोग्रामिंग भाषा)]], [[एफिल (प्रोग्रामिंग भाषा)]], [[हास्केल (प्रोग्रामिंग भाषा)]], [[एसक्यूएल]] और [[वीएचडीएल]] के समान लाइन के अंत तक चलती है। बहु-पंक्ति तार और टिप्पणियाँ दोहरे वर्ग कोष्ठक से सुशोभित हैं।[[कारख़ाने का]] फ़ंक्शन को इस उदाहरण में एक फ़ंक्शन के रूप में लागू किया गया है:
   end
<वाक्यविन्यास लैंग = लुआ>
   return x
समारोह फैक्टोरियल (एन)
end
   स्थानीय एक्स = 1
</syntaxhighlight>
   मैं = 2 के लिए, एन करते हैं
     एक्स = एक्स * मैं
   समाप्त
   वापसी एक्स
समाप्त
</वाक्यविन्यास हाइलाइट>


=== नियंत्रण प्रवाह ===
=== नियंत्रण प्रवाह ===
लुआ में एक प्रकार की [[सशर्त (कंप्यूटर प्रोग्रामिंग)]] परीक्षा है: <code>[[Conditional_(computer_programming)#If–then(–else)|if then end]]</code> वैकल्पिक के साथ <code>else</code> तथा <code>elseif then</code> निष्पादन नियंत्रण निर्माण।
लुआ में प्रकार की [[सशर्त (कंप्यूटर प्रोग्रामिंग)]] परीक्षण होता है: <code>[[Conditional_(computer_programming)#If–then(–else)|if then end]]</code> वैकल्पिक के साथ <code>else</code> तथा <code>elseif then</code> निष्पादन नियंत्रण का निर्माण होता है।
 
सामान्य <code>if then end</code> कथन के लिए तीनों खोजशब्दों की आवश्यकता है:
<वाक्यविन्यास लैंग = लुआ>
अगर शर्त है तो
--स्टेटमेंट बॉडी
समाप्त
</वाक्यविन्यास हाइलाइट> <code>else</code> निष्पादन को नियंत्रित करने के लिए ई> कीवर्ड को एक साथ स्टेटमेंट ब्लॉक के साथ जोड़ा जा सकता है <code>if</code> स्थिति का मूल्यांकन करता है <code>false</code>:
<वाक्यविन्यास लैंग = लुआ>
अगर शर्त है तो
--स्टेटमेंट बॉडी
वरना
--स्टेटमेंट बॉडी
समाप्त
</वाक्यविन्यास हाइलाइट>
 
का उपयोग करके कई शर्तों के अनुसार निष्पादन को भी नियंत्रित किया जा सकता है <code>elseif then</code> खोजशब्द:
<वाक्यविन्यास लैंग = लुआ>
अगर शर्त है तो
--स्टेटमेंट बॉडी
अन्य स्थिति तब
--स्टेटमेंट बॉडी
अन्य - वैकल्पिक
--वैकल्पिक डिफ़ॉल्ट स्टेटमेंट बॉडी
समाप्त
</वाक्यविन्यास हाइलाइट>


लुआ में चार प्रकार के कंडीशनल लूप होते हैं: जबकि लूप|<code>while</code> लूप, <code>repeat</code> लूप (लूप के दौरान डू के समान |<code> do while</code> लूप), लूप के लिए न्यूमेरिक |<code>for</code> लूप, और जेनेरिक <code>for</code> फंदा।
सामान्य <code>if then end</code> कथन के लिए तीनों खोजशब्दों की आवश्यकता होती है:<syntaxhighlight lang="d">
if condition then
--statement body
end
</syntaxhighlight><code>else</code> कीवर्ड को साथ स्टेटमेंट ब्लॉक के साथ निष्पादन को नियंत्रित करने के लिए जोड़ा जा सकता है, जब <code>if</code> स्थिति <code>false</code>का मूल्यांकन करता है:<syntaxhighlight lang="d">
if condition then
--statement body
else
--statement body
end
</syntaxhighlight>कई स्थितियों के अनुसार <code>elseif then</code> का उपयोग करके निष्पादन को नियंत्रित किया जा सकता है, खोजशब्द:<syntaxhighlight lang="d">
if condition then
--statement body
elseif condition then
--statement body
else -- optional
--optional default statement body
end
</syntaxhighlight>लुआ में चार प्रकार के कंडीशनल लूप होते हैं, <code>while</code> लूप, <code>repeat</code> लूप (लूप के समय <code> do while</code> के समान) लूप <code>for</code> न्यूमेरिक और लूप <code>for</code> के लिए जेनेरिक होता है।<syntaxhighlight lang="d">
--condition = true


<वाक्यविन्यास लैंग = लुआ>
while condition do
--स्थिति = सत्य
  --statements
end


जबकि हालत करते हैं
repeat
   --बयान
   --statements
समाप्त
until condition


दोहराना
for i = first, last, delta do  --delta may be negative, allowing the for loop to count down or up
   --बयान
  --statements
स्थिति तक
   --example: print(i)
end
</syntaxhighlight>लूप <code>for</code> सामान्यतः <syntaxhighlight lang="d">
for key, value in pairs(_G) do
  print(key, value)
end
</syntaxhighlight>सूची पर पुनरावृति फलन <code>pairs</code> का उपयोग करके तालिका <code>_G</code> पर पुनरावृत्त होगा, जब तक कि यह <code>nil</code>न हो जाए।


for i = first, last, delta do --delta नेगेटिव हो सकता है, जिससे for लूप काउंट डाउन या अप हो सकता है
लूप को [[नेस्टिंग (प्रोग्रामिंग)|नेस्टेड (प्रोग्रामिंग)]] भी किया जा सकता है (दूसरे लूप के अंदर डालें)।<syntaxhighlight lang="d">
  --बयान
local grid = {
  --उदाहरण: प्रिंट (मैं)
   { 11, 12, 13 },
समाप्त
   { 21, 22, 23 },
</वाक्यविन्यास हाइलाइट>
   { 31, 32, 33 }
 
सामान्य <code>for</code> फंदा:
<वाक्यविन्यास लैंग = लुआ>
कुंजी के लिए, जोड़े में मान (_G) करते हैं
  प्रिंट (कुंजी, मान)
समाप्त
</वाक्यविन्यास हाइलाइट>
मेज पर पुनरावृति करेंगे <code>_G</code> मानक इटरेटर फ़ंक्शन का उपयोग करना <code>pairs</code>, जब तक यह वापस नहीं आता <code>nil</code>.
 
लूप [[नेस्टिंग (प्रोग्रामिंग)]] भी हो सकते हैं (दूसरे लूप के अंदर डालें)।
 
<वाक्यविन्यास लैंग = लुआ>
स्थानीय ग्रिड = {
   {11, 12, 13},
   {21, 22, 23},
   {31, 32, 33}
}
}


वाई के लिए, जोड़े में पंक्ति (ग्रिड) करते हैं
for y, row in pairs(grid) do
   एक्स के लिए, जोड़े में मूल्य (पंक्ति) करते हैं
   for x, value in pairs(row) do
     प्रिंट (एक्स, वाई, मान)
     print(x, y, value)
   समाप्त
   end
समाप्त
end
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>


=== कार्य ===
=== कार्य ===
प्रथम श्रेणी के फ़ंक्शन के रूप में लुआ के कार्यों का उपचार | प्रथम श्रेणी के मान निम्न उदाहरण में दिखाए गए हैं, जहां प्रिंट फ़ंक्शन का व्यवहार संशोधित किया गया है:
प्रथम श्रेणी के फलन के रूप में लुआ के कार्यों का उपचार निम्न उदाहरण में दिखाए गए हैं, जहां प्रिंट फलन का व्यवहार संशोधित किया गया है:<syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = लुआ>
do
करना
   local oldprint = print
   स्थानीय ओल्डप्रिंट = प्रिंट
   -- Store current print function as oldprint
   - पुराने प्रिंट के रूप में वर्तमान प्रिंट फ़ंक्शन को स्टोर करें
   function print(s)
   फ़ंक्शन प्रिंट
     --[[ Redefine print function. The usual print function can still be used
     - प्रिंट फ़ंक्शन को फिर से परिभाषित करें। सामान्य प्रिंट फ़ंक्शन का अभी भी उपयोग किया जा सकता है
       through oldprint. The new one has only one argument.]]
       ओल्डप्रिंट के माध्यम से। नए के पास केवल एक तर्क है।
     oldprint(s == "foo" and "bar" or s)
     ओल्डप्रिंट (एस == फू और बार या एस)
   end
   समाप्त
end
समाप्त
</syntaxhighlight>कोई भविष्य कॉल करता है <code>print</code> अब नए फ़ंक्शन के माध्यम से रूट किया जाएगा, और लुआ के स्कोप (प्रोग्रामिंग) लेक्सिकल स्कोपिंग के कारण, पुराना प्रिंट फ़ंक्शन केवल नए, संशोधित प्रिंट द्वारा ही एक्सेस किया जा सकेगा।
</वाक्यविन्यास हाइलाइट>
कोई भविष्य कॉल करता है <code>print</code> अब नए फ़ंक्शन के माध्यम से रूट किया जाएगा, और लुआ के स्कोप (प्रोग्रामिंग) # लेक्सिकल स्कोपिंग के कारण, पुराना प्रिंट फ़ंक्शन केवल नए, संशोधित प्रिंट द्वारा ही एक्सेस किया जा सकेगा।
 
लुआ [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] का भी समर्थन करता है, जैसा कि नीचे दिखाया गया है:
<वाक्यविन्यास लैंग = लुआ>
समारोह जोड़ (एक्स)
  - एक नया फ़ंक्शन लौटाएं जो तर्क में x जोड़ता है
  वापसी समारोह (वाई)
    --[=[ जब हम वेरिएबल x को संदर्भित करते हैं, जो वर्तमान के बाहर है
      दायरा और जिसका जीवनकाल इस गुमनाम से कम होगा
      कार्य, लुआ एक बंद बनाता है।] =]
    रिटर्न एक्स + वाई
  समाप्त
समाप्त
फोरप्लस = जोड़ (4)
प्रिंट (फोरप्लस (3)) - प्रिंट 7
 
- यह फ़ंक्शन को निम्न तरीके से कॉल करके भी प्राप्त किया जा सकता है:
प्रिंट (जोड़ें (4) (3))
- ऐसा इसलिए है क्योंकि हम सीधे '3' तर्क के साथ 'एडटो (4)' से लौटे फ़ंक्शन को कॉल कर रहे हैं।
  यह डेटा लागत को कम करने और प्रदर्शन को बेहतर बनाने में भी मदद करता है यदि इसे पुनरावृत्त रूप से कहा जाता है।
 
</वाक्यविन्यास हाइलाइट>
चर के लिए एक नया समापन <code>x</code> हर बार बनाया जाता है <code>addto</code> कहा जाता है, ताकि लौटाया गया प्रत्येक नया अज्ञात फ़ंक्शन हमेशा स्वयं का उपयोग करेगा <code>x</code> पैरामीटर। बंद करने का प्रबंधन लुआ के कचरा संग्राहक द्वारा किया जाता है, किसी अन्य वस्तु की तरह।
 
=== टेबल्स ===
लुआ में टेबल्स सबसे महत्वपूर्ण डेटा संरचनाएं हैं (और, डिज़ाइन द्वारा, केवल अंतर्निहित [[समग्र डेटा प्रकार]]) और सभी उपयोगकर्ता-निर्मित प्रकारों की नींव हैं। वे स्वचालित संख्यात्मक कुंजी और विशेष सिंटैक्स के साथ साहचर्य सरणियाँ हैं।
 
तालिका कुंजी और डेटा जोड़े का एक संग्रह है, जहां डेटा को कुंजी द्वारा संदर्भित किया जाता है; दूसरे शब्दों में, यह एक हैश तालिका विषम साहचर्य सरणी है।
 
का उपयोग करके तालिकाएँ बनाई जाती हैं <code>{}</code> कंस्ट्रक्टर सिंटैक्स।
 
<वाक्यविन्यास लैंग = लुआ>
a_table = {} -- एक नया, खाली टेबल बनाता है
</वाक्यविन्यास हाइलाइट>


तालिकाएँ हमेशा संदर्भ द्वारा पारित की जाती हैं (देखें साझा करके कॉल करें)
लुआ [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] का भी समर्थन करता है, जैसा कि नीचे दिखाया गया है:<syntaxhighlight lang="d">
function addto(x)
  -- Return a new function that adds x to the argument
  return function(y)
    --[=[ When we refer to the variable x, which is outside the current
      scope and whose lifetime would be shorter than that of this anonymous
      function, Lua creates a closure.]=]
    return x + y
  end
end
fourplus = addto(4)
print(fourplus(3))  -- Prints 7


एक कुंजी (इंडेक्स) को छोड़कर कोई भी मूल्य हो सकता है <code>nil</code> और [[NaN]], कार्यों सहित।
--This can also be achieved by calling the function in the following way:
print(addto(4)(3))
--[[ This is because we are calling the returned function from 'addto(4)' with the argument '3' directly.
  This also helps to reduce data cost and up performance if being called iteratively.
]]
</syntaxhighlight>
वेरिएबल <code>x</code> के लिए नया क्लोजर हर बार <code>addto</code> को कॉल करने के लिए बनाया जाता है, जिससे लौटाया गया प्रत्येक नया अज्ञात फ़ंक्शन हमेशा स्वयं के <code>x</code> पैरामीटर तक पहुंच सके। किसी अन्य वस्तु के प्रकार, लुआ के कचरा संग्राहक द्वारा बंद का प्रबंधन किया जाता है।
=== सारिणी ===
लुआ में सूचियाँ सबसे महत्वपूर्ण डेटा संरचनाएं हैं (और, डिज़ाइन द्वारा, केवल अंतर्निहित [[समग्र डेटा प्रकार]]) और सभी उपयोगकर्ता-निर्मित प्रकारों का आधार हैं। वे स्वचालित संख्यात्मक कुंजी और विशेष सिंटैक्स के साथ साहचर्य सरणियाँ हैं।


<वाक्यविन्यास लैंग = लुआ>
तालिका कुंजी और डेटा जोड़े का संग्रह है, जहां डेटा को कुंजी द्वारा संदर्भित किया जाता है; दूसरे शब्दों में, यह हैश तालिका विषम साहचर्य सरणी है।
a_table = {x = 10} - संख्या 10 पर एक प्रविष्टि मैपिंग x के साथ एक नई तालिका बनाता है।
प्रिंट (a_table [ x ]) - स्ट्रिंग कुंजी से जुड़े मान को प्रिंट करता है, इस मामले में 10।
बी_टेबल = ए_टेबल
b_table[ x ] = 20 -- तालिका में मान को 20 में बदल दिया गया है।
प्रिंट (b_table [ x ]) - 20 प्रिंट करता है।
प्रिंट (a_table [ x ]) - 20 भी प्रिंट करता है, क्योंकि a_table और b_table दोनों एक ही टेबल को संदर्भित करते हैं।
</वाक्यविन्यास हाइलाइट>


कुंजी के रूप में स्ट्रिंग (कंप्यूटर विज्ञान) का उपयोग करके एक तालिका को अक्सर [[वस्तु रचना]] (या रिकॉर्ड (कंप्यूटर विज्ञान)) के रूप में उपयोग किया जाता है। क्योंकि इस तरह का उपयोग बहुत आम है, लुआ ऐसे क्षेत्रों तक पहुँचने के लिए एक विशेष सिंटैक्स पेश करता है।<ref>{{cite web|url=https://www.lua.org/manual/5.1/manual.html#2.3|title=लुआ 5.1 संदर्भ मैनुअल|access-date=2014-02-27|year=2014}}</ref>
<code>{}</code> कंस्ट्रक्टर सिंटैक्स का उपयोग करके तालिकाएँ बनाई जाती हैं।<syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = लुआ>
a_table = {} -- Creates a new, empty table
बिंदु = {x = 10, y = 20} -- नई तालिका बनाएँ
</syntaxhighlight>तालिकाएँ हमेशा संदर्भ द्वारा पारित की जाती हैं (देखें साझा करके कॉल करें)।
प्रिंट (प्वाइंट [ x ]) - 10 प्रिंट करता है
प्रिंट (प्वाइंट.एक्स) - ऊपर की रेखा के समान ही अर्थ है। आसानी से पढ़ा जाने वाला डॉट नोटेशन सिंटैक्टिक शुगर है।
</वाक्यविन्यास हाइलाइट>


संबंधित कार्यों को संग्रहीत करने के लिए तालिका का उपयोग करके, यह नामस्थान के रूप में कार्य कर सकता है।
फलन सहित <code>nil</code> और [[NaN]], को छोड़कर कुंजी (इंडेक्स) कोई भी मान हो सकता है।<syntaxhighlight lang="d">
a_table = {x = 10}  -- Creates a new table, with one entry mapping "x" to the number 10.
print(a_table["x"]) -- Prints the value associated with the string key, in this case 10.
b_table = a_table
b_table["x"] = 20  -- The value in the table has been changed to 20.
print(b_table["x"]) -- Prints 20.
print(a_table["x"]) -- Also prints 20, because a_table and b_table both refer to the same table.
</syntaxhighlight>कुंजी के रूप में स्ट्रिंग (कंप्यूटर विज्ञान) का उपयोग करके तालिका को अधिकांशतः [[वस्तु रचना]] (या रिकॉर्ड (कंप्यूटर विज्ञान)) के रूप में उपयोग किया जाता है। क्योंकि इस प्रकार का उपयोग बहुत आम है, लुआ ऐसे क्षेत्रों तक पहुँचने के लिए विशेष सिंटैक्स प्रस्तुत करता है।<ref>{{cite web|url=https://www.lua.org/manual/5.1/manual.html#2.3|title=लुआ 5.1 संदर्भ मैनुअल|access-date=2014-02-27|year=2014}}</ref><syntaxhighlight lang="d">
point = { x = 10, y = 20 }  -- Create new table
print(point["x"])            -- Prints 10
print(point.x)              -- Has exactly the same meaning as line above. The easier-to-read dot notation is just syntactic sugar.
</syntaxhighlight>संबंधित कार्यों को संग्रहीत करने के लिए तालिका का उपयोग करके, यह नामस्थान के रूप में कार्य कर सकता है।<syntaxhighlight lang="d">
Point = {}


<वाक्यविन्यास लैंग = लुआ>
Point.new = function(x, y)
बिंदु = {}
  return {x = x, y = y}  --  return {["x"] = x, ["y"] = y}
end


प्वाइंट.न्यू = फंक्शन (एक्स, वाई)
Point.set_x = function(point, x)
   वापसी {x = x, y = y} - वापसी {[x] = x, [y] = y}
   point.x = x -- point["x"] = x;
समाप्त
end
</syntaxhighlight>सूचियाँ को स्वचालित रूप से संख्यात्मक कुंजी असाइन की जाती है, जिससे उन्हें [[सरणी डेटा प्रकार]] के रूप में उपयोग करने में सक्षम बनाया जाता है। पहला स्वचालित सूचकांक 0 के अतिरिक्त 1 है क्योंकि यह कई अन्य प्रोग्रामिंग भाषाओं के लिए है (चूंकि 0 के स्पष्ट सूचकांक की अनुमति है)।


प्वाइंट.सेट_एक्स = फ़ंक्शन (बिंदु, एक्स)
संख्यात्मक कुंजी <code>1</code> स्ट्रिंग कुंजी <code>"1"</code> से अलग है .<syntaxhighlight lang="d">
  बिंदु। एक्स = एक्स - बिंदु [एक्स] = एक्स;
array = { "a", "b", "c", "d" }   -- Indices are assigned automatically.
समाप्त
print(array[2])                 -- Prints "b". Automatic indexing in Lua starts at 1.
</वाक्यविन्यास हाइलाइट>
print(#array)                   -- Prints 4. # is the length operator for tables and strings.
 
array[0] = "z"                  -- Zero is a legal index.
टेबल्स को स्वचालित रूप से एक संख्यात्मक कुंजी असाइन की जाती है, जिससे उन्हें [[सरणी डेटा प्रकार]] के रूप में उपयोग करने में सक्षम बनाया जाता है। पहला स्वचालित सूचकांक 0 के बजाय 1 है क्योंकि यह कई अन्य प्रोग्रामिंग भाषाओं के लिए है (हालांकि 0 के स्पष्ट सूचकांक की अनुमति है)।
print(#array)                   -- Still prints 4, as Lua arrays are 1-based.
 
</syntaxhighlight>तालिका <code>t</code> की लंबाई को किसी भी पूर्णांक सूचकांक <code>n</code> के रूप में परिभाषित किया गया है जैसे कि <code>t[n]</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=लुआ 5.1 संदर्भ मैनुअल|access-date=2012-10-16|year=2012}}</ref><syntaxhighlight lang="d">
एक संख्यात्मक कुंजी <code>1</code> एक स्ट्रिंग कुंजी से अलग है <code>"1"</code>.
ExampleTable =
 
<वाक्यविन्यास लैंग = लुआ>
सरणी = {, बी, सी, डी} - सूचकांक स्वचालित रूप से असाइन किए जाते हैं।
प्रिंट (सरणी [2]) - प्रिंट बी। लुआ में स्वचालित अनुक्रमण 1 से शुरू होता है।
प्रिंट (#array) - प्रिंट 4. # टेबल और स्ट्रिंग्स के लिए लंबाई ऑपरेटर है।
सरणी [0] = z - शून्य एक कानूनी सूचकांक है।
प्रिंट (# सरणी) - अभी भी 4 प्रिंट करता है, क्योंकि लुआ सरणियाँ 1-आधारित हैं।
</वाक्यविन्यास हाइलाइट>
 
एक टेबल की लंबाई <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> a से सीधे पहले आने वाला कोई भी सूचकांक हो सकता है <code>nil</code> मूल्य (अर्थात, यह सरणी के अंत के रूप में ऐसे किसी भी शून्य मान पर विचार कर सकता है)।<ref>{{cite web|url=https://www.lua.org/manual/5.1/manual.html#2.5.5|title=लुआ 5.1 संदर्भ मैनुअल|access-date=2012-10-16|year=2012}}</ref>
<वाक्यविन्यास लैंग = लुआ>
उदाहरण टेबल =
{
{
   {1, 2, 3, 4},
   {1, 2, 3, 4},
   {5, 6, 7, 8}
   {5, 6, 7, 8}
}
}
प्रिंट (उदाहरण तालिका [1] [3]) - प्रिंट 3
print(ExampleTable[1][3]) -- Prints "3"
प्रिंट (उदाहरण तालिका [2] [4]) - प्रिंट 8
print(ExampleTable[2][4]) -- Prints "8"
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>तालिका वस्तुओं की सरणी हो सकती है।<syntaxhighlight lang="d">
function Point(x, y)        -- "Point" object constructor
  return { x = x, y = y }  -- Creates and returns a new object (table)
end
array = { Point(10, 20), Point(30, 40), Point(50, 60) }  -- Creates array of points
                        -- array = { { x = 10, y = 20 }, { x = 30, y = 40 }, { x = 50, y = 60 } };
print(array[2].y)                                        -- Prints 40
</syntaxhighlight>किसी सरणी का अनुकरण करने के लिए हैश मैप का उपयोग करना सामान्य रूप से वास्तविक सरणी का उपयोग करने की तुलना में धीमा होता है; चूंकि, इस समस्या से बचने में सहायता करने के लिए लुआ तालिकाओं को सरणियों के रूप में उपयोग करने के लिए अनुकूलित किया गया है।<ref name="lobject_h_array">{{cite web|url=https://www.lua.org/source/5.1/lobject.h.html#array|title=लुआ 5.1 स्रोत कोड|access-date=2011-03-24|year=2006}}</रेफरी><!-- I'd like to find a message on the mailing list from one of the developers, but I can't. Oh well, source code is a pretty trustworthy reference. -->


एक तालिका वस्तुओं की एक सरणी हो सकती है।
</ref>


<वाक्यविन्यास लैंग = लुआ>
'''मेटाटेबल्स'''
फ़ंक्शन प्वाइंट (एक्स, वाई) - प्वाइंट ऑब्जेक्ट कन्स्ट्रक्टर
  वापसी {x = x, y = y} - एक नई वस्तु (तालिका) बनाता है और वापस करता है
समाप्त
सरणी = {प्वाइंट (10, 20), प्वाइंट (30, 40), प्वाइंट (50, 60)} - बिंदुओं की सरणी बनाता है
                        - सरणी = {{x = 10, y = 20}, {x = 30, y = 40}, {x = 50, y = 60}};
प्रिंट (सरणी [2] .y) - प्रिंट 40
</वाक्यविन्यास हाइलाइट>


किसी सरणी का अनुकरण करने के लिए हैश मैप का उपयोग करना सामान्य रूप से वास्तविक सरणी का उपयोग करने की तुलना में धीमा होता है; हालाँकि, इस समस्या से बचने में मदद करने के लिए लुआ तालिकाओं को सरणियों के रूप में उपयोग करने के लिए अनुकूलित किया गया है।<ref name=lobject_h_array>{{cite web|url=https://www.lua.org/source/5.1/lobject.h.html#array|title=लुआ 5.1 स्रोत कोड|access-date=2011-03-24|year=2006}}</रेफरी><!-- I'd like to find a message on the mailing list from one of the developers, but I can't. Oh well, source code is a pretty trustworthy reference. -->
एक्स्टेंसिबल शब्दार्थ लुआ की प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण "अनंत" तालिका प्रदर्शित करता है। किसी भी <code>n</code> के लिए, <code>fibs[n]</code> डायनेमिक प्रोग्रामिंग और मेमोइज़ेशन का उपयोग करके <code>n</code>-वें फाइबोनैचि संख्या देगा।<syntaxhighlight lang="d">
 
fibs = { 1, 1 }                               -- Initial values for fibs[1] and fibs[2].
 
setmetatable(fibs, {
=== मेटाटेबल्स ===
   __index = function(values, n)               --[[__index is a function predefined by Lua,  
एक्स्टेंसिबल शब्दार्थ लुआ की एक प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण एक अनंत तालिका प्रदर्शित करता है। किसी के लिए <code>n</code>, <code>fibs[n]</code> दे देंगे <code>n</code>[[गतिशील प्रोग्रामिंग]] और [[memoization]] का उपयोग करते हुए -वां [[फाइबोनैचि संख्या]]।
                                                   it is called if key "n" does not exist.]]
<वाक्यविन्यास लैंग = लुआ>
     values[n] = values[n - 1] + values[n - 2] -- Calculate and memoize fibs[n].
तंतु = {1, 1} -- तंतु [1] और तंतु [2] के लिए प्रारंभिक मूल्य।
     return values[n]
सेटमेटेटेबल (फ़ाइब, {
   end
   __index = function(values, n) --__index लुआ द्वारा पूर्वनिर्धारित एक फ़ंक्शन है,
                                                   इसे कहा जाता है अगर कुंजी एन मौजूद नहीं है।
     मान [n] = मान [n - 1] + मान [n - 2] - तंतुओं की गणना करें और याद रखें [n]
     वापसी मूल्य [एन]
   समाप्त
})
})
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>'''ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग'''


=== वस्तु-उन्मुख प्रोग्रामिंग ===
चूंकि लुआ में कक्षाओं की अंतर्निहित अवधारणा नहीं है, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को फ़ंक्शंस और तालिकाओं का उपयोग करके अनुकरण किया जा सकता है। टेबल में मेथड्स और फील्ड्स डालकर ऑब्जेक्ट बनाया जाता है। इनहेरिटेंस (सिंगल और मल्टीपल दोनों) को मेटाटेबल्स के साथ प्रायुक्त किया जा सकता है, गैर-उपस्थित विधियों और फील्ड्स को पैरेंट ऑब्जेक्ट को सौंप दिया जाता है।
हालांकि लुआ में [[कक्षा (कंप्यूटर विज्ञान)]] की एक अंतर्निहित अवधारणा नहीं है, वस्तु-उन्मुख प्रोग्रामिंग को कार्यों और तालिकाओं का उपयोग करके अनुकरण किया जा सकता है। टेबल में मेथड्स और फील्ड्स डालकर ऑब्जेक्ट बनाया जाता है। इनहेरिटेंस ([[वस्तु उन्मुख कार्यकर्म]]) (सिंगल और मल्टीपल दोनों) को मेटाटेबल्स के साथ लागू किया जा सकता है, गैर-मौजूद तरीकों और फ़ील्ड्स को पैरेंट ऑब्जेक्ट के रूप में प्रस्तुत किया जा सकता है।


इन तकनीकों के साथ वर्ग जैसी कोई अवधारणा नहीं है; बल्कि, स्व (प्रोग्रामिंग भाषा) या जावास्क्रिप्ट के समान, [[प्रोटोटाइप-आधारित प्रोग्रामिंग]] का उपयोग किया जाता है। नई वस्तुओं को या तो फ़ैक्टरी विधि पैटर्न (जो स्क्रैच से नई वस्तुओं का निर्माण करता है) या किसी मौजूदा वस्तु का क्लोन बनाकर बनाया जाता है।
इन विधियों के साथ "वर्ग" जैसी कोई अवधारणा नहीं है; किन्तु, स्व या जावास्क्रिप्ट के समान प्रोटोटाइप का उपयोग किया जाता है। नई वस्तुओं को या तो फ़ैक्टरी विधि (जो स्क्रैच से नई वस्तुओं का निर्माण करती है) या किसी वर्तमान वस्तु का क्लोन बनाकर बनाई जाती है।


एक बुनियादी [[वेक्टर (ज्यामिति)]] वस्तु बनाना:
मूलभूत सदिश वस्तु बनाना:<syntaxhighlight lang="d">
<वाक्यविन्यास लैंग = लुआ>
local Vector = {}
स्थानीय वेक्टर = {}
local VectorMeta = { __index = Vector}
स्थानीय वेक्टरमेटा = {__इंडेक्स = वेक्टर}


फ़ंक्शन वेक्टर.न्यू (एक्स, वाई, जेड) - निर्माता
function Vector.new(x, y, z)   -- The constructor
   रिटर्न सेटमेटेबल ({x = x, y = y, z = z}, वेक्टरमेटा)
   return setmetatable({x = x, y = y, z = z}, VectorMeta)
समाप्त
end


समारोह वेक्टर.परिमाण (स्वयं) - एक और तरीका
function Vector.magnitude(self)     -- Another method
   वापसी गणित.sqrt(self.x^2 + self.y^2 + self.z^2)
   return math.sqrt(self.x^2 + self.y^2 + self.z^2)
समाप्त
end


स्थानीय vec = वेक्टर.नया (0, 1, 0) - एक वेक्टर बनाएं
local vec = Vector.new(0, 1, 0) -- Create a vector
प्रिंट (vec.magnitude (vec)) - एक विधि कॉल करें (आउटपुट: 1)
print(vec.magnitude(vec))       -- Call a method (output: 1)
प्रिंट (vec.x) - एक सदस्य चर तक पहुँचें (आउटपुट: 0)
print(vec.x)                   -- Access a member variable (output: 0)
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>यहां, <code>setmetatable</code> लूआ को <code>vector</code> वेक्टर तालिका में तत्व की तलाश करने के लिए कहता है यदि यह <code>vec</code>  तालिका में <code>vec.magnitude</code> उपस्थित नहीं है, जो <code>vec["magnitude"]</code> के समतुल्य है, सबसे पहले परिमाण तत्व के लिए <code>vec</code> तालिका में दिखता है। <code>vec</code> तालिका में <code>magnitude</code> तत्व नहीं होता है, किन्तु जब यह <code>vec</code> तालिका में नहीं मिलता है तो <code>magnitude</code> तत्व के लिए <code>vector</code> तालिका में इसका मेटाटेबल प्रतिनिधि होता है।


यहां, {{code |lang=lua|setmetatable}} लुआ को एक तत्व की तलाश करने के लिए कहता है {{code |lang=lua|Vector}} तालिका में यदि यह मौजूद नहीं है {{code |lang=lua|vec}} मेज़। {{code |lang=lua|vec.magnitude}}, जो बराबर है {{code |lang=lua|vec["magnitude"]}}, पहले में दिखता है {{code |lang=lua|vec}} के लिए तालिका {{code |lang=lua|magnitude}} तत्व। {{code |lang=lua|vec}} }} टेबल में a नहीं है {{code |lang=lua|magnitude}} तत्व, लेकिन इसके मेटाटेबल प्रतिनिधि {{code |lang=lua|Vector}} के लिए तालिका {{code |lang=lua|magnitude}} तत्व जब यह में नहीं पाया जाता है {{code |lang=lua|vec}} मेज़।
लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ सिंटैक्टिक चीनी प्रदान करता है। प्रोटोटाइप तालिका के अंदर सदस्य कार्यों की घोषणा करने के लिए, कोई <code>function table:func(args)</code> का उपयोग कर सकता है, जो <code>function table.func(self, args)</code> के बराबर है। कॉलिंग क्लास के विधियों भी कोलन: <code>object:func(args)</code> का उपयोग करते हैं जो <code>object.func(object, args)</code> के बराबर है।


लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ [[सिंटैक्टिक चीनी]] प्रदान करता है। एक प्रोटोटाइप टेबल के अंदर मेथड (कंप्यूटर साइंस) घोषित करने के लिए, कोई भी उपयोग कर सकता है {{code |lang=lua |function table:func(args)}}, जो बराबर है {{code |lang=lua |function table.func(self, args)}}. कॉलिंग क्लास के तरीके भी कोलन का उपयोग करते हैं: {{code |lang=lua |object:func(args)}} के बराबर है {{code |lang=lua |object.func(object, args)}}.
इसे ध्यान में रखते हुए, यहाँ संगत वर्ग है: वाक्यात्मक खंड:<syntaxhighlight lang="d">
local Vector = {}
Vector.__index = Vector


इसे ध्यान में रखते हुए, यहाँ एक संगत वर्ग है {{code|lang=lua|:}} सिंटैक्टिक चीनी:
function Vector:new(x, y, z)    -- The constructor
  -- Since the function definition uses a colon,  
  -- its first argument is "self" which refers
  -- to "Vector"
  return setmetatable({x = x, y = y, z = z}, self)
end


<वाक्यविन्यास लैंग = लुआ>
function Vector:magnitude()    -- Another method
स्थानीय वेक्टर = {}
  -- Reference the implicit object using self
वेक्टर.__इंडेक्स = वेक्टर
  return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end


फ़ंक्शन वेक्टर: नया (x, y, z) - कंस्ट्रक्टर
local vec = Vector:new(0, 1, 0) -- Create a vector
  - चूंकि फ़ंक्शन परिभाषा एक कोलन का उपयोग करती है,
print(vec:magnitude())          -- Call a method (output: 1)
  - इसका पहला तर्क स्वयं है जो संदर्भित करता है
print(vec.x)                    -- Access a member variable (output: 0)
  - वेक्टर के लिए
</syntaxhighlight>
  रिटर्न सेटमेटेबल ({x = x, y = y, z = z}, स्वयं)
समाप्त


फ़ंक्शन वेक्टर: परिमाण () - एक और तरीका
  - स्वयं का उपयोग करके अंतर्निहित वस्तु का संदर्भ लें
  वापसी गणित.sqrt(self.x^2 + self.y^2 + self.z^2)
समाप्त


स्थानीय vec = वेक्टर: नया (0, 1, 0) - एक वेक्टर बनाएँ
'''वंशानुक्रम'''
प्रिंट (vec: परिमाण ()) - एक विधि कॉल करें (आउटपुट: 1)
प्रिंट (vec.x) - एक सदस्य चर तक पहुँचें (आउटपुट: 0)
</वाक्यविन्यास हाइलाइट>


==== वंशानुक्रम ====
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है।<ref>{{cite book|title=लुआ में प्रोग्रामिंग, चौथा संस्करण|page=165|author=Roberto Ierusalimschy}}</ref> इस उदाहरण में, हम वैक्टर को एक व्युत्पन्न वर्ग में उनके मूल्यों को एक स्थिरांक से गुणा करने की अनुमति देते हैं।


<वाक्यविन्यास लैंग = लुआ>
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है। इस उदाहरण में, हम वैक्टर को व्युत्पन्न वर्ग में उनके मानों को स्थिरांक से गुणा करने की अनुमति देते हैं।<syntaxhighlight lang="d">
स्थानीय वेक्टर = {}
local Vector = {}
वेक्टर.__इंडेक्स = वेक्टर
Vector.__index = Vector


फ़ंक्शन वेक्टर: नया (x, y, z) - कंस्ट्रक्टर
function Vector:new(x, y, z)   -- The constructor
   - यहाँ, स्वयं का तात्पर्य किसी भी वर्ग के नए से है
   -- Here, self refers to whatever class's "new"
   -- विधि जिसे हम कहते हैं। एक व्युत्पन्न वर्ग में, स्व-इच्छा
   -- method we call.  In a derived class, self will
   - व्युत्पन्न वर्ग हो; वेक्टर वर्ग में, self
   -- be the derived class; in the Vector class, self
   - वेक्टर होगा
   -- will be Vector
   रिटर्न सेटमेटेबल ({x = x, y = y, z = z}, स्वयं)
   return setmetatable({x = x, y = y, z = z}, self)
समाप्त
end


फ़ंक्शन वेक्टर: परिमाण () - एक और तरीका
function Vector:magnitude()     -- Another method
   - स्वयं का उपयोग करके अंतर्निहित वस्तु का संदर्भ लें
   -- Reference the implicit object using self
   वापसी गणित.sqrt(self.x^2 + self.y^2 + self.z^2)
   return math.sqrt(self.x^2 + self.y^2 + self.z^2)
समाप्त
end


- वर्ग विरासत का उदाहरण
-- Example of class inheritance
स्थानीय वेक्टरमुल्ट = {}
local VectorMult = {}
वेक्टरMult.__index = वेक्टरMult
VectorMult.__index = VectorMult
setmetatable(VectorMult, वेक्टर) - वेक्टर के बच्चे को वेक्टर मल्टी बनाएं
setmetatable(VectorMult, Vector) -- Make VectorMult a child of Vector


फ़ंक्शन वेक्टर मल्टी: गुणा (मान)
function VectorMult:multiply(value)  
   स्व.एक्स = स्व.एक्स * मूल्य
   self.x = self.x * value
   Self.y = Self.y * मान
   self.y = self.y * value
   स्व.जेड = स्व.जेड * मूल्य
   self.z = self.z * value
   स्वयं लौटें
   return self
समाप्त
end


स्थानीय vec = वेक्टरमल्टी: नया (0, 1, 0) - एक वेक्टर बनाएँ
local vec = VectorMult:new(0, 1, 0) -- Create a vector
प्रिंट (vec: परिमाण ()) - एक विधि कॉल करें (आउटपुट: 1)
print(vec:magnitude())         -- Call a method (output: 1)
प्रिंट (vec.y) - एक सदस्य चर तक पहुँचें (आउटपुट: 1)
print(vec.y)                   -- Access a member variable (output: 1)
vec: गुणा (2) - वेक्टर के सभी घटकों को 2 से गुणा करें
vec:multiply(2)                 -- Multiply all components of vector by 2
प्रिंट (vec.y) - सदस्य को फिर से एक्सेस करें (आउटपुट: 2)
print(vec.y)                   -- Access member again (output: 2)
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>लुआ [[एकाधिक वंशानुक्रम]] का भी समर्थन करता है; {{code|language=lua|__index}} या तो फलन या टेबल हो सकता है।<ref>{{Cite web|title=लुआ में प्रोग्रामिंग: 16.3|url=https://www.lua.org/pil/16.3.html|access-date=2021-09-16|website=www.lua.org}}</ref> [[ऑपरेटर ओवरलोडिंग]] भी की जा सकती है; लुआ मेटासूचियाँ में {{code|language=lua|__add}}, {{code|language=lua|__sub}} आदि जैसे तत्व हो सकते हैं।<ref>{{Cite web|title=लुआ-उपयोगकर्ता विकी: मेटामेथोड्स ट्यूटोरियल|url=http://lua-users.org/wiki/MetamethodsTutorial|access-date=2021-09-16|website=lua-users.org}}</ref>
 
लुआ [[एकाधिक वंशानुक्रम]] का भी समर्थन करता है; {{code|language=lua|__index}} या तो एक समारोह या एक टेबल हो सकता है।<ref>{{Cite web|title=लुआ में प्रोग्रामिंग: 16.3|url=https://www.lua.org/pil/16.3.html|access-date=2021-09-16|website=www.lua.org}}</ref> [[ऑपरेटर ओवरलोडिंग]] भी की जा सकती है; लुआ मेटाटेबल्स में तत्व हो सकते हैं जैसे {{code|language=lua|__add}}, {{code|language=lua|__sub}}, और इसी तरह।<ref>{{Cite web|title=लुआ-उपयोगकर्ता विकी: मेटामेथोड्स ट्यूटोरियल|url=http://lua-users.org/wiki/MetamethodsTutorial|access-date=2021-09-16|website=lua-users.org}}</ref>




== कार्यान्वयन ==
== कार्यान्वयन ==
Lua प्रोग्राम सीधे टेक्स्ट वाली Lua फ़ाइल से भाषा की व्याख्या नहीं करते हैं, लेकिन बायटेकोड में कंपाइलर होते हैं, जो तब Lua [[आभासी मशीन]] पर चलाया जाता है। संकलन प्रक्रिया आमतौर पर उपयोगकर्ता के लिए अदृश्य होती है और रन टाइम (प्रोग्राम जीवनचक्र चरण) के दौरान निष्पादित की जाती है। कंपाइलर को छोड़ कर मेजबान पर्यावरण की स्मृति पदचिह्न को कम करें। लुआ बाइटकोड का उपयोग करके लुआ के भीतर से उत्पादन और निष्पादन भी किया जा सकता है <code>dump</code> स्ट्रिंग लाइब्रेरी से फ़ंक्शन और <code>load/loadstring/loadfile</code> कार्य करता है। लुआ संस्करण 5.3.4 सी कोड की लगभग 24,000 लाइनों में लागू किया गया है।<ref name="luaspe" /><ref name="luaabout" />
लुआ प्रोग्राम सीधे टेक्स्ट वाली लुआ फ़ाइल से भाषा की व्याख्या नहीं करते हैं, किन्तु बायटेकोड में संकलित किया जाता है, जिसे बाद में लुआ [[आभासी मशीन]] पर चलाया जाता है। संकलन प्रक्रिया सामान्यतः उपयोगकर्ता के लिए अदृश्य होती है और रन टाइम (प्रोग्राम जीवनचक्र चरण) के समय की जाती है, खासकर जब जेआईटी संकलित का उपयोग किया जाता है, किन्तु लोडिंग प्रदर्शन को बढ़ाने या मेजबान पर्यावरण के स्मृति पदचिह्न को कम करने के लिए इसे ऑफ़लाइन किया जा सकता है। स्ट्रिंग लाइब्रेरी से <code>dump</code> फ़ंक्शन और <code>load/loadstring/loadfile</code> फ़ंक्शंस का उपयोग करके लुआ बाइटकोड को लुआ के अन्दर से भी उत्पादित और निष्पादित किया जा सकता है। लुआ संस्करण 5.3.4 सी कोड की लगभग 24,000 पंक्तियों में प्रायुक्त किया गया है।<ref name="luaspe" /><ref name="luaabout" />


अधिकांश सीपीयू की तरह, और अधिकांश वर्चुअल मशीनों (जो [[स्टैक मशीन]]|स्टैक-आधारित हैं) के विपरीत, लुआ वीएम [[रजिस्टर मशीन]]|रजिस्टर-आधारित है, और इसलिए वास्तविक हार्डवेयर डिज़ाइन के अधिक निकट है। रजिस्टर आर्किटेक्चर दोनों मूल्यों की अत्यधिक प्रतिलिपि से बचाता है और प्रति कार्य निर्देशों की कुल संख्या को कम करता है। लुआ 5 की वर्चुअल मशीन व्यापक उपयोग के लिए पहले रजिस्टर-आधारित शुद्ध वीएम में से एक है।<ref name=lua5impl>{{cite journal| last1 = Ierusalimschy | first1 = R. | last2 = Figueiredo | first2 = L. H. | last3 = Celes | first3 = W. | title = लुआ 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}}</ref> [[तोता आभासी मशीन]] और [[Android (ऑपरेटिंग सिस्टम)]] का Dalvik (सॉफ़्टवेयर) दो अन्य प्रसिद्ध रजिस्टर-आधारित VM हैं। PCScheme का VM भी रजिस्टर-आधारित था।<ref>{{cite book|title=पीसी योजना: उपयोगकर्ता गाइड और भाषा संदर्भ मैनुअल, व्यापार संस्करण| last1=Texas Instruments| year=1990 | isbn=0-262-70040-9}}</ref>
अधिकांश सीपीयू के प्रकार, और अधिकांश वर्चुअल मशीनों (जो [[स्टैक मशीन]]|स्टैक-आधारित हैं) के विपरीत, लुआ वीएम [[रजिस्टर मशीन|रजिस्टर मशीन-आधारित]] है, और इसलिए वास्तविक हार्डवेयर डिज़ाइन के अधिक निकट है। रजिस्टर आर्किटेक्चर दोनों मानों की अत्यधिक प्रतिलिपि से बचाता है और प्रति कार्य निर्देशों की कुल संख्या को कम करता है। लुआ 5 की वर्चुअल मशीन विस्तृत उपयोग के लिए पहले रजिस्टर-आधारित शुद्ध वीएम में से है।<ref name=lua5impl>{{cite journal| last1 = Ierusalimschy | first1 = R. | last2 = Figueiredo | first2 = L. H. | last3 = Celes | first3 = W. | title = लुआ 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}}</ref> [[तोता आभासी मशीन|पैरेट आभासी मशीन]] और [[Android (ऑपरेटिंग सिस्टम)|एंड्राइड (ऑपरेटिंग प्रणाली)]] का दल्विक (सॉफ़्टवेयर) दो अन्य प्रसिद्ध रजिस्टर-आधारित वीएम हैं। पीसीस्कीम का वीएम भी रजिस्टर-आधारित था।<ref>{{cite book|title=पीसी योजना: उपयोगकर्ता गाइड और भाषा संदर्भ मैनुअल, व्यापार संस्करण| last1=Texas Instruments| year=1990 | isbn=0-262-70040-9}}</ref>
यह उदाहरण फैक्टोरियल फ़ंक्शन परिभाषित #फ़ैक्टोरियल उदाहरण की बायटेकोड सूची है (जैसा कि <code>luac</code> 5.1 संकलक):<ref name=luavm51instr>{{cite web| author = Kein-Hong Man| title = लुआ 5.1 वीएम निर्देशों का नो-फ्रिल्स परिचय| year = 2006| url = https://talk.pokitto.com/uploads/default/original/2X/7/716c67a0b5b1636cbc4dc1fec232ca2536cb74d1.pdf}}</ref>
समारोह <फैक्टोरियल.लुआ: 1,7> (9 निर्देश, 36 बाइट्स 0x8063c60 पर)
1 परम, 6 स्लॉट, 0 अपवैल्यू, 6 लोकल, 2 स्थिरांक, 0 फ़ंक्शन
1 [2] भार 1 -1; 1
2 [3] लोड 2 -2; 2
3 [3] मूव 3 0
4 [3] भार 4 -1; 1
5 [3] फोरप्रेप 2 1; से 7
6 [4] एमयूएल 1 1 5
7 [3] फोरलूप 2 -2; से 6
8 [6] वापसी 1 2
9 [7] रिटर्न 0 1


== सी एपीआई ==
यह उदाहरण ऊपर परिभाषित फैक्टोरियल फ़ंक्शन की बायटेकोड सूची है (जैसा कि <code>luac</code> 5.1 संकलक द्वारा दिखाया गया है):<ref name="luavm51instr">{{cite web| author = Kein-Hong Man| title = लुआ 5.1 वीएम निर्देशों का नो-फ्रिल्स परिचय| year = 2006| url = https://talk.pokitto.com/uploads/default/original/2X/7/716c67a0b5b1636cbc4dc1fec232ca2536cb74d1.pdf}}</ref> <syntaxhighlight lang="d">
लुआ को अन्य अनुप्रयोगों में एम्बेड करने का इरादा है, और इस उद्देश्य के लिए [[सी (प्रोग्रामिंग भाषा)]] [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] प्रदान करता है। एपीआई को दो भागों में बांटा गया है: लुआ कोर और लुआ सहायक पुस्तकालय।<ref name="luarefman">{{cite web| url = https://www.lua.org/manual/5.2/| title = लुआ 5.2 संदर्भ मैनुअल| publisher = Lua.org| access-date = 2012-10-23}}</ref> Lua API का डिज़ाइन, Python (प्रोग्रामिंग लैंग्वेज) के API के विपरीत, C कोड में मैन्युअल [[संदर्भ गिनती]] की आवश्यकता को समाप्त करता है। एपीआई, भाषा की तरह, न्यूनतर है। उन्नत कार्यक्षमता सहायक पुस्तकालय द्वारा प्रदान की जाती है, जिसमें बड़े पैमाने पर [[पूर्वप्रक्रमक]] [[मैक्रो (कंप्यूटर विज्ञान)]] होते हैं जो जटिल तालिका संचालन में सहायता करते हैं।
function <factorial.lua:1,7> (9 instructions, 36 bytes at 0x8063c60)
1 param, 6 slots, 0 upvalues, 6 locals, 2 constants, 0 functions
1 [2] LOADK    1 -1 ; 1
2 [3] LOADK    2 -2 ; 2
3 [3] MOVE    3 0
4 [3] LOADK    4 -1 ; 1
5 [3] FORPREP  2 1 ; to 7
6 [4] MUL      1 1 5
7 [3] FORLOOP  2 -2 ; to 6
8 [6] RETURN  1 2
9 [7] RETURN  0 1
</syntaxhighlight>


लुआ सी एपीआई स्टैक (डेटा संरचना) आधारित है। लुआ स्टैक से सबसे सरल सी डेटा प्रकारों (पूर्णांक, फ़्लोट्स, आदि) को पुश और पॉप करने के लिए फ़ंक्शन प्रदान करता है, साथ ही स्टैक के माध्यम से तालिकाओं में हेरफेर करने के लिए फ़ंक्शन प्रदान करता है। लुआ स्टैक पारंपरिक स्टैक से कुछ अलग है; स्टैक को सीधे अनुक्रमित किया जा सकता है, उदाहरण के लिए। नकारात्मक सूचकांक स्टैक के शीर्ष से ऑफ़सेट का संकेत देते हैं। उदाहरण के लिए, -1 सबसे ऊपर है (सबसे हाल ही में धक्का दिया गया मूल्य), जबकि सकारात्मक सूचकांक नीचे से ऑफसेट (सबसे पुराना मूल्य) इंगित करते हैं। स्टैक का उपयोग करके सी और लुआ कार्यों के बीच [[मार्शलिंग (कंप्यूटर विज्ञान)]] डेटा भी किया जाता है। लुआ फ़ंक्शन को कॉल करने के लिए, तर्कों को स्टैक पर धकेल दिया जाता है, और फिर <code>lua_call</code> वास्तविक फ़ंक्शन को कॉल करने के लिए उपयोग किया जाता है। लुआ से सीधे बुलाए जाने वाले सी फ़ंक्शन को लिखते समय, स्टैक से तर्क पढ़े जाते हैं।
== सी एपीआई (एप्लिकेशन प्रोग्रामिंग अंतरफलक) ==
लुआ को अन्य अनुप्रयोगों में अंतःस्थापित करने का विचार है, और इस उद्देश्य के लिए [[सी (प्रोग्रामिंग भाषा)]] [[अप्लिकेशन प्रोग्रामिंग अंतरफलक|एप्लीकेशन प्रोग्रामिंग अंतरफलक]] प्रदान करता है। एपीआई को दो भागों में बांटा गया है: लुआ कोर और लुआ सहायक पुस्तकालय।<ref name="luarefman">{{cite web| url = https://www.lua.org/manual/5.2/| title = लुआ 5.2 संदर्भ मैनुअल| publisher = Lua.org| access-date = 2012-10-23}}</ref> लुआ एपीआई का डिज़ाइन, पायथन (प्रोग्रामिंग लैंग्वेज) के एपीआई के विपरीत, C कोड में मैन्युअल [[संदर्भ गिनती]] की आवश्यकता को समाप्त करता है। एपीआई, भाषा के प्रकार, न्यूनतर है। उन्नत कार्यक्षमता सहायक पुस्तकालय द्वारा प्रदान की जाती है, जिसमें बड़े पैमाने पर [[पूर्वप्रक्रमक]] [[मैक्रो (कंप्यूटर विज्ञान)]] होते हैं जो जटिल तालिका संचालन में सहायता करते हैं।


यहाँ C से Lua फ़ंक्शन को कॉल करने का एक उदाहरण दिया गया है:
लुआ सी एपीआई स्टैक (डेटा संरचना) आधारित है। लुआ स्टैक से सबसे सरल सी डेटा प्रकारों (पूर्णांक, फ़्लोट्स, आदि) को पुश और पॉप करने के लिए फ़ंक्शन प्रदान करता है, साथ ही स्टैक के माध्यम से तालिकाओं में हेरफेर करने के लिए फ़ंक्शन प्रदान करता है। लुआ स्टैक पारंपरिक स्टैक से कुछ अलग है; स्टैक को सीधे अनुक्रमित किया जा सकता है, उदाहरण के लिए, नकारात्मक सूचकांक स्टैक के शीर्ष से ऑफ़सेट का संकेत देते हैं। उदाहरण के लिए, -1 सबसे ऊपर है (सबसे नवीनतम बढाया गया मान), चूंकि सकारात्मक सूचकांक नीचे से ऑफसेट (सबसे पुराना मान) निरुपित करते हैं। स्टैक का उपयोग करके सी और लुआ कार्यों के बीच [[मार्शलिंग (कंप्यूटर विज्ञान)]] डेटा भी किया जाता है। लुआ फ़ंक्शन को कॉल करने के लिए, तर्कों को स्टैक पर धकेल दिया जाता है, और फिर <code>lua_call</code> वास्तविक फ़ंक्शन को कॉल करने के लिए उपयोग किया जाता है। लुआ से सीधे बुलाए जाने वाले सी फ़ंक्शन को लिखते समय, स्टैक से तर्क पढ़े जाते हैं।


<वाक्यविन्यास प्रकाश लैंग = सी>
यहाँ C से Lua फ़ंक्शन को कॉल करने का उदाहरण दिया गया है:<syntaxhighlight lang="d">
#शामिल <stdio.h>
#include <stdio.h>
#शामिल <lua.h> // लुआ मुख्य पुस्तकालय (लुआ_*)
#include <lua.h> // Lua main library (lua_*)
#शामिल <lauxlib.h> // लुआ सहायक पुस्तकालय (luaL_*)
#include <lauxlib.h> // Lua auxiliary library (luaL_*)


पूर्णांक मुख्य (शून्य)
int main(void)
{
{
     // लुआ राज्य बनाएं
     // create a Lua state
     लुआ_स्टेट * एल = लुआएल_न्यूस्टेट ();
     lua_State *L = luaL_newstate();


     // लोड करें और एक स्ट्रिंग निष्पादित करें
     // load and execute a string
     if (luaL_dostring(L, function foo (x,y) return x+y end )) {
     if (luaL_dostring(L, "function foo (x,y) return x+y end")) {
         लुआ_क्लोज़ (एल);
         lua_close(L);
         वापसी -1;
         return -1;
     }
     }


     // ग्लोबल फू का पुश वैल्यू (ऊपर परिभाषित फंक्शन)
     // push value of global "foo" (the function defined above)
     // ढेर के लिए, पूर्णांक 5 और 3 के बाद
     // to the stack, followed by integers 5 and 3
     lua_getglobal (एल, फू);
     lua_getglobal(L, "foo");
     लुआ_पुशिनटेगर (एल, 5);
     lua_pushinteger(L, 5);
     लुआ_पुशिनटेगर (एल, 3);
     lua_pushinteger(L, 3);
     लुआ_कॉल (एल, 2, 1); // एक फ़ंक्शन को दो तर्कों और एक वापसी मान के साथ कॉल करें
     lua_call(L, 2, 1); // call a function with two arguments and one return value
     प्रिंटफ (परिणाम:% d \ n, lua_tointeger (एल, -1)); // स्टैक टॉप पर आइटम का पूर्णांक मान प्रिंट करें
     printf("Result: %d\n", lua_tointeger(L, -1)); // print integer value of item at stack top
     लुआ_पॉप (एल, 1); // स्टैक को मूल स्थिति में लौटाएं
     lua_pop(L, 1); // return stack to original state
     लुआ_क्लोज़ (एल); // करीब लुआ राज्य
     lua_close(L); // close Lua state
     वापसी 0;
     return 0;
}
}
</वाक्यविन्यास हाइलाइट>
</syntaxhighlight>यह उदाहरण चलाने देता है:<syntaxhighlight lang="d">
$ cc -o example example.c -llua
$ ./example
Result: 8
</syntaxhighlight>सी एपीआई लुआ स्टैक में विभिन्न छद्म-सूचकांकों पर स्थित कुछ विशेष टेबल भी प्रदान करता है। पर <code>LUA_GLOBALSINDEX</code> लुआ 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| title = एपीआई में बदलाव| work = Lua 5.2 Reference Manual| publisher = Lua.org| access-date = 2014-05-09}}</ref> वैश्विक तालिका है, <code>_G</code> लुआ के अन्दर से, जो मुख्य नामस्थान है। <code>LUA_REGISTRYINDEX</code> पर स्थित रजिस्ट्री भी है जहां C प्रोग्राम बाद में पुनर्प्राप्ति के लिए लुआ मान संग्रहीत कर सकते हैं।


इस उदाहरण को चलाना देता है:
'''मॉड्यूल'''
<pre>$ cc -o उदाहरण example.c -llua
$ ./उदाहरण
परिणाम: 8
</पूर्व>


सी एपीआई लुआ स्टैक में विभिन्न छद्म-सूचकांकों पर स्थित कुछ विशेष टेबल भी प्रदान करता है। पर <code>LUA_GLOBALSINDEX</code> लुआ 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| title = एपीआई में बदलाव| 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 का उपयोग करके एक्सटेंशन मॉड्यूल लिखना संभव है। एक्सटेंशन मॉड्यूल लाइब्रेरी (कंप्यूटिंग) # डायनेमिक लिंकिंग हैं जिनका उपयोग लुआ लिपियों को मूल सुविधाएं प्रदान करके दुभाषिया की कार्यक्षमता बढ़ाने के लिए किया जा सकता है। लुआ स्क्रिप्ट एक्सटेंशन मॉड्यूल का उपयोग करके लोड कर सकती हैं <code>require</code>,<ref name=luarefman />लुआ में ही लिखे गए मॉड्यूल की तरह, या साथ <code>package.loadlib</code>.<ref>{{Cite web |title=लुआ 5.4 संदर्भ मैनुअल|url=https://www.lua.org/manual/5.4/manual.html#pdf-package.loadlib |access-date=2022-06-01 |website=www.lua.org}}</ref> जब सी लाइब्रेरी के माध्यम से लोड किया जाता है <code>require("foo")</code> लुआ समारोह की तलाश करेंगे <code>luaopen_foo</code> और इसे कॉल करें, जो लुआ से कॉल करने योग्य किसी भी सी फ़ंक्शन के रूप में कार्य करता है और आम तौर पर विधियों से भरी तालिका देता है। चट्टानों के रूप में जाने जाने वाले मॉड्यूल का बढ़ता हुआ संग्रह [[LuaRocks]] नामक [[पैकेज प्रबंधन प्रणाली]] के माध्यम से उपलब्ध है,<ref>{{cite web| url = https://luarocks.org/| title = लुआ रॉक्स| publisher = लुआ रॉक्स wiki| access-date=2009-05-24}}</ref> [[सीपीएएन]], [[RubyGems]] और पायथन अंडे की भावना में। अन्य स्क्रिप्टिंग भाषाओं सहित अधिकांश लोकप्रिय प्रोग्रामिंग भाषाओं के लिए पूर्व लिखित लुआ [[भाषा बंधन]] मौजूद है।<ref>{{cite web| url = http://lua-users.org/wiki/BindingCodeToLua| title = लुआ के लिए बाध्यकारी कोड| publisher = Lua-users wiki| access-date = 2009-05-24}}</ref> सी ++ के लिए, कई टेम्पलेट-आधारित दृष्टिकोण और कुछ स्वचालित बाध्यकारी जेनरेटर हैं।
 
मानक पुस्तकालय (कोर) मॉड्यूल के अलावा लुआ एपीआई का उपयोग करके एक्सटेंशन लिखना संभव है। विस्तार मॉड्यूल साझा वस्तुएं हैं जिनका उपयोग लुआ लिपियों को मूल सुविधाएं प्रदान करके दुभाषिया की कार्यक्षमता बढ़ाने के लिए किया जा सकता है। लुआ स्क्रिप्ट <code>require</code> एक्सटेंशन मॉड्यूल का उपयोग करके लोड कर सकती हैं,<ref name="luarefman" /> ठीक उसी प्रकार जैसे लुआ में ही लिखे मॉड्यूल, या <code>package.loadlib</code>.<ref>{{Cite web |title=लुआ 5.4 संदर्भ मैनुअल|url=https://www.lua.org/manual/5.4/manual.html#pdf-package.loadlib |access-date=2022-06-01 |website=www.lua.org}}</ref> जब सी लाइब्रेरी को <code>require("foo")</code> के माध्यम से लोड किया जाता है, तो लुआ फलन <code>luaopen_foo</code> की तलाश करेंगे और इसे कॉल करें, जो लुआ से कॉल करने योग्य किसी भी सी फ़ंक्शन के रूप में कार्य करता है और सामान्यतः विधियों से भरी तालिका देता है। [[सीपीएएन]], [[RubyGems|रूबीजम्स]] और पायथन अंडे की भावना में [[LuaRocks|लुआरॉक्स]] नामक [[पैकेज प्रबंधन प्रणाली]] के माध्यम से चट्टानों के रूप में जाने वाले मॉड्यूल का बढ़ता हुआ संग्रह उपलब्ध है।<ref>{{cite web| url = https://luarocks.org/| title = लुआ रॉक्स| publisher = लुआ रॉक्स wiki| access-date=2009-05-24}}</ref> अन्य स्क्रिप्टिंग भाषाओं सहित अधिकांश लोकप्रिय प्रोग्रामिंग भाषाओं के लिए पूर्व लिखित लुआ [[भाषा बंधन]] उपस्थित है।<ref>{{cite web| url = http://lua-users.org/wiki/BindingCodeToLua| title = लुआ के लिए बाध्यकारी कोड| publisher = Lua-users wiki| access-date = 2009-05-24}}</ref> सी ++ के लिए, कई टेम्पलेट-आधारित दृष्टिकोण और कुछ स्वचालित बाध्यकारी जेनरेटर हैं।


== अनुप्रयोग ==
== अनुप्रयोग ==
{{main|List of applications using Lua}}
{{main|लुआ का उपयोग करने वाले अनुप्रयोगों की सूची}}
वीडियो गेम के विकास में, वीडियो गेम प्रोग्रामर # स्क्रिप्टर द्वारा लुआ को व्यापक रूप से एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, मुख्य रूप से एम्बेड करने की कथित सहजता, तेजी से निष्पादन और लघु [[सीखने की अवस्था]] के कारण।<ref>{{cite web|url=https://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |title=लुआ को गेम लैंग्वेज क्यों माना जाता है?|access-date=2017-04-22 |url-status=bot: unknown |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> लुआ का उपयोग करने वाले उल्लेखनीय खेलों में शामिल हैं [[रोबोक्स]],<ref>{{Cite web|title=लुआउ क्यों?|url=https://luau-lang.org/why.html|access-date=2022-03-23|website=Luau|language=en-US}}</ref> गैरी का मॉड, [[वारक्राफ्ट की दुनिया]], [[Payday 2]], [[फैंटसी स्टार ऑनलाइन 2]], [[Dota 2]], [[एंग्री बर्ड्स स्पेस]],<ref>{{cite web |url = https://imgur.com/gallery/RzjAfGT |title = टीआईएल एंग्री बर्ड्स को लुआ - पोस्ट - इम्गुर में कोडित किया गया था|access-date = 23 March 2022}}</ref> [[क्राइसिस (वीडियो गेम)]],<ref>{{cite web |url = https://crymp.net/thread?id=347 |title = क्राइसिस सर्वर-साइड मोडिंग का परिचय|access-date = 23 March 2022}}</ref> गंभीर प्रयास। कुछ गेम जो मूल रूप से लुआ प्रोग्रामिंग या स्क्रिप्टिंग का समर्थन नहीं करते हैं, इस कार्यक्षमता को मॉड्स द्वारा जोड़ा जाता है, जैसे कि कंप्यूटरक्राफ्ट [[Minecraft]] के लिए करता है। इसके अलावा, Lua का उपयोग गैर-वीडियो गेम सॉफ़्टवेयर में भी किया जाता है, जैसे कि [[Adobe Lightroom]], Moho (सॉफ़्टवेयर), [[iClone]], Aerospike (डेटाबेस) और [[FreeBSD]] और [[NetBSD]] में कुछ सिस्टम सॉफ़्टवेयर, और [[MediaWiki]] पर टेम्पलेट स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है। स्क्रिबंटो एक्सटेंशन।<ref>{{Cite web|title=लुआ कार्य करता है|url=https://wow.gamepedia.com/Lua_functions|access-date=2021-03-01|website=wow.gamepedia.com|language=en-US}}</ref>
 
वीडियो गेम के विकास में, वीडियो गेम प्रोग्रामर # स्क्रिप्टर द्वारा लुआ को व्यापक रूप से एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, मुख्य रूप से एम्बेड करने की कथित सहजता, तेजी से निष्पादन और लघु [[सीखने की अवस्था]] के कारण।<ref>{{cite web|url=https://stackoverflow.com/questions/38338/why-is-lua-considered-a-game-language |title=लुआ को गेम लैंग्वेज क्यों माना जाता है?|access-date=2017-04-22 |url-status=bot: unknown |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> लुआ का उपयोग करने वाले उल्लेखनीय खेलों में शामिल हैं [[रोबोक्स]],<ref>{{Cite web|title=लुआउ क्यों?|url=https://luau-lang.org/why.html|access-date=2022-03-23|website=Luau|language=en-US}}</ref> गैरी का मॉड, [[वारक्राफ्ट की दुनिया]], [[Payday 2|पे डे 2]], [[फैंटसी स्टार ऑनलाइन 2]], [[Dota 2|डोटा 2]], [[एंग्री बर्ड्स स्पेस]],<ref>{{cite web |url = https://imgur.com/gallery/RzjAfGT |title = टीआईएल एंग्री बर्ड्स को लुआ - पोस्ट - इम्गुर में कोडित किया गया था|access-date = 23 March 2022}}</ref> [[क्राइसिस (वीडियो गेम)]],<ref>{{cite web |url = https://crymp.net/thread?id=347 |title = क्राइसिस सर्वर-साइड मोडिंग का परिचय|access-date = 23 March 2022}}</ref> गंभीर प्रयास। कुछ गेम जो मूल रूप से लुआ प्रोग्रामिंग या स्क्रिप्टिंग का समर्थन नहीं करते हैं, इस कार्यक्षमता को मॉड्स द्वारा जोड़ा जाता है, जैसे कि कंप्यूटरक्राफ्ट [[Minecraft|माइनक्राफ्ट]] के लिए करता है। इसके अलावा, Lua का उपयोग गैर-वीडियो गेम सॉफ़्टवेयर में भी किया जाता है, जैसे कि [[Adobe Lightroom|एडोब लाइटरूम]], Moho (सॉफ़्टवेयर), आईक्लोन, एयरोस्पाइक (डेटाबेस) और फ्रीबीएसडी और नेटबीएसडी में कुछ सिस्टम सॉफ़्टवेयर, और [[MediaWiki|मीडियाविकि]] पर टेम्पलेट स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है। स्क्रिबंटो एक्सटेंशन।<ref>{{Cite web|title=लुआ कार्य करता है|url=https://wow.gamepedia.com/Lua_functions|access-date=2021-03-01|website=wow.gamepedia.com|language=en-US}}</ref>
2003 में, GameDev.net द्वारा किए गए एक सर्वेक्षण से पता चला कि लुआ गेम प्रोग्रामिंग के लिए सबसे लोकप्रिय स्क्रिप्टिंग भाषा थी।<ref>{{cite web|url=https://gamedev.net/gdpolls/viewpoll.asp?ID=163 |title=मतदान के परिणाम|access-date=2017-04-22 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20031207171619/http://gamedev.net/gdpolls/viewpoll.asp?ID=163 |archive-date=7 December 2003 }}</ref> 12 जनवरी 2012 को, लुआ को प्रोग्रामिंग टूल्स श्रेणी में पत्रिका [[गेम डेवलपर (पत्रिका)]] से फ्रंट लाइन अवॉर्ड 2011 के विजेता के रूप में घोषित किया गया था।<ref>{{cite web|url=http://www.gdmag.com/blog/2012/01/front-line-award-winners.php |title=फ्रंट लाइन पुरस्कार विजेताओं की घोषणा की|access-date=2017-04-22 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20130615013638/http://www.gdmag.com/blog/2012/01/front-line-award-winners.php |archive-date=15 June 2013 }}</ref>
2003 में, GameDev.net द्वारा किए गए एक सर्वेक्षण से पता चला कि लुआ गेम प्रोग्रामिंग के लिए सबसे लोकप्रिय स्क्रिप्टिंग भाषा थी।<ref>{{cite web|url=https://gamedev.net/gdpolls/viewpoll.asp?ID=163 |title=मतदान के परिणाम|access-date=2017-04-22 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20031207171619/http://gamedev.net/gdpolls/viewpoll.asp?ID=163 |archive-date=7 December 2003 }}</ref> 12 जनवरी 2012 को, लुआ को प्रोग्रामिंग टूल्स श्रेणी में पत्रिका [[गेम डेवलपर (पत्रिका)]] से फ्रंट लाइन अवॉर्ड 2011 के विजेता के रूप में घोषित किया गया था।<ref>{{cite web|url=http://www.gdmag.com/blog/2012/01/front-line-award-winners.php |title=फ्रंट लाइन पुरस्कार विजेताओं की घोषणा की|access-date=2017-04-22 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20130615013638/http://www.gdmag.com/blog/2012/01/front-line-award-winners.php |archive-date=15 June 2013 }}</ref>
बड़ी संख्या में गैर-गेम एप्लिकेशन भी एक्स्टेंसिबिलिटी के लिए लुआ का उपयोग करते हैं, जैसे कि लुआ[[टेक्स]], टीएक्स टाइप-सेटिंग भाषा का कार्यान्वयन, [[रेडिस]], एक [[की-वैल्यू डेटाबेस]], [[नव के]], एक टेक्स्ट एडिटर, नगनेक्स, एक [[वेब सर्वर]] और [[वायरशार्क]] , एक नेटवर्क पैकेट विश्लेषक।
बड़ी संख्या में गैर-गेम एप्लिकेशन भी एक्स्टेंसिबिलिटी के लिए लुआ का उपयोग करते हैं, जैसे कि लुआ[[टेक्स]], टीएक्स टाइप-सेटिंग भाषा का कार्यान्वयन, [[रेडिस]], एक [[की-वैल्यू डेटाबेस]], [[नव के]], एक टेक्स्ट एडिटर, नगनेक्स, एक [[वेब सर्वर]] और [[वायरशार्क]] , एक नेटवर्क पैकेट विश्लेषक।


Scribunto एक्सटेंशन के माध्यम से, Lua MediaWiki सॉफ़्टवेयर में सर्वर-साइड स्क्रिप्टिंग भाषा के रूप में उपलब्ध है जो [[विकिपीडिया]] और अन्य विकी को शक्ति प्रदान करता है।<ref>{{cite web |title=एक्सटेंशन: स्क्रिप्ट - मीडियाविकि|url=https://www.mediawiki.org/wiki/Extension:Scribunto |website=MediaWiki.org |access-date=21 February 2019}}</ref> इसके उपयोगों में विकिडेटा से लेखों में डेटा के एकीकरण की अनुमति देना शामिल है,<ref>{{Cite web|url=https://www.wikidata.org/wiki/Wikidata:Infobox_Tutorial|title=विकिडाटा:इन्फोबॉक्स ट्यूटोरियल - विकिडाटा|website=www.wikidata.org|access-date=2018-12-21}}</ref> और शक्ति देना {{srlink|Wikipedia:Automated taxobox system|automated taxobox system}}.
स्क्रिबंटो एक्सटेंशन के माध्यम से, Lua मीडियाविकि सॉफ़्टवेयर में सर्वर-साइड स्क्रिप्टिंग भाषा के रूप में उपलब्ध है जो [[विकिपीडिया]] और अन्य विकी को शक्ति प्रदान करता है।<ref>{{cite web |title=एक्सटेंशन: स्क्रिप्ट - मीडियाविकि|url=https://www.mediawiki.org/wiki/Extension:Scribunto |website=MediaWiki.org |access-date=21 February 2019}}</ref> इसके उपयोगों में विकिडेटा से लेखों में डेटा के एकीकरण की अनुमति देना शामिल है,<ref>{{Cite web|url=https://www.wikidata.org/wiki/Wikidata:Infobox_Tutorial|title=विकिडाटा:इन्फोबॉक्स ट्यूटोरियल - विकिडाटा|website=www.wikidata.org|access-date=2018-12-21}}</ref> और शक्ति देना {{srlink|Wikipedia:Automated taxobox system|automated taxobox system}}.


== व्युत्पन्न भाषाएँ ==
== व्युत्पन्न भाषाएँ ==


=== लुआ === को संकलित करने वाली भाषाएं
* मूनस्क्रिप्ट एक [[गतिशील प्रोग्रामिंग भाषा]] है, [[कॉफीस्क्रिप्ट]] से प्रेरित व्हॉट्सएप चरित्र-संवेदनशील स्क्रिप्टिंग भाषा है, जिसे लुआ में संकलित किया गया है। इसका मतलब है कि उपयोग करने के बजाय <code>do</code> तथा <code>end</code> (या <code>{</code> तथा <code>}</code>) कोड के अनुभागों को परिसीमित करने के लिए यह [[लाइन ब्रेक (कंप्यूटिंग)]] और [[इंडेंटेशन शैली]] का उपयोग करता है।<ref>{{Cite web|title=भाषा गाइड - मूनस्क्रिप्ट 0.5.0|url=https://moonscript.org/reference/|access-date=2020-09-25|website=moonscript.org}}</ref><ref>{{Citation|last=leaf|title=leafo/moonscript|date=2020-09-23|url=https://github.com/leafo/moonscript|access-date=2020-09-25}}</ref><ref name=":1">{{cite web |url=https://andregarzia.com/2020/06/languages-that-compile-to-lua.html |title=लुआ को संकलित करने वाली भाषाएँ|website=AndreGarzia.com |author=Andre Alves Garzia |access-date= 25 September 2020}}</ref> मूनस्क्रिप्ट का एक उल्लेखनीय उपयोग एक वीडियो गेम वितरण वेबसाइट Itch.io है।
* मूनस्क्रिप्ट एक [[गतिशील प्रोग्रामिंग भाषा]] है, [[कॉफीस्क्रिप्ट]] से प्रेरित व्हॉट्सएप चरित्र-संवेदनशील स्क्रिप्टिंग भाषा है, जिसे लुआ में संकलित किया गया है। इसका मतलब है कि उपयोग करने के बजाय <code>do</code> तथा <code>end</code> (या <code>{</code> तथा <code>}</code>) कोड के अनुभागों को परिसीमित करने के लिए यह [[लाइन ब्रेक (कंप्यूटिंग)]] और [[इंडेंटेशन शैली]] का उपयोग करता है।<ref>{{Cite web|title=भाषा गाइड - मूनस्क्रिप्ट 0.5.0|url=https://moonscript.org/reference/|access-date=2020-09-25|website=moonscript.org}}</ref><ref>{{Citation|last=leaf|title=leafo/moonscript|date=2020-09-23|url=https://github.com/leafo/moonscript|access-date=2020-09-25}}</ref><ref name=":1">{{cite web |url=https://andregarzia.com/2020/06/languages-that-compile-to-lua.html |title=लुआ को संकलित करने वाली भाषाएँ|website=AndreGarzia.com |author=Andre Alves Garzia |access-date= 25 September 2020}}</ref> मूनस्क्रिप्ट का एक उल्लेखनीय उपयोग एक वीडियो गेम वितरण वेबसाइट Itch.io है।
* [[Haxe]] Lua लक्ष्य के संकलन का समर्थन करता है, Lua 5.1-5.3 के साथ-साथ LuaJIT 2.0 और 2.1 का समर्थन करता है।
* [[Haxe|हैक्स]] Lua लक्ष्य के संकलन का समर्थन करता है, Lua 5.1-5.3 के साथ-साथ LuaJIT 2.0 और 2.1 का समर्थन करता है।
* फेनेल, एक लिस्प बोली जो लुआ को लक्षित करती है।<ref name=":1" />* अर्न, एक [[लिस्प (प्रोग्रामिंग भाषा)]] बोली जो लुआ पर बनी है।<ref>{{Cite web|title=अर्न: लुआ {{!}} के लिए एक लिस्प कार्यान्वयन अर्न|url=https://urn-lang.com/|access-date=2021-01-12|website=urn-lang.com}}</ref>
* फेनेल, एक लिस्प बोली जो लुआ को लक्षित करती है।<ref name=":1" />* अर्न, एक [[लिस्प (प्रोग्रामिंग भाषा)]] बोली जो लुआ पर बनी है।<ref>{{Cite web|title=अर्न: लुआ {{!}} के लिए एक लिस्प कार्यान्वयन अर्न|url=https://urn-lang.com/|access-date=2021-01-12|website=urn-lang.com}}</ref>
* एमुलेट, एक [[एमएल (प्रोग्रामिंग भाषा)]] जैसी फंक्शनल प्रोग्रामिंग, जिसका कंपाइलर लुआ फाइलों को आउटपुट करता है।<ref>{{Cite web|title=एमुलेट एमएल|url=https://amulet.works/|access-date=2021-01-12|website=amulet.works|language=en-US}}</ref>
* एमुलेट, एक [[एमएल (प्रोग्रामिंग भाषा)]] जैसी फंक्शनल प्रोग्रामिंग, जिसका कंपाइलर लुआ फाइलों को आउटपुट करता है।<ref>{{Cite web|title=एमुलेट एमएल|url=https://amulet.works/|access-date=2021-01-12|website=amulet.works|language=en-US}}</ref>
Line 439: Line 372:
=== बोलियां ===
=== बोलियां ===
* लुजिट
* लुजिट
* Roblox से Luau, धीरे-धीरे टाइपिंग और एर्गोनोमिक परिवर्धन के साथ Lua 5.1 भाषा।<ref>{{cite web |title=जाल|url=https://roblox.github.io/luau/ |website=Roblox.GitHub.io |language=en}}</ref>
* रोबोक्स से Luau, धीरे-धीरे टाइपिंग और एर्गोनोमिक परिवर्धन के साथ Lua 5.1 भाषा।<ref>{{cite web |title=जाल|url=https://roblox.github.io/luau/ |website=Roblox.GitHub.io |language=en}}</ref>
* वैकल्पिक स्थिर टाइपिंग के साथ रवि, JIT-सक्षम Lua 5.3 भाषा। जेआईटी प्रकार की जानकारी द्वारा निर्देशित है।<ref>{{cite web |title=रवि प्रोग्रामिंग लैंग्वेज|url=http://ravilang.github.io/ |website=GitHub}}</ref>
* वैकल्पिक स्थिर टाइपिंग के साथ रवि, JIT-सक्षम Lua 5.3 भाषा। जेआईटी प्रकार की जानकारी द्वारा निर्देशित है।<ref>{{cite web |title=रवि प्रोग्रामिंग लैंग्वेज|url=http://ravilang.github.io/ |website=GitHub}}</ref>
* शाइन, लुआजिट का एक फोर्क जिसमें मॉड्यूल सिस्टम और मैक्रो सिस्टम समेत कई एक्सटेंशन हैं।<ref>{{cite web |last1=Hundt |first1=Richard |title=रिचर्डहंट/शाइन|website=[[GitHub]] |url=https://github.com/रिचर्डहंट/शाइन|date=2021-04-22}}</ref>
* शाइन, लुआजिट का एक फोर्क जिसमें मॉड्यूल सिस्टम और मैक्रो सिस्टम समेत कई एक्सटेंशन हैं।<ref>{{cite web |last1=Hundt |first1=Richard |title=रिचर्डहंट/शाइन|website=[[GitHub]] |url=https://github.com/रिचर्डहंट/शाइन|date=2021-04-22}}</ref>
Line 472: Line 405:




==इस पेज में लापता आंतरिक लिंक की सूची==


*सीएलयू (प्रोग्रामिंग भाषा)
 
*उच्च स्तरीय प्रोग्रामिंग भाषा
 
*भाषा का अंकन
 
*दुभाषिया (कंप्यूटिंग)
 
*ट्रेड बैरियर
 
*रियो डी जनेरियो के पोंटिफिकल कैथोलिक विश्वविद्यालय
 
*संदर्भ द्वारा कॉल करें
 
*साहचर्य सरणी
 
*अनाम समारोह
 
*वर्ग (कंप्यूटर प्रोग्रामिंग)
 
*जानकारी छुपाना
 
*प्रथम श्रेणी समारोह
*नाम स्थान
*कम से कम विशेषाधिकार का सिद्धांत
*रूपांतरण टाइप करें
*क्लोजर (कंप्यूटर साइंस)
*गतिशील रूप से टाइप किया गया
*coroutine
*सरणी डेटा संरचना
*हैश टेबल
*शेयर करके कॉल करें
*स्वयं (प्रोग्रामिंग भाषा)
*फैक्टरी विधि पैटर्न
*विधि (कंप्यूटर विज्ञान)
*समय-समय पर संकलन
*रन टाइम (कार्यक्रम जीवनचक्र चरण)
*व्याख्या की गई भाषा
*दैविक (सॉफ्टवेयर)
*पायथन (प्रोग्रामिंग भाषा)
*ढेर (डेटा संरचना)
*अजगर के अंडे
*वीडियो गेम विकास
*एयरोस्पाइक (डेटाबेस)
*मोहो (सॉफ्टवेयर)
*nginx
*लुआटेक्स
*विकिडाटा
*व्हाइटस्पेस चरित्र
*क्रमिक टाइपिंग
== बाहरी संबंध ==
== बाहरी संबंध ==
{{Sister project links|display=Lua|b = Lua Programming|v = Lua|wikt = no|q = no|s = no|commons = no}}
*
 
* {{Official website}}
* [http://lua-users.org/ Lua Users], Community
* [http://lua-users.org/ Lua Users], Community
* [https://luaforum.com Lua Forum]
* [https://luaforum.com Lua Forum]
Line 523: Line 425:
* [https://web.archive.org/web/20070202005230/http://luaforge.net/ Projects in Lua]
* [https://web.archive.org/web/20070202005230/http://luaforge.net/ Projects in Lua]


{{Lua programming language}}
[[Category:1993 में बनाई गई प्रोग्रामिंग भाषा]]
{{FOSS}}
[[Category:All articles with dead external links]]
{{Programming languages}}
[[Category:Articles containing Portuguese-language text]]
 
[[Category:Articles with dead external links from July 2018]]
 
[[Category:Articles with dead external links from June 2020]]
[[index.php?title=Category:लुआ (प्रोग्रामिंग भाषा)| ]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category: उदाहरण सी कोड वाले लेख]]
[[Category:Articles with invalid date parameter in template]]
[[Category: ब्राजील के आविष्कार]]
[[Category:Articles with permanently dead external links]]
[[Category:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर]]
[[Category:CS1 English-language sources (en)]]
[[Category:क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]]
[[Category:CS1 maint]]
[[Category: गतिशील प्रोग्रामिंग भाषाएं]]
[[Category:Collapse templates]]
[[Category: गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषाएं]]
[[Category:Machine Translated Page]]
[[Category:एंबेडेड सिस्टम]]
[[Category:Pages with script errors]]
[[Category:मुफ्त संकलक और दुभाषिए]]
[[Category:Templates Vigyan Ready]]
[[Category:मुफ्त कंप्यूटर पुस्तकालय]]
[[Category: सी में मुफ्त सॉफ्टवेयर प्रोग्राम किया गया]]
[[Category: वस्तु-उन्मुख प्रोग्रामिंग भाषाएं]]
[[Category: रियो डी जनेरियो का परमधर्मपीठीय कैथोलिक विश्वविद्यालय]]
[[Category: प्रोग्रामिंग भाषाएं]]
[[Category: 1993 में बनाई गई प्रोग्रामिंग भाषा]]
[[Category: प्रोटोटाइप-आधारित प्रोग्रामिंग भाषाएं]]
[[Category: रजिस्टर-आधारित वर्चुअल मशीन]]
[[Category: स्क्रिप्टिंग भाषाएं]]
[[Category: एमआईटी लाइसेंस का प्रयोग करने वाला सॉफ्टवेयर]]
[[Category: Machine Translated Page]]
[[Category:Created On 30/11/2022]]

Latest revision as of 12:04, 16 February 2023

लुआ (/ˈlə/ LOO; से Portuguese: लुआ [ˈlu.(w)ɐ] अर्थ चंद्रमा) हल्की प्रोग्रामिंग भाषा, उच्च-स्तरीय प्रोग्रामिंग भाषा, बहु-प्रतिमान प्रोग्रामिंग भाषा है जिसे मुख्य रूप से अनुप्रयोगों में स्क्रिप्टिंग भाषा के लिए डिज़ाइन किया गया है।[1] लुआ क्रॉस-प्लेटफ़ॉर्म है, चूंकि संकलक बाईटकोड का इंटरप्रेटर (कंप्यूटिंग) एएनएसआई सी में लिखा गया है,[2] और लुआ के पास इसे अनुप्रयोगों में अंतःस्थापित करने के लिए अपेक्षाकृत सरल सी एपीआई है।[3]

लुआ की उत्पत्ति 1993 में उस समय अनुकूलन की बढ़ती मांग को पूरा करने के लिए सॉफ्टवेयर अनुप्रयोगों के विस्तार के लिए भाषा के रूप में हुई थी। इसने अधिकांश प्रक्रियात्मक प्रोग्रामिंग भाषाओं की मूलभूत सुविधाएं प्रदान किया था, किन्तु अधिक जटिल या डोमेन-विशिष्ट भाषा सुविधाओं को सम्मिलित नहीं किया गया; किन्तु, इसमें प्रोग्रामर को ऐसी सुविधाओं को प्रायुक्त करने की अनुमति देने वाली भाषा का विस्तार करने के लिए तंत्र सम्मिलित थे। जैसा कि लुआ को सामान्य अंतःस्थापित करने योग्य विस्तार भाषा बनाने का विचार था, लुआ के डिजाइनरों ने इसकी रूपरेखा (कंप्यूटर प्रोग्रामिंग), में पोर्टेबिलिटी, एक्स्टेंसिबिलिटी और विकास में उपयोग में आसानी पर ध्यान केंद्रित किया था।

इतिहास

लुआ को 1993 में ब्राज़िल में रियो डी जनेरियो के परमधर्मपीठीय कैथोलिक विश्वविद्यालय में कंप्यूटर ग्राफिक्स टेक्नोलॉजी ग्रुप (टेक्ग्राफ) के सदस्य रॉबर्टो इरुसलिम्स्की, लुइज़ हेनरिक डी फिगुएरेडो और वाल्डेमर सेलेस द्वारा बनाया गया था।

1977 से 1992 तक, ब्राजील में कंप्यूटर हार्डवेयर और सॉफ्टवेयर के लिए शक्तिशाली व्यापार बाधाओं (जिसे मार्केट रिजर्व कहा जाता है) की नीति थी। उस माहौल में, टेकग्राफ के ग्राहक राजनीतिक या आर्थिक रूप से विदेश से अनुकूलित सॉफ्टवेयर खरीदने का जोखिम नहीं उठा सकते थे। उन कारणों ने टेकग्राफ को खरोंच से आवश्यक मूलभूत उपकरणों को प्रायुक्त करने के लिए प्रेरित किया था।[4]

लुआ के पूर्ववर्ती डेटा-विवरण/कॉन्फ़िगरेशन भाषाएँ एसओएल (सिंपल ऑब्जेक्ट लैंग्वेज) और डीईएल (डेटा-एंट्री भाषा) थीं।[5] वे 1992-1993 में टेकग्राफ में दो अलग-अलग परियोजनाओं में कुछ लचीलापन जोड़ने के लिए स्वतंत्र रूप से विकसित किए गए थे (दोनों पेट्रोब्रास कंपनी में इंजीनियरिंग अनुप्रयोगों के लिए इंटरैक्टिव ग्राफिकल प्रोग्राम थे)। एसओएल और डीईएल में किसी भी प्रवाह-नियंत्रण संरचनाओं की कमी थी, और पेट्रोब्रास ने उन्हें पूर्ण प्रोग्रामिंग शक्ति जोड़ने की बढ़ती आवश्यकता अनुभव किया था।

लुआ के विकास में, भाषा के लेखकों ने लिखा:[4]

1993 में, एकमात्र वास्तविक दावेदार टीसीएल था, जिसे स्पष्ट रूप से अनुप्रयोगों में एम्बेड करने के लिए डिज़ाइन किया गया था। हालाँकि, Tcl में अपरिचित सिंटैक्स था, डेटा विवरण के लिए अच्छा समर्थन नहीं देता था, और केवल यूनिक्स प्लेटफॉर्म पर चलता था। हमने एलआईएसपी या स्कीम पर विचार नहीं किया क्योंकि उनके अमित्र सिंटैक्स थे। पायथन अभी भी अपनी प्रारंभिक अवस्था में था। फ्री, डू-इट-योरसेल्फ वातावरण में जो तब टेकग्राफ में राज करता था, यह काफी स्वाभाविक था कि हमें अपनी खुद की स्क्रिप्टिंग भाषा विकसित करने की कोशिश करनी चाहिए ... क्योंकि भाषा के कई संभावित उपयोगकर्ता पेशेवर प्रोग्रामर नहीं थे, भाषा से बचना चाहिए गूढ़ वाक्य रचना और शब्दार्थ। नई भाषा का कार्यान्वयन अत्यधिक पोर्टेबल होना चाहिए, क्योंकि टेकग्राफ के ग्राहकों के पास कंप्यूटर प्लेटफॉर्म का एक बहुत ही विविध संग्रह था। अंत में, चूंकि हमें उम्मीद थी कि अन्य टेकग्राफ उत्पादों को भी एक स्क्रिप्टिंग भाषा को एम्बेड करने की आवश्यकता होगी, नई भाषा को एसओएल के उदाहरण का पालन करना चाहिए और सी एपीआई के साथ एक पुस्तकालय के रूप में प्रदान किया जाना चाहिए।

लुआ 1.0 को इस प्रकार से डिजाइन किया गया था कि इसके ऑब्जेक्ट कंस्ट्रक्टर्स, वर्तमान प्रकाश और लचीली शैली से थोड़ा अलग होने के कारण, एसओएल के डेटा-विवरण सिंटैक्स को सम्मिलित (इसलिए नाम लुआ: सोल का अर्थ पुर्तगाली में सूर्य, और लुआ का अर्थ चंद्रमा) किया गया है। नियंत्रण संरचनाओं के लिए लुआ सिंटेक्स (प्रोग्रामिंग भाषाएं) अधिकांशतः मापांक (if, while, repeat/until) से उधार लिया गया था, किन्तु सीएलयू (प्रोग्रामिंग लैंग्वेज) (कई असाइनमेंट और फ़ंक्शन कॉल से कई रिटर्न, संदर्भ या स्पष्ट सूचक (कंप्यूटर प्रोग्रामिंग) द्वारा कॉल करने के लिए सरल विकल्प के रूप में), सी ++ (स्थानीय चर को अनुमति देने का साफ विचार) से भी प्रभावित हुआ था। केवल वहीं घोषित किया जाए जहां हमें इसकी आवश्यकता है[4]), SNOBOL और AWK (सहयोगी सरणियाँ)। डॉ. डॉब के जर्नल में प्रकाशित लेख में, लुआ के रचनाकारों ने यह भी कहा कि एलआईएसपी और योजना उनके एकल, सर्वव्यापी डेटा-संरचना तंत्र (सूची (सार डेटा प्रकार)) के साथ तालिका को लुआ की प्राथमिक डेटा संरचना के रूप में विकसित करने के उनके निर्णय पर बड़ा प्रभाव था।[6]

लुआ सिमेंटिक्स समय के साथ विशेष रूप से गुमनाम कार्यों और पूर्ण शाब्दिक दायरे की प्रारंभ के साथ योजना से प्रभावित हुए हैं।[4] नए लुआ संस्करणों में कई सुविधाएँ जोड़ी गईं।

संस्करण 5.0 से पहले लुआ के संस्करण बीएसडी लाइसेंस के समान लाइसेंस के अनुसार जारी किए गए थे। संस्करण 5.0 के बाद से, लुआ को एमआईटी लाइसेंस के अनुसार लाइसेंस दिया गया है। दोनों अनुमेय मुफ्त सॉफ्टवेयर लाइसेंस हैं और लगभग समान हैं।

सुविधाएँ

लुआ को सामान्यतः बहु-प्रतिमान प्रोग्रामिंग भाषा के रूप में वर्णित किया जाता है। बहु-प्रतिमान भाषा, सामान्य सुविधाओं का छोटा सा सेट प्रदान करती है जिसे विभिन्न प्रकार की समस्या के लिए बढ़ाया जा सकता है। लुआ में वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) के लिए स्पष्ट समर्थन नहीं है, किन्तु इसे मेटासूचियाँ के साथ प्रायुक्त करने की अनुमति देता है। इसी प्रकार, लुआ प्रोग्रामर्स को नामस्थान, क्लास (कंप्यूटर प्रोग्रामिंग), और अन्य संबंधित विशेषताओं को इसके एकल टेबल कार्यान्वयन का उपयोग करने की अनुमति देता है; प्रथम श्रेणी के कार्य कार्यात्मक प्रोग्रामिंग से कई विधियों के रोजगार की अनुमति देते हैं; और पूर्ण लेक्सिकल स्कूपिंग कम से कम विशेषाधिकार के सिद्धांत को प्रायुक्त करने के लिए ठीक-ठाक जानकारी को छिपाने की अनुमति देता है।

सामान्यतः, लुआ सरल, लचीली मेटाप्रोग्रामिंग प्रदान करने का प्रयास करता है, जिसे प्रोग्रामिंग प्रतिमान के लिए विशिष्ट फीचर-सेट की आपूर्ति के अतिरिक्त आवश्यकतानुसार बढ़ाया जा सकता है। परिणामस्वरूप, आधार भाषा हल्की है, पूर्ण संदर्भ इंटरप्रेटर केवल 247 किलोबाइट संकलित है और अनुप्रयोगों की विस्तृत श्रृंखला के लिए आसानी से अनुकूलनीय है।[2]

विस्तार भाषा या स्क्रिप्टिंग भाषा के रूप में उपयोग के लिए गतिशील रूप से टाइप की गई भाषा, लुआ विभिन्न प्रकार के होस्ट प्लेटफॉर्म पर फिट होने के लिए पर्याप्त कॉम्पैक्ट है। यह बूलियन डेटा मान, संख्या (दोहरा-परिशुद्धता फ़्लोटिंग पॉइंट और डिफ़ॉल्ट रूप से 64-बिट पूर्णांक), और स्ट्रिंग (कंप्यूटर विज्ञान) जैसे परमाणु डेटा संरचनाओं की छोटी संख्या का समर्थन करता है। लुआ की एकल मूल डेटा संरचना, तालिका, जो अनिवार्य रूप से विषम साहचर्य सरणी है, का उपयोग करके सरणियों, सेटों, सूची (कंप्यूटिंग) और रिकॉर्ड (कंप्यूटर विज्ञान) जैसे विशिष्ट सेट (कंप्यूटर विज्ञान) संरचनाओं का प्रतिनिधित्व किया जा सकता है।

लुआ उन्नत सुविधाओं के छोटे सेट को प्रायुक्त करता है जैसे प्रथम श्रेणी के कार्य, कचरा संग्रह (कंप्यूटर विज्ञान), क्लोजर (कंप्यूटर विज्ञान), उचित पूंछ की पुनरावृत्ति, प्रकार रूपांतरण (रन टाइम पर स्ट्रिंग और संख्या मानों के बीच स्वत: रूपांतरण), कोरटाइन (सहकारी) मल्टीटास्किंग) और गतिशील लोडिंग बंद करता है।

सिंटेक्स

क्लासिक हैलो, वर्ल्ड! कार्यक्रम को इस प्रकार लिखा जा सकता है:[7]

print("Hello, World!")

या के रूप में

print 'Hello, World!'

लुआ में टिप्पणी (कंप्यूटर प्रोग्रामिंग) डबल-हाइफ़न के साथ प्रारंभ होती है और एडा (प्रोग्रामिंग भाषा), एफिल (प्रोग्रामिंग भाषा), हास्केल (प्रोग्रामिंग भाषा), एसक्यूएल और वीएचडीएल के समान लाइन के अंत तक चलती है। बहु-पंक्ति तार और टिप्पणियाँ दोहरे वर्ग कोष्ठक से सुशोभित हैं। कारख़ाने का फ़ंक्शन को इस उदाहरण में फ़ंक्शन के रूप में प्रायुक्त किया गया है:

function factorial(n)
  local x = 1
  for i = 2, n do
    x = x * i
  end
  return x
end

नियंत्रण प्रवाह

लुआ में प्रकार की सशर्त (कंप्यूटर प्रोग्रामिंग) परीक्षण होता है: if then end वैकल्पिक के साथ else तथा elseif then निष्पादन नियंत्रण का निर्माण होता है।

सामान्य if then end कथन के लिए तीनों खोजशब्दों की आवश्यकता होती है:

if condition then
	--statement body
end

else कीवर्ड को साथ स्टेटमेंट ब्लॉक के साथ निष्पादन को नियंत्रित करने के लिए जोड़ा जा सकता है, जब if स्थिति falseका मूल्यांकन करता है:

if condition then
	--statement body
else
	--statement body
end

कई स्थितियों के अनुसार elseif then का उपयोग करके निष्पादन को नियंत्रित किया जा सकता है, खोजशब्द:

if condition then
	--statement body
elseif condition then
	--statement body
else -- optional
	--optional default statement body
end

लुआ में चार प्रकार के कंडीशनल लूप होते हैं, while लूप, repeat लूप (लूप के समय do while के समान) लूप for न्यूमेरिक और लूप for के लिए जेनेरिक होता है।

--condition = true

while condition do
  --statements
end

repeat
  --statements
until condition

for i = first, last, delta do  --delta may be negative, allowing the for loop to count down or up
  --statements
  --example: print(i)
end

लूप for सामान्यतः

for key, value in pairs(_G) do
  print(key, value)
end

सूची पर पुनरावृति फलन pairs का उपयोग करके तालिका _G पर पुनरावृत्त होगा, जब तक कि यह nilन हो जाए। लूप को नेस्टेड (प्रोग्रामिंग) भी किया जा सकता है (दूसरे लूप के अंदर डालें)।

local grid = {
  { 11, 12, 13 },
  { 21, 22, 23 },
  { 31, 32, 33 }
}

for y, row in pairs(grid) do
  for x, value in pairs(row) do
    print(x, y, value)
  end
end

कार्य

प्रथम श्रेणी के फलन के रूप में लुआ के कार्यों का उपचार निम्न उदाहरण में दिखाए गए हैं, जहां प्रिंट फलन का व्यवहार संशोधित किया गया है:

do
  local oldprint = print
  -- Store current print function as oldprint
  function print(s)
    --[[ Redefine print function. The usual print function can still be used
      through oldprint. The new one has only one argument.]]
    oldprint(s == "foo" and "bar" or s)
  end
end

कोई भविष्य कॉल करता है print अब नए फ़ंक्शन के माध्यम से रूट किया जाएगा, और लुआ के स्कोप (प्रोग्रामिंग) लेक्सिकल स्कोपिंग के कारण, पुराना प्रिंट फ़ंक्शन केवल नए, संशोधित प्रिंट द्वारा ही एक्सेस किया जा सकेगा। लुआ क्लोजर (कंप्यूटर प्रोग्रामिंग) का भी समर्थन करता है, जैसा कि नीचे दिखाया गया है:

function addto(x)
  -- Return a new function that adds x to the argument
  return function(y)
    --[=[ When we refer to the variable x, which is outside the current
      scope and whose lifetime would be shorter than that of this anonymous
      function, Lua creates a closure.]=]
    return x + y
  end
end
fourplus = addto(4)
print(fourplus(3))  -- Prints 7

--This can also be achieved by calling the function in the following way:
print(addto(4)(3))
--[[ This is because we are calling the returned function from 'addto(4)' with the argument '3' directly.
  This also helps to reduce data cost and up performance if being called iteratively.
]]

वेरिएबल x के लिए नया क्लोजर हर बार addto को कॉल करने के लिए बनाया जाता है, जिससे लौटाया गया प्रत्येक नया अज्ञात फ़ंक्शन हमेशा स्वयं के x पैरामीटर तक पहुंच सके। किसी अन्य वस्तु के प्रकार, लुआ के कचरा संग्राहक द्वारा बंद का प्रबंधन किया जाता है।

सारिणी

लुआ में सूचियाँ सबसे महत्वपूर्ण डेटा संरचनाएं हैं (और, डिज़ाइन द्वारा, केवल अंतर्निहित समग्र डेटा प्रकार) और सभी उपयोगकर्ता-निर्मित प्रकारों का आधार हैं। वे स्वचालित संख्यात्मक कुंजी और विशेष सिंटैक्स के साथ साहचर्य सरणियाँ हैं।

तालिका कुंजी और डेटा जोड़े का संग्रह है, जहां डेटा को कुंजी द्वारा संदर्भित किया जाता है; दूसरे शब्दों में, यह हैश तालिका विषम साहचर्य सरणी है।

{} कंस्ट्रक्टर सिंटैक्स का उपयोग करके तालिकाएँ बनाई जाती हैं।

a_table = {} -- Creates a new, empty table

तालिकाएँ हमेशा संदर्भ द्वारा पारित की जाती हैं (देखें साझा करके कॉल करें)। फलन सहित nil और NaN, को छोड़कर कुंजी (इंडेक्स) कोई भी मान हो सकता है।

a_table = {x = 10}  -- Creates a new table, with one entry mapping "x" to the number 10.
print(a_table["x"]) -- Prints the value associated with the string key, in this case 10.
b_table = a_table
b_table["x"] = 20   -- The value in the table has been changed to 20.
print(b_table["x"]) -- Prints 20.
print(a_table["x"]) -- Also prints 20, because a_table and b_table both refer to the same table.

कुंजी के रूप में स्ट्रिंग (कंप्यूटर विज्ञान) का उपयोग करके तालिका को अधिकांशतः वस्तु रचना (या रिकॉर्ड (कंप्यूटर विज्ञान)) के रूप में उपयोग किया जाता है। क्योंकि इस प्रकार का उपयोग बहुत आम है, लुआ ऐसे क्षेत्रों तक पहुँचने के लिए विशेष सिंटैक्स प्रस्तुत करता है।[8]

point = { x = 10, y = 20 }   -- Create new table
print(point["x"])            -- Prints 10
print(point.x)               -- Has exactly the same meaning as line above. The easier-to-read dot notation is just syntactic sugar.

संबंधित कार्यों को संग्रहीत करने के लिए तालिका का उपयोग करके, यह नामस्थान के रूप में कार्य कर सकता है।

Point = {}

Point.new = function(x, y)
  return {x = x, y = y}  --  return {["x"] = x, ["y"] = y}
end

Point.set_x = function(point, x)
  point.x = x  --  point["x"] = x;
end

सूचियाँ को स्वचालित रूप से संख्यात्मक कुंजी असाइन की जाती है, जिससे उन्हें सरणी डेटा प्रकार के रूप में उपयोग करने में सक्षम बनाया जाता है। पहला स्वचालित सूचकांक 0 के अतिरिक्त 1 है क्योंकि यह कई अन्य प्रोग्रामिंग भाषाओं के लिए है (चूंकि 0 के स्पष्ट सूचकांक की अनुमति है)। संख्यात्मक कुंजी 1 स्ट्रिंग कुंजी "1" से अलग है .

array = { "a", "b", "c", "d" }   -- Indices are assigned automatically.
print(array[2])                  -- Prints "b". Automatic indexing in Lua starts at 1.
print(#array)                    -- Prints 4.  # is the length operator for tables and strings.
array[0] = "z"                   -- Zero is a legal index.
print(#array)                    -- Still prints 4, as Lua arrays are 1-based.

तालिका t की लंबाई को किसी भी पूर्णांक सूचकांक n के रूप में परिभाषित किया गया है जैसे कि t[n] शून्य नहीं है और t[n+1] nil हैं; इसके अलावा, यदि t[1] nilहैं, तो n शून्य हो सकता है। नियमित सरणी के लिए, 1 से दिए गए n के गैर-शून्य मानों के साथ , इसकी लंबाई बिल्कुल वही n हैं, जो इसके अंतिम मान का सूचकांक हैं। यदि सरणी में छेद हैं (अर्थात, अन्य गैर-शून्य मानों के बीच शून्य मान), तो #t कोई भी सूचकांक हो सकता हैं, जो nil मान से पहले होता हैं (अर्थात, यह सरणी के अंत के रूप में ऐसे किसी भी शून्य मान पर विचार कर सकता है)।[9]

ExampleTable =
{
  {1, 2, 3, 4},
  {5, 6, 7, 8}
}
print(ExampleTable[1][3]) -- Prints "3"
print(ExampleTable[2][4]) -- Prints "8"

तालिका वस्तुओं की सरणी हो सकती है।

function Point(x, y)        -- "Point" object constructor
  return { x = x, y = y }   -- Creates and returns a new object (table)
end
array = { Point(10, 20), Point(30, 40), Point(50, 60) }   -- Creates array of points
                        -- array = { { x = 10, y = 20 }, { x = 30, y = 40 }, { x = 50, y = 60 } };
print(array[2].y)                                         -- Prints 40

किसी सरणी का अनुकरण करने के लिए हैश मैप का उपयोग करना सामान्य रूप से वास्तविक सरणी का उपयोग करने की तुलना में धीमा होता है; चूंकि, इस समस्या से बचने में सहायता करने के लिए लुआ तालिकाओं को सरणियों के रूप में उपयोग करने के लिए अनुकूलित किया गया है।[10]

मेटाटेबल्स

एक्स्टेंसिबल शब्दार्थ लुआ की प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण "अनंत" तालिका प्रदर्शित करता है। किसी भी n के लिए, fibs[n] डायनेमिक प्रोग्रामिंग और मेमोइज़ेशन का उपयोग करके n-वें फाइबोनैचि संख्या देगा।

fibs = { 1, 1 }                                -- Initial values for fibs[1] and fibs[2].
setmetatable(fibs, {
  __index = function(values, n)                --[[__index is a function predefined by Lua, 
                                                   it is called if key "n" does not exist.]]
    values[n] = values[n - 1] + values[n - 2]  -- Calculate and memoize fibs[n].
    return values[n]
  end
})

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग

चूंकि लुआ में कक्षाओं की अंतर्निहित अवधारणा नहीं है, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को फ़ंक्शंस और तालिकाओं का उपयोग करके अनुकरण किया जा सकता है। टेबल में मेथड्स और फील्ड्स डालकर ऑब्जेक्ट बनाया जाता है। इनहेरिटेंस (सिंगल और मल्टीपल दोनों) को मेटाटेबल्स के साथ प्रायुक्त किया जा सकता है, गैर-उपस्थित विधियों और फील्ड्स को पैरेंट ऑब्जेक्ट को सौंप दिया जाता है।

इन विधियों के साथ "वर्ग" जैसी कोई अवधारणा नहीं है; किन्तु, स्व या जावास्क्रिप्ट के समान प्रोटोटाइप का उपयोग किया जाता है। नई वस्तुओं को या तो फ़ैक्टरी विधि (जो स्क्रैच से नई वस्तुओं का निर्माण करती है) या किसी वर्तमान वस्तु का क्लोन बनाकर बनाई जाती है।

मूलभूत सदिश वस्तु बनाना:

local Vector = {}
local VectorMeta = { __index = Vector}

function Vector.new(x, y, z)    -- The constructor
  return setmetatable({x = x, y = y, z = z}, VectorMeta)
end

function Vector.magnitude(self)     -- Another method
  return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end

local vec = Vector.new(0, 1, 0) -- Create a vector
print(vec.magnitude(vec))       -- Call a method (output: 1)
print(vec.x)                    -- Access a member variable (output: 0)

यहां, setmetatable लूआ को vector वेक्टर तालिका में तत्व की तलाश करने के लिए कहता है यदि यह vec तालिका में vec.magnitude उपस्थित नहीं है, जो vec["magnitude"] के समतुल्य है, सबसे पहले परिमाण तत्व के लिए vec तालिका में दिखता है। vec तालिका में magnitude तत्व नहीं होता है, किन्तु जब यह vec तालिका में नहीं मिलता है तो magnitude तत्व के लिए vector तालिका में इसका मेटाटेबल प्रतिनिधि होता है।

लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ सिंटैक्टिक चीनी प्रदान करता है। प्रोटोटाइप तालिका के अंदर सदस्य कार्यों की घोषणा करने के लिए, कोई function table:func(args) का उपयोग कर सकता है, जो function table.func(self, args) के बराबर है। कॉलिंग क्लास के विधियों भी कोलन: object:func(args) का उपयोग करते हैं जो object.func(object, args) के बराबर है।

इसे ध्यान में रखते हुए, यहाँ संगत वर्ग है: वाक्यात्मक खंड:

local Vector = {}
Vector.__index = Vector

function Vector:new(x, y, z)    -- The constructor
  -- Since the function definition uses a colon, 
  -- its first argument is "self" which refers
  -- to "Vector"
  return setmetatable({x = x, y = y, z = z}, self)
end

function Vector:magnitude()     -- Another method
  -- Reference the implicit object using self
  return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end

local vec = Vector:new(0, 1, 0) -- Create a vector
print(vec:magnitude())          -- Call a method (output: 1)
print(vec.x)                    -- Access a member variable (output: 0)


वंशानुक्रम


लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है। इस उदाहरण में, हम वैक्टर को व्युत्पन्न वर्ग में उनके मानों को स्थिरांक से गुणा करने की अनुमति देते हैं।

local Vector = {}
Vector.__index = Vector

function Vector:new(x, y, z)    -- The constructor
  -- Here, self refers to whatever class's "new"
  -- method we call.  In a derived class, self will
  -- be the derived class; in the Vector class, self
  -- will be Vector
  return setmetatable({x = x, y = y, z = z}, self)
end

function Vector:magnitude()     -- Another method
  -- Reference the implicit object using self
  return math.sqrt(self.x^2 + self.y^2 + self.z^2)
end

-- Example of class inheritance
local VectorMult = {}
VectorMult.__index = VectorMult
setmetatable(VectorMult, Vector) -- Make VectorMult a child of Vector

function VectorMult:multiply(value) 
  self.x = self.x * value
  self.y = self.y * value
  self.z = self.z * value
  return self
end

local vec = VectorMult:new(0, 1, 0) -- Create a vector
print(vec:magnitude())          -- Call a method (output: 1)
print(vec.y)                    -- Access a member variable (output: 1)
vec:multiply(2)                 -- Multiply all components of vector by 2
print(vec.y)                    -- Access member again (output: 2)

लुआ एकाधिक वंशानुक्रम का भी समर्थन करता है; __index या तो फलन या टेबल हो सकता है।[11] ऑपरेटर ओवरलोडिंग भी की जा सकती है; लुआ मेटासूचियाँ में __add, __sub आदि जैसे तत्व हो सकते हैं।[12]


कार्यान्वयन

लुआ प्रोग्राम सीधे टेक्स्ट वाली लुआ फ़ाइल से भाषा की व्याख्या नहीं करते हैं, किन्तु बायटेकोड में संकलित किया जाता है, जिसे बाद में लुआ आभासी मशीन पर चलाया जाता है। संकलन प्रक्रिया सामान्यतः उपयोगकर्ता के लिए अदृश्य होती है और रन टाइम (प्रोग्राम जीवनचक्र चरण) के समय की जाती है, खासकर जब जेआईटी संकलित का उपयोग किया जाता है, किन्तु लोडिंग प्रदर्शन को बढ़ाने या मेजबान पर्यावरण के स्मृति पदचिह्न को कम करने के लिए इसे ऑफ़लाइन किया जा सकता है। स्ट्रिंग लाइब्रेरी से dump फ़ंक्शन और load/loadstring/loadfile फ़ंक्शंस का उपयोग करके लुआ बाइटकोड को लुआ के अन्दर से भी उत्पादित और निष्पादित किया जा सकता है। लुआ संस्करण 5.3.4 सी कोड की लगभग 24,000 पंक्तियों में प्रायुक्त किया गया है।[1][2]

अधिकांश सीपीयू के प्रकार, और अधिकांश वर्चुअल मशीनों (जो स्टैक मशीन|स्टैक-आधारित हैं) के विपरीत, लुआ वीएम रजिस्टर मशीन-आधारित है, और इसलिए वास्तविक हार्डवेयर डिज़ाइन के अधिक निकट है। रजिस्टर आर्किटेक्चर दोनों मानों की अत्यधिक प्रतिलिपि से बचाता है और प्रति कार्य निर्देशों की कुल संख्या को कम करता है। लुआ 5 की वर्चुअल मशीन विस्तृत उपयोग के लिए पहले रजिस्टर-आधारित शुद्ध वीएम में से है।[13] पैरेट आभासी मशीन और एंड्राइड (ऑपरेटिंग प्रणाली) का दल्विक (सॉफ़्टवेयर) दो अन्य प्रसिद्ध रजिस्टर-आधारित वीएम हैं। पीसीस्कीम का वीएम भी रजिस्टर-आधारित था।[14]

यह उदाहरण ऊपर परिभाषित फैक्टोरियल फ़ंक्शन की बायटेकोड सूची है (जैसा कि luac 5.1 संकलक द्वारा दिखाया गया है):[15]

function <factorial.lua:1,7> (9 instructions, 36 bytes at 0x8063c60)
1 param, 6 slots, 0 upvalues, 6 locals, 2 constants, 0 functions
	1	[2]	LOADK    	1 -1	; 1
	2	[3]	LOADK    	2 -2	; 2
	3	[3]	MOVE     	3 0
	4	[3]	LOADK    	4 -1	; 1
	5	[3]	FORPREP  	2 1	; to 7
	6	[4]	MUL      	1 1 5
	7	[3]	FORLOOP  	2 -2	; to 6
	8	[6]	RETURN   	1 2
	9	[7]	RETURN   	0 1

सी एपीआई (एप्लिकेशन प्रोग्रामिंग अंतरफलक)

लुआ को अन्य अनुप्रयोगों में अंतःस्थापित करने का विचार है, और इस उद्देश्य के लिए सी (प्रोग्रामिंग भाषा) एप्लीकेशन प्रोग्रामिंग अंतरफलक प्रदान करता है। एपीआई को दो भागों में बांटा गया है: लुआ कोर और लुआ सहायक पुस्तकालय।[16] लुआ एपीआई का डिज़ाइन, पायथन (प्रोग्रामिंग लैंग्वेज) के एपीआई के विपरीत, C कोड में मैन्युअल संदर्भ गिनती की आवश्यकता को समाप्त करता है। एपीआई, भाषा के प्रकार, न्यूनतर है। उन्नत कार्यक्षमता सहायक पुस्तकालय द्वारा प्रदान की जाती है, जिसमें बड़े पैमाने पर पूर्वप्रक्रमक मैक्रो (कंप्यूटर विज्ञान) होते हैं जो जटिल तालिका संचालन में सहायता करते हैं।

लुआ सी एपीआई स्टैक (डेटा संरचना) आधारित है। लुआ स्टैक से सबसे सरल सी डेटा प्रकारों (पूर्णांक, फ़्लोट्स, आदि) को पुश और पॉप करने के लिए फ़ंक्शन प्रदान करता है, साथ ही स्टैक के माध्यम से तालिकाओं में हेरफेर करने के लिए फ़ंक्शन प्रदान करता है। लुआ स्टैक पारंपरिक स्टैक से कुछ अलग है; स्टैक को सीधे अनुक्रमित किया जा सकता है, उदाहरण के लिए, नकारात्मक सूचकांक स्टैक के शीर्ष से ऑफ़सेट का संकेत देते हैं। उदाहरण के लिए, -1 सबसे ऊपर है (सबसे नवीनतम बढाया गया मान), चूंकि सकारात्मक सूचकांक नीचे से ऑफसेट (सबसे पुराना मान) निरुपित करते हैं। स्टैक का उपयोग करके सी और लुआ कार्यों के बीच मार्शलिंग (कंप्यूटर विज्ञान) डेटा भी किया जाता है। लुआ फ़ंक्शन को कॉल करने के लिए, तर्कों को स्टैक पर धकेल दिया जाता है, और फिर lua_call वास्तविक फ़ंक्शन को कॉल करने के लिए उपयोग किया जाता है। लुआ से सीधे बुलाए जाने वाले सी फ़ंक्शन को लिखते समय, स्टैक से तर्क पढ़े जाते हैं।

यहाँ C से Lua फ़ंक्शन को कॉल करने का उदाहरण दिया गया है:

#include <stdio.h>
#include <lua.h> // Lua main library (lua_*)
#include <lauxlib.h> // Lua auxiliary library (luaL_*)

int main(void)
{
    // create a Lua state
    lua_State *L = luaL_newstate();

    // load and execute a string
    if (luaL_dostring(L, "function foo (x,y) return x+y end")) {
        lua_close(L);
        return -1;
    }

    // push value of global "foo" (the function defined above)
    // to the stack, followed by integers 5 and 3
    lua_getglobal(L, "foo");
    lua_pushinteger(L, 5);
    lua_pushinteger(L, 3);
    lua_call(L, 2, 1); // call a function with two arguments and one return value
    printf("Result: %d\n", lua_tointeger(L, -1)); // print integer value of item at stack top
    lua_pop(L, 1); // return stack to original state
    lua_close(L); // close Lua state
    return 0;
}

यह उदाहरण चलाने देता है:

$ cc -o example example.c -llua
$ ./example
Result: 8

सी एपीआई लुआ स्टैक में विभिन्न छद्म-सूचकांकों पर स्थित कुछ विशेष टेबल भी प्रदान करता है। पर LUA_GLOBALSINDEX लुआ 5.2 से पहले[17] वैश्विक तालिका है, _G लुआ के अन्दर से, जो मुख्य नामस्थान है। LUA_REGISTRYINDEX पर स्थित रजिस्ट्री भी है जहां C प्रोग्राम बाद में पुनर्प्राप्ति के लिए लुआ मान संग्रहीत कर सकते हैं।

मॉड्यूल


मानक पुस्तकालय (कोर) मॉड्यूल के अलावा लुआ एपीआई का उपयोग करके एक्सटेंशन लिखना संभव है। विस्तार मॉड्यूल साझा वस्तुएं हैं जिनका उपयोग लुआ लिपियों को मूल सुविधाएं प्रदान करके दुभाषिया की कार्यक्षमता बढ़ाने के लिए किया जा सकता है। लुआ स्क्रिप्ट require एक्सटेंशन मॉड्यूल का उपयोग करके लोड कर सकती हैं,[16] ठीक उसी प्रकार जैसे लुआ में ही लिखे मॉड्यूल, या package.loadlib.[18] जब सी लाइब्रेरी को require("foo") के माध्यम से लोड किया जाता है, तो लुआ फलन luaopen_foo की तलाश करेंगे और इसे कॉल करें, जो लुआ से कॉल करने योग्य किसी भी सी फ़ंक्शन के रूप में कार्य करता है और सामान्यतः विधियों से भरी तालिका देता है। सीपीएएन, रूबीजम्स और पायथन अंडे की भावना में लुआरॉक्स नामक पैकेज प्रबंधन प्रणाली के माध्यम से चट्टानों के रूप में जाने वाले मॉड्यूल का बढ़ता हुआ संग्रह उपलब्ध है।[19] अन्य स्क्रिप्टिंग भाषाओं सहित अधिकांश लोकप्रिय प्रोग्रामिंग भाषाओं के लिए पूर्व लिखित लुआ भाषा बंधन उपस्थित है।[20] सी ++ के लिए, कई टेम्पलेट-आधारित दृष्टिकोण और कुछ स्वचालित बाध्यकारी जेनरेटर हैं।

अनुप्रयोग

वीडियो गेम के विकास में, वीडियो गेम प्रोग्रामर # स्क्रिप्टर द्वारा लुआ को व्यापक रूप से एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, मुख्य रूप से एम्बेड करने की कथित सहजता, तेजी से निष्पादन और लघु सीखने की अवस्था के कारण।[21] लुआ का उपयोग करने वाले उल्लेखनीय खेलों में शामिल हैं रोबोक्स,[22] गैरी का मॉड, वारक्राफ्ट की दुनिया, पे डे 2, फैंटसी स्टार ऑनलाइन 2, डोटा 2, एंग्री बर्ड्स स्पेस,[23] क्राइसिस (वीडियो गेम),[24] गंभीर प्रयास। कुछ गेम जो मूल रूप से लुआ प्रोग्रामिंग या स्क्रिप्टिंग का समर्थन नहीं करते हैं, इस कार्यक्षमता को मॉड्स द्वारा जोड़ा जाता है, जैसे कि कंप्यूटरक्राफ्ट माइनक्राफ्ट के लिए करता है। इसके अलावा, Lua का उपयोग गैर-वीडियो गेम सॉफ़्टवेयर में भी किया जाता है, जैसे कि एडोब लाइटरूम, Moho (सॉफ़्टवेयर), आईक्लोन, एयरोस्पाइक (डेटाबेस) और फ्रीबीएसडी और नेटबीएसडी में कुछ सिस्टम सॉफ़्टवेयर, और मीडियाविकि पर टेम्पलेट स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है। स्क्रिबंटो एक्सटेंशन।[25] 2003 में, GameDev.net द्वारा किए गए एक सर्वेक्षण से पता चला कि लुआ गेम प्रोग्रामिंग के लिए सबसे लोकप्रिय स्क्रिप्टिंग भाषा थी।[26] 12 जनवरी 2012 को, लुआ को प्रोग्रामिंग टूल्स श्रेणी में पत्रिका गेम डेवलपर (पत्रिका) से फ्रंट लाइन अवॉर्ड 2011 के विजेता के रूप में घोषित किया गया था।[27] बड़ी संख्या में गैर-गेम एप्लिकेशन भी एक्स्टेंसिबिलिटी के लिए लुआ का उपयोग करते हैं, जैसे कि लुआटेक्स, टीएक्स टाइप-सेटिंग भाषा का कार्यान्वयन, रेडिस, एक की-वैल्यू डेटाबेस, नव के, एक टेक्स्ट एडिटर, नगनेक्स, एक वेब सर्वर और वायरशार्क , एक नेटवर्क पैकेट विश्लेषक।

स्क्रिबंटो एक्सटेंशन के माध्यम से, Lua मीडियाविकि सॉफ़्टवेयर में सर्वर-साइड स्क्रिप्टिंग भाषा के रूप में उपलब्ध है जो विकिपीडिया और अन्य विकी को शक्ति प्रदान करता है।[28] इसके उपयोगों में विकिडेटा से लेखों में डेटा के एकीकरण की अनुमति देना शामिल है,[29] और शक्ति देना automated taxobox system.

व्युत्पन्न भाषाएँ


बोलियां

  • लुजिट
  • रोबोक्स से Luau, धीरे-धीरे टाइपिंग और एर्गोनोमिक परिवर्धन के साथ Lua 5.1 भाषा।[35]
  • वैकल्पिक स्थिर टाइपिंग के साथ रवि, JIT-सक्षम Lua 5.3 भाषा। जेआईटी प्रकार की जानकारी द्वारा निर्देशित है।[36]
  • शाइन, लुआजिट का एक फोर्क जिसमें मॉड्यूल सिस्टम और मैक्रो सिस्टम समेत कई एक्सटेंशन हैं।[37]

इसके अलावा, लुआ उपयोगकर्ता समुदाय संदर्भ सी कार्यान्वयन के शीर्ष पर कुछ पावर पैच प्रदान करता है।[38]


यह भी देखें

संदर्भ

  1. 1.0 1.1 Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Filho, Waldemar Celes (June 1996). "लुआ-एक एक्स्टेंसिबल एक्सटेंशन लैंग्वेज". Software: Practice and Experience. 26 (6): 635–652. doi:10.1002/(SICI)1097-024X(199606)26:6<635::AID-SPE26>3.0.CO;2-P. Retrieved 24 October 2015.
  2. 2.0 2.1 2.2 "लुआ के बारे में". Lua.org. Retrieved 2011-08-11.
  3. Yuri Takhteyev (21 April 2013). "ब्राजील से विकिपीडिया तक". Foreign Affairs. Retrieved 25 April 2013.
  4. 4.0 4.1 4.2 4.3 Ierusalimschy, R.; Figueiredo, L. H.; Celes, W. (2007). "The evolution of Lua" (PDF). प्रक्रिया। एसीएम एचओपीएल III का. pp. 2–1–2–26. doi:10.1145/1238844.1238846. ISBN 978-1-59593-766-7. S2CID 475143.[dead link]
  5. "एक विस्तार भाषा का विकास: लुआ का इतिहास". 2001. Retrieved 2008-12-18.
  6. Figueiredo, L. H.; Ierusalimschy, R.; Celes, W. (December 1996). "लुआ: एक एक्स्टेंसिबल एंबेडेड लैंग्वेज। कुछ मेटामैकेनिज्म कई सुविधाओं को बदल देते हैं". Dr. Dobb's Journal. Vol. 21, no. 12. pp. 26–33.
  7. "लुआ में प्रोग्रामिंग : 1".
  8. "लुआ 5.1 संदर्भ मैनुअल". 2014. Retrieved 2014-02-27.
  9. "लुआ 5.1 संदर्भ मैनुअल". 2012. Retrieved 2012-10-16.
  10. "लुआ 5.1 स्रोत कोड". 2006. Retrieved 2011-03-24.</रेफरी>
  11. "लुआ में प्रोग्रामिंग: 16.3". www.lua.org. Retrieved 2021-09-16.
  12. "लुआ-उपयोगकर्ता विकी: मेटामेथोड्स ट्यूटोरियल". lua-users.org. Retrieved 2021-09-16.
  13. Ierusalimschy, R.; Figueiredo, L. H.; Celes, W. (2005). "लुआ 5.0 का कार्यान्वयन". J. Of Universal Comp. Sci. 11 (7): 1159–1176.
  14. Texas Instruments (1990). पीसी योजना: उपयोगकर्ता गाइड और भाषा संदर्भ मैनुअल, व्यापार संस्करण. ISBN 0-262-70040-9.
  15. Kein-Hong Man (2006). "लुआ 5.1 वीएम निर्देशों का नो-फ्रिल्स परिचय" (PDF).
  16. 16.0 16.1 "लुआ 5.2 संदर्भ मैनुअल". Lua.org. Retrieved 2012-10-23.
  17. "एपीआई में बदलाव". Lua 5.2 Reference Manual. Lua.org. Retrieved 2014-05-09.
  18. "लुआ 5.4 संदर्भ मैनुअल". www.lua.org. Retrieved 2022-06-01.
  19. "लुआ रॉक्स". लुआ रॉक्स wiki. Retrieved 2009-05-24.
  20. "लुआ के लिए बाध्यकारी कोड". Lua-users wiki. Retrieved 2009-05-24.
  21. "लुआ को गेम लैंग्वेज क्यों माना जाता है?". Archived from the original on 20 August 2013. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  22. "लुआउ क्यों?". Luau (in English). Retrieved 2022-03-23.
  23. "टीआईएल एंग्री बर्ड्स को लुआ - पोस्ट - इम्गुर में कोडित किया गया था". Retrieved 23 March 2022.
  24. "क्राइसिस सर्वर-साइड मोडिंग का परिचय". Retrieved 23 March 2022.
  25. "लुआ कार्य करता है". wow.gamepedia.com (in English). Retrieved 2021-03-01.
  26. "मतदान के परिणाम". Archived from the original on 7 December 2003. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  27. "फ्रंट लाइन पुरस्कार विजेताओं की घोषणा की". Archived from the original on 15 June 2013. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  28. "एक्सटेंशन: स्क्रिप्ट - मीडियाविकि". MediaWiki.org. Retrieved 21 February 2019.
  29. "विकिडाटा:इन्फोबॉक्स ट्यूटोरियल - विकिडाटा". www.wikidata.org. Retrieved 2018-12-21.
  30. "भाषा गाइड - मूनस्क्रिप्ट 0.5.0". moonscript.org. Retrieved 2020-09-25.
  31. leaf (2020-09-23), leafo/moonscript, retrieved 2020-09-25
  32. 32.0 32.1 Andre Alves Garzia. "लुआ को संकलित करने वाली भाषाएँ". AndreGarzia.com. Retrieved 25 September 2020.
  33. "अर्न: लुआ | के लिए एक लिस्प कार्यान्वयन अर्न". urn-lang.com. Retrieved 2021-01-12.
  34. "एमुलेट एमएल". amulet.works (in English). Retrieved 2021-01-12.
  35. "जाल". Roblox.GitHub.io (in English).
  36. "रवि प्रोग्रामिंग लैंग्वेज". GitHub.
  37. Hundt, Richard (2021-04-22). "रिचर्डहंट/शाइन". GitHub.
  38. "लुआ पावर पैच". lua-users.org.


अग्रिम पठन








बाहरी संबंध