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

From Vigyanwiki
No edit summary
No edit summary
Line 13: Line 13:
}}</nowiki>
}}</nowiki>


लुआ ({{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>
लुआ ({{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>


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


== इतिहास ==
== इतिहास ==
Line 187: Line 187:
array[0] = "z"                  -- Zero is a legal index.
array[0] = "z"                  -- Zero is a legal index.
print(#array)                    -- Still prints 4, as Lua arrays are 1-based.
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">
</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">
ExampleTable =
ExampleTable =
{
{
Line 325: Line 325:
print(vec:magnitude())          -- Call a method (output: 1)
print(vec:magnitude())          -- Call a method (output: 1)
print(vec.x)                    -- Access a member variable (output: 0)
print(vec.x)                    -- Access a member variable (output: 0)
</syntaxhighlight>'''वंशानुक्रम'''
</syntaxhighlight>


लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है। इस उदाहरण में, हम वैक्टर को एक व्युत्पन्न वर्ग में उनके मूल्यों को एक स्थिरांक से गुणा करने की अनुमति देते हैं।<syntaxhighlight lang="d">
 
'''वंशानुक्रम'''
 
 
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है। इस उदाहरण में, हम वैक्टर को एक व्युत्पन्न वर्ग में उनके मानों को एक स्थिरांक से गुणा करने की अनुमति देते हैं।<syntaxhighlight lang="d">
local Vector = {}
local Vector = {}
Vector.__index = Vector
Vector.__index = Vector
Line 367: Line 371:
लुआ प्रोग्राम सीधे टेक्स्ट वाली लुआ फ़ाइल से भाषा की व्याख्या नहीं करते हैं, लेकिन बायटेकोड में संकलित किया जाता है, जिसे बाद में लुआ [[आभासी मशीन]] पर चलाया जाता है। संकलन प्रक्रिया आमतौर पर उपयोगकर्ता के लिए अदृश्य होती है और रन टाइम (प्रोग्राम जीवनचक्र चरण) के दौरान की जाती है, खासकर जब एक जेआईटी संकलित का उपयोग किया जाता है, लेकिन लोडिंग प्रदर्शन को बढ़ाने या मेजबान पर्यावरण के स्मृति पदचिह्न को कम करने के लिए इसे ऑफ़लाइन किया जा सकता है। स्ट्रिंग लाइब्रेरी से <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 (ऑपरेटिंग सिस्टम)|एंड्राइड (ऑपरेटिंग सिस्टम)]] का दल्विक (सॉफ़्टवेयर) दो अन्य प्रसिद्ध रजिस्टर-आधारित वीएम हैं। पीसीस्कीम का वीएम भी रजिस्टर-आधारित था।<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> <syntaxhighlight lang="d">
यह उदाहरण ऊपर परिभाषित फैक्टोरियल फ़ंक्शन की बायटेकोड सूची है (जैसा कि <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">
Line 383: Line 387:
</syntaxhighlight>
</syntaxhighlight>


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


यहाँ 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 मान संग्रहीत कर सकते हैं।
मानक पुस्तकालय (कोर) मॉड्यूल के अलावा लुआ एपीआई का उपयोग करके एक्सटेंशन लिखना संभव है। विस्तार मॉड्यूल साझा वस्तुएं हैं जिनका उपयोग लुआ लिपियों को मूल सुविधाएं प्रदान करके दुभाषिया की कार्यक्षमता बढ़ाने के लिए किया जा सकता है। लुआ स्क्रिप्ट <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> सी ++ के लिए, कई टेम्पलेट-आधारित दृष्टिकोण और कुछ स्वचालित बाध्यकारी जेनरेटर हैं।<pre>


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> सी ++ के लिए, कई टेम्पलेट-आधारित दृष्टिकोण और कुछ स्वचालित बाध्यकारी जेनरेटर हैं।
== अनुप्रयोग ==
{{main|लुआ का उपयोग करने वाले अनुप्रयोगों की सूची}}


== अनुप्रयोग ==
{{main|List of applications using Lua}}
वीडियो गेम के विकास में, वीडियो गेम प्रोग्रामर # स्क्रिप्टर द्वारा लुआ को व्यापक रूप से एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, मुख्य रूप से एम्बेड करने की कथित सहजता, तेजी से निष्पादन और लघु [[सीखने की अवस्था]] के कारण।<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]], [[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>
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>
Line 478: Line 479:
* {{cite journal|url=https://cacm.acm.org/magazines/2018/11/232214-a-look-at-the-design-of-lua|title=A Look at the Design of Lua|last1=Ierusalimschy|first1=Roberto|last2=de Figueiredo|first2=Luiz Henrique|last3=Celes|first3=Waldemar|journal=[[Communications of the ACM]]|volume=61|issue=11|pages=114–123|date=November 2018|doi=10.1145/3186277|s2cid=53114923}}{{Dead link|date=June 2020 |bot=InternetArchiveBot |fix-attempted=yes }}
* {{cite journal|url=https://cacm.acm.org/magazines/2018/11/232214-a-look-at-the-design-of-lua|title=A Look at the Design of Lua|last1=Ierusalimschy|first1=Roberto|last2=de Figueiredo|first2=Luiz Henrique|last3=Celes|first3=Waldemar|journal=[[Communications of the ACM]]|volume=61|issue=11|pages=114–123|date=November 2018|doi=10.1145/3186277|s2cid=53114923}}{{Dead link|date=June 2020 |bot=InternetArchiveBot |fix-attempted=yes }}
* [https://www.lua.org/papers.html Lua papers and theses]
* [https://www.lua.org/papers.html Lua papers and theses]




Line 536: Line 536:
{{Programming languages}}
{{Programming languages}}


[[index.php?title=Category:लुआ (प्रोग्रामिंग भाषा)| ]]





Revision as of 10:21, 14 February 2023

हांग और कमजोर टाइपिंग, बतख टाइपिंग | कार्यान्वयन = Lua, LuaJIT, LuaVela, MoonSharp, Luvit, LuaRT, Luau | प्रोग्रामिंग_भाषा = एएनएसआई सी | बोलियाँ = Metalua, आइडल, जीएसएल शेल | impact_by = C++, CLU (प्रोग्रामिंग भाषा), Modula-2, योजना (प्रोग्रामिंग भाषा), SNOBOL | प्रभावित = GameMonkey Script, आयो (प्रोग्रामिंग भाषा), जावास्क्रिप्ट, जूलिया (प्रोग्रामिंग भाषा), मिनी डी, लाल (प्रोग्रामिंग भाषा), रिंग_ (प्रोग्रामिंग_भाषा),[1] रूबी (प्रोग्रामिंग भाषा), गिलहरी (प्रोग्रामिंग भाषा), मूनस्क्रिप्ट, सी-- | ऑपरेटिंग_सिस्टम = क्रॉस-प्लेटफॉर्म | लाइसेंस = मेरा लाइसेंस | वेबसाइट = | फ़ाइल एक्सट = .lua | विकिबुक्स = }}

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

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

इतिहास

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

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

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

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

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

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

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

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

सुविधाएँ

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

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

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

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

सिंटेक्स

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

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.

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

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 मान से पहले होता हैं (अर्थात, यह सरणी के अंत के रूप में ऐसे किसी भी शून्य मान पर विचार कर सकता है)।[10]

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

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

मेटाटेबल्स

एक्स्टेंसिबल शब्दार्थ लुआ की एक प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण एक "अनंत" तालिका प्रदर्शित करता है। किसी भी 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 या तो एक फलन या एक टेबल हो सकता है।[12] ऑपरेटर ओवरलोडिंग भी की जा सकती है; लुआ मेटासूचियाँ में __add, __sub आदि जैसे तत्व हो सकते हैं।[13]


कार्यान्वयन

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

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

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

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

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

लुआ को अन्य अनुप्रयोगों में अंतःस्थापित करने का इरादा है, और इस उद्देश्य के लिए सी (प्रोग्रामिंग भाषा) एप्लीकेशन प्रोग्रामिंग अंतरफलक प्रदान करता है। एपीआई को दो भागों में बांटा गया है: लुआ कोर और लुआ सहायक पुस्तकालय।[17] लुआ एपीआई का डिज़ाइन, पायथन (प्रोग्रामिंग लैंग्वेज) के एपीआई के विपरीत, 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 से पहले[18] वैश्विक तालिका है, _G लुआ के भीतर से, जो मुख्य नामस्थान है। LUA_REGISTRYINDEX पर स्थित एक रजिस्ट्री भी है जहां C प्रोग्राम बाद में पुनर्प्राप्ति के लिए लुआ मान संग्रहीत कर सकते हैं।

मॉड्यूल

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


अनुप्रयोग

वीडियो गेम के विकास में, वीडियो गेम प्रोग्रामर # स्क्रिप्टर द्वारा लुआ को व्यापक रूप से एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है, मुख्य रूप से एम्बेड करने की कथित सहजता, तेजी से निष्पादन और लघु सीखने की अवस्था के कारण।[22] लुआ का उपयोग करने वाले उल्लेखनीय खेलों में शामिल हैं रोबोक्स,[23] गैरी का मॉड, वारक्राफ्ट की दुनिया, Payday 2, फैंटसी स्टार ऑनलाइन 2, Dota 2, एंग्री बर्ड्स स्पेस,[24] क्राइसिस (वीडियो गेम),[25] गंभीर प्रयास। कुछ गेम जो मूल रूप से लुआ प्रोग्रामिंग या स्क्रिप्टिंग का समर्थन नहीं करते हैं, इस कार्यक्षमता को मॉड्स द्वारा जोड़ा जाता है, जैसे कि कंप्यूटरक्राफ्ट Minecraft के लिए करता है। इसके अलावा, Lua का उपयोग गैर-वीडियो गेम सॉफ़्टवेयर में भी किया जाता है, जैसे कि Adobe Lightroom, Moho (सॉफ़्टवेयर), iClone, Aerospike (डेटाबेस) और FreeBSD और NetBSD में कुछ सिस्टम सॉफ़्टवेयर, और MediaWiki पर टेम्पलेट स्क्रिप्टिंग भाषा के रूप में उपयोग किया जाता है। स्क्रिबंटो एक्सटेंशन।[26] 2003 में, GameDev.net द्वारा किए गए एक सर्वेक्षण से पता चला कि लुआ गेम प्रोग्रामिंग के लिए सबसे लोकप्रिय स्क्रिप्टिंग भाषा थी।[27] 12 जनवरी 2012 को, लुआ को प्रोग्रामिंग टूल्स श्रेणी में पत्रिका गेम डेवलपर (पत्रिका) से फ्रंट लाइन अवॉर्ड 2011 के विजेता के रूप में घोषित किया गया था।[28] बड़ी संख्या में गैर-गेम एप्लिकेशन भी एक्स्टेंसिबिलिटी के लिए लुआ का उपयोग करते हैं, जैसे कि लुआटेक्स, टीएक्स टाइप-सेटिंग भाषा का कार्यान्वयन, रेडिस, एक की-वैल्यू डेटाबेस, नव के, एक टेक्स्ट एडिटर, नगनेक्स, एक वेब सर्वर और वायरशार्क , एक नेटवर्क पैकेट विश्लेषक। Scribunto एक्सटेंशन के माध्यम से, Lua MediaWiki सॉफ़्टवेयर में सर्वर-साइड स्क्रिप्टिंग भाषा के रूप में उपलब्ध है जो विकिपीडिया और अन्य विकी को शक्ति प्रदान करता है।[29] इसके उपयोगों में विकिडेटा से लेखों में डेटा के एकीकरण की अनुमति देना शामिल है,[30] और शक्ति देना automated taxobox system.

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

=== लुआ === को संकलित करने वाली भाषाएं * मूनस्क्रिप्ट एक गतिशील प्रोग्रामिंग भाषा है, कॉफीस्क्रिप्ट से प्रेरित व्हॉट्सएप चरित्र-संवेदनशील स्क्रिप्टिंग भाषा है, जिसे लुआ में संकलित किया गया है। इसका मतलब है कि उपयोग करने के बजाय do तथा end (या { तथा }) कोड के अनुभागों को परिसीमित करने के लिए यह लाइन ब्रेक (कंप्यूटिंग) और इंडेंटेशन शैली का उपयोग करता है।[31][32][33] मूनस्क्रिप्ट का एक उल्लेखनीय उपयोग एक वीडियो गेम वितरण वेबसाइट Itch.io है। * Haxe Lua लक्ष्य के संकलन का समर्थन करता है, Lua 5.1-5.3 के साथ-साथ LuaJIT 2.0 और 2.1 का समर्थन करता है। * फेनेल, एक लिस्प बोली जो लुआ को लक्षित करती है।[33]* अर्न, एक लिस्प (प्रोग्रामिंग भाषा) बोली जो लुआ पर बनी है।[34] * एमुलेट, एक एमएल (प्रोग्रामिंग भाषा) जैसी फंक्शनल प्रोग्रामिंग, जिसका कंपाइलर लुआ फाइलों को आउटपुट करता है।[35]

बोलियां

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

यह भी देखें

* प्रोग्रामिंग भाषाओं की तुलना

संदर्भ

  1. Ring Team (5 December 2017). "रिंग प्रोग्रामिंग भाषा और अन्य भाषाएँ". ring-lang.net.
  2. 2.0 2.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.
  3. 3.0 3.1 3.2 "लुआ के बारे में". Lua.org. Retrieved 2011-08-11.
  4. Yuri Takhteyev (21 April 2013). "ब्राजील से विकिपीडिया तक". Foreign Affairs. Retrieved 25 April 2013.
  5. 5.0 5.1 5.2 5.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]
  6. "एक विस्तार भाषा का विकास: लुआ का इतिहास". 2001. Retrieved 2008-12-18.
  7. Figueiredo, L. H.; Ierusalimschy, R.; Celes, W. (December 1996). "लुआ: एक एक्स्टेंसिबल एंबेडेड लैंग्वेज। कुछ मेटामैकेनिज्म कई सुविधाओं को बदल देते हैं". Dr. Dobb's Journal. Vol. 21, no. 12. pp. 26–33.
  8. "लुआ में प्रोग्रामिंग : 1".
  9. "लुआ 5.1 संदर्भ मैनुअल". 2014. Retrieved 2014-02-27.
  10. "लुआ 5.1 संदर्भ मैनुअल". 2012. Retrieved 2012-10-16.
  11. "लुआ 5.1 स्रोत कोड". 2006. Retrieved 2011-03-24.</रेफरी>

    मेटाटेबल्स

    एक्स्टेंसिबल शब्दार्थ लुआ की एक प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण एक अनंत तालिका प्रदर्शित करता है। किसी के लिए n, fibs[n] दे देंगे nगतिशील प्रोग्रामिंग और memoization का उपयोग करते हुए -वां फाइबोनैचि संख्या। <वाक्यविन्यास लैंग = लुआ> तंतु = {1, 1} -- तंतु [1] और तंतु [2] के लिए प्रारंभिक मूल्य। सेटमेटेटेबल (फ़ाइब, { __index = function(values, n) --__index लुआ द्वारा पूर्वनिर्धारित एक फ़ंक्शन है, इसे कहा जाता है अगर कुंजी एन मौजूद नहीं है। मान [n] = मान [n - 1] + मान [n - 2] - तंतुओं की गणना करें और याद रखें [n]। वापसी मूल्य [एन] समाप्त }) </वाक्यविन्यास हाइलाइट>

    वस्तु-उन्मुख प्रोग्रामिंग

    हालांकि लुआ में कक्षा (कंप्यूटर विज्ञान) की एक अंतर्निहित अवधारणा नहीं है, वस्तु-उन्मुख प्रोग्रामिंग को कार्यों और तालिकाओं का उपयोग करके अनुकरण किया जा सकता है। टेबल में मेथड्स और फील्ड्स डालकर ऑब्जेक्ट बनाया जाता है। इनहेरिटेंस (वस्तु उन्मुख कार्यकर्म) (सिंगल और मल्टीपल दोनों) को मेटाटेबल्स के साथ लागू किया जा सकता है, गैर-मौजूद तरीकों और फ़ील्ड्स को पैरेंट ऑब्जेक्ट के रूप में प्रस्तुत किया जा सकता है। इन तकनीकों के साथ वर्ग जैसी कोई अवधारणा नहीं है; बल्कि, स्व (प्रोग्रामिंग भाषा) या जावास्क्रिप्ट के समान, प्रोटोटाइप-आधारित प्रोग्रामिंग का उपयोग किया जाता है। नई वस्तुओं को या तो फ़ैक्टरी विधि पैटर्न (जो स्क्रैच से नई वस्तुओं का निर्माण करता है) या किसी मौजूदा वस्तु का क्लोन बनाकर बनाया जाता है। एक बुनियादी वेक्टर (ज्यामिति) वस्तु बनाना: <वाक्यविन्यास लैंग = लुआ> स्थानीय वेक्टर = {} स्थानीय वेक्टरमेटा = {__इंडेक्स = वेक्टर} फ़ंक्शन वेक्टर.न्यू (एक्स, वाई, जेड) - निर्माता रिटर्न सेटमेटेबल ({x = x, y = y, z = z}, वेक्टरमेटा) समाप्त समारोह वेक्टर.परिमाण (स्वयं) - एक और तरीका वापसी गणित.sqrt(self.x^2 + self.y^2 + self.z^2) समाप्त स्थानीय vec = वेक्टर.नया (0, 1, 0) - एक वेक्टर बनाएं प्रिंट (vec.magnitude (vec)) - एक विधि कॉल करें (आउटपुट: 1) प्रिंट (vec.x) - एक सदस्य चर तक पहुँचें (आउटपुट: 0) </वाक्यविन्यास हाइलाइट> यहां, setmetatable लुआ को एक तत्व की तलाश करने के लिए कहता है Vector तालिका में यदि यह मौजूद नहीं है vec मेज़। vec.magnitude, जो बराबर है vec["magnitude"], पहले में दिखता है vec के लिए तालिका magnitude तत्व। vec }} टेबल में a नहीं है magnitude तत्व, लेकिन इसके मेटाटेबल प्रतिनिधि Vector के लिए तालिका magnitude तत्व जब यह में नहीं पाया जाता है vec मेज़। लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ सिंटैक्टिक चीनी प्रदान करता है। एक प्रोटोटाइप टेबल के अंदर मेथड (कंप्यूटर साइंस) घोषित करने के लिए, कोई भी उपयोग कर सकता है function table:func(args), जो बराबर है function table.func(self, args). कॉलिंग क्लास के तरीके भी कोलन का उपयोग करते हैं: object:func(args) के बराबर है object.func(object, args). इसे ध्यान में रखते हुए, यहाँ एक संगत वर्ग है : सिंटैक्टिक चीनी: <वाक्यविन्यास लैंग = लुआ> स्थानीय वेक्टर = {} वेक्टर.__इंडेक्स = वेक्टर फ़ंक्शन वेक्टर: नया (x, y, z) - कंस्ट्रक्टर - चूंकि फ़ंक्शन परिभाषा एक कोलन का उपयोग करती है, - इसका पहला तर्क स्वयं है जो संदर्भित करता है - वेक्टर के लिए रिटर्न सेटमेटेबल ({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>Roberto Ierusalimschy. लुआ में प्रोग्रामिंग, चौथा संस्करण. p. 165.
  12. "लुआ में प्रोग्रामिंग: 16.3". www.lua.org. Retrieved 2021-09-16.
  13. "लुआ-उपयोगकर्ता विकी: मेटामेथोड्स ट्यूटोरियल". lua-users.org. Retrieved 2021-09-16.
  14. Ierusalimschy, R.; Figueiredo, L. H.; Celes, W. (2005). "लुआ 5.0 का कार्यान्वयन". J. Of Universal Comp. Sci. 11 (7): 1159–1176.
  15. Texas Instruments (1990). पीसी योजना: उपयोगकर्ता गाइड और भाषा संदर्भ मैनुअल, व्यापार संस्करण. ISBN 0-262-70040-9.
  16. Kein-Hong Man (2006). "लुआ 5.1 वीएम निर्देशों का नो-फ्रिल्स परिचय" (PDF).
  17. 17.0 17.1 "लुआ 5.2 संदर्भ मैनुअल". Lua.org. Retrieved 2012-10-23.
  18. "एपीआई में बदलाव". Lua 5.2 Reference Manual. Lua.org. Retrieved 2014-05-09.
  19. "लुआ 5.4 संदर्भ मैनुअल". www.lua.org. Retrieved 2022-06-01.
  20. "लुआ रॉक्स". लुआ रॉक्स wiki. Retrieved 2009-05-24.
  21. "लुआ के लिए बाध्यकारी कोड". Lua-users wiki. Retrieved 2009-05-24.
  22. "लुआ को गेम लैंग्वेज क्यों माना जाता है?". Archived from the original on 20 August 2013. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  23. "लुआउ क्यों?". Luau (in English). Retrieved 2022-03-23.
  24. "टीआईएल एंग्री बर्ड्स को लुआ - पोस्ट - इम्गुर में कोडित किया गया था". Retrieved 23 March 2022.
  25. "क्राइसिस सर्वर-साइड मोडिंग का परिचय". Retrieved 23 March 2022.
  26. "लुआ कार्य करता है". wow.gamepedia.com (in English). Retrieved 2021-03-01.
  27. "मतदान के परिणाम". Archived from the original on 7 December 2003. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  28. "फ्रंट लाइन पुरस्कार विजेताओं की घोषणा की". Archived from the original on 15 June 2013. Retrieved 2017-04-22.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  29. "एक्सटेंशन: स्क्रिप्ट - मीडियाविकि". MediaWiki.org. Retrieved 21 February 2019.
  30. "विकिडाटा:इन्फोबॉक्स ट्यूटोरियल - विकिडाटा". www.wikidata.org. Retrieved 2018-12-21.
  31. "भाषा गाइड - मूनस्क्रिप्ट 0.5.0". moonscript.org. Retrieved 2020-09-25.
  32. leaf (2020-09-23), leafo/moonscript, retrieved 2020-09-25
  33. 33.0 33.1 Andre Alves Garzia. "लुआ को संकलित करने वाली भाषाएँ". AndreGarzia.com. Retrieved 25 September 2020.
  34. "अर्न: लुआ | के लिए एक लिस्प कार्यान्वयन अर्न". urn-lang.com. Retrieved 2021-01-12.
  35. "एमुलेट एमएल". amulet.works (in English). Retrieved 2021-01-12.
  36. "जाल". Roblox.GitHub.io (in English).
  37. "रवि प्रोग्रामिंग लैंग्वेज". GitHub.
  38. Hundt, Richard (2021-04-22). "रिचर्डहंट/शाइन". GitHub.
  39. "लुआ पावर पैच". lua-users.org.

अग्रिम पठन

* Ierusalimschy, R. (2013). Programming in Lua (3rd ed.). Lua.org. ISBN 978-85-903798-5-0. (The 1st ed. is available online.) * Gutschmidt, T. (2003). Game Programming with Python, Lua, and Ruby. Course Technology PTR. ISBN 978-1-59200-077-7. * Schuytema, P.; Manyen, M. (2005). Game Development with Lua. Charles River Media. ISBN 978-1-58450-404-7. * Jung, K.; Brown, A. (2007). Beginning Lua Programming. Wrox Press. ISBN 978-0-470-06917-2. Archived from the original on 8 July 2018. Retrieved 7 July 2018. * Figueiredo, L. H.; Celes, W.; Ierusalimschy, R., eds. (2008). Lua Programming Gems. Lua.org. ISBN 978-85-903798-4-3. * Takhteyev, Yuri (2012). Coding Places: Software Practice in a South American City. The MIT Press. ISBN 978-0-262-01807-4. Archived from the original on 2012-11-02. Chapters 6 and 7 are dedicated to Lua, while others look at software in Brazil more broadly. * Varma, Jayant (2012). Learn Lua for iOS Game Development. Apress. ISBN 978-1-4302-4662-6. * Matheson, Ash (29 April 2003). "An Introduction to Lua". GameDev.net. Archived from the original on 18 December 2012. Retrieved 3 January 2013. * Fieldhouse, Keith (16 February 2006). "Introducing Lua". ONLamp.com. O'Reilly Media. Archived from the original on 12 March 2006. Retrieved 28 February 2006. * Streicher, Martin (28 April 2006). "Embeddable scripting with Lua". developerWorks. IBM. Archived from the original on 2 July 2009. Retrieved 7 July 2018. * Quigley, Joseph (1 June 2007). "A Look at Lua". Linux Journal. * Hamilton, Naomi (11 September 2008). "The A-Z of Programming Languages: Lua". Computerworld. IDG. Archived from the original on 8 July 2018. Retrieved 7 July 2018. Interview with Roberto Ierusalimschy. * Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (12 May 2011). "Passing a Language through the Eye of a Needle". ACM Queue. 9 (5): 20–29. doi:10.1145/1978862.1983083. S2CID 19484689. How the embeddability of Lua impacted its design. * Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (November 2018). "A Look at the Design of Lua". Communications of the ACM. 61 (11): 114–123. doi:10.1145/3186277. S2CID 53114923.[permanent dead link] * Lua papers and theses

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

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

बाहरी संबंध

* No URL found. Please specify a URL here or add one to Wikidata. * Lua Users, Community * Lua Forum * LuaDist * Lua Rocks - Package manager * Projects in Lua Template:Lua programming language