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

From Vigyanwiki
No edit summary
No edit summary
Line 181: Line 181:
</syntaxhighlight>सूचियाँ को स्वचालित रूप से एक संख्यात्मक कुंजी असाइन की जाती है, जिससे उन्हें [[सरणी डेटा प्रकार]] के रूप में उपयोग करने में सक्षम बनाया जाता है। पहला स्वचालित सूचकांक 0 के बजाय 1 है क्योंकि यह कई अन्य प्रोग्रामिंग भाषाओं के लिए है (हालांकि 0 के स्पष्ट सूचकांक की अनुमति है)।
</syntaxhighlight>सूचियाँ को स्वचालित रूप से एक संख्यात्मक कुंजी असाइन की जाती है, जिससे उन्हें [[सरणी डेटा प्रकार]] के रूप में उपयोग करने में सक्षम बनाया जाता है। पहला स्वचालित सूचकांक 0 के बजाय 1 है क्योंकि यह कई अन्य प्रोग्रामिंग भाषाओं के लिए है (हालांकि 0 के स्पष्ट सूचकांक की अनुमति है)।


एक संख्यात्मक कुंजी <code>1</code> एक स्ट्रिंग कुंजी से अलग है <code>"1"</code>.
एक संख्यात्मक कुंजी <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.
प्रिंट (सरणी [2]) - प्रिंट बी। लुआ में स्वचालित अनुक्रमण 1 से शुरू होता है।
array[0] = "z"                  -- Zero is a legal index.
प्रिंट (#array) - प्रिंट 4. # टेबल और स्ट्रिंग्स के लिए लंबाई ऑपरेटर है।
print(#array)                   -- Still prints 4, as Lua arrays are 1-based.
सरणी [0] = z - शून्य एक कानूनी सूचकांक है।
</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">
प्रिंट (# सरणी) - अभी भी 4 प्रिंट करता है, क्योंकि लुआ सरणियाँ 1-आधारित हैं।
ExampleTable =
</वाक्यविन्यास हाइलाइट>
 
एक टेबल की लंबाई <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 } };
   वापसी {x = x, y = y} - एक नई वस्तु (तालिका) बनाता है और वापस करता है
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. -->
सरणी = {प्वाइंट (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>[[गतिशील प्रोग्रामिंग]] और [[memoization]] का उपयोग करते हुए -वां [[फाइबोनैचि संख्या]]।
एक्स्टेंसिबल शब्दार्थ लुआ की एक प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण एक अनंत तालिका प्रदर्शित करता है। किसी के लिए <code>n</code>, <code>fibs[n]</code> दे देंगे <code>n</code>[[गतिशील प्रोग्रामिंग]] और [[memoization]] का उपयोग करते हुए -वां [[फाइबोनैचि संख्या]]।
<वाक्यविन्यास लैंग = लुआ>
<वाक्यविन्यास लैंग = लुआ>
Line 229: Line 217:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


Line 252: Line 240:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


यहां, {{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 |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}}<nowiki> }} टेबल में a नहीं है </nowiki>{{code |lang=lua|magnitude}} तत्व, लेकिन इसके मेटाटेबल प्रतिनिधि {{code |lang=lua|Vector}} के लिए तालिका {{code |lang=lua|magnitude}} तत्व जब यह में नहीं पाया जाता है {{code |lang=lua|vec}} मेज़।


लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ [[सिंटैक्टिक चीनी]] प्रदान करता है। एक प्रोटोटाइप टेबल के अंदर मेथड (कंप्यूटर साइंस) घोषित करने के लिए, कोई भी उपयोग कर सकता है {{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)}}.
लुआ ऑब्जेक्ट ओरिएंटेशन को सुविधाजनक बनाने के लिए कुछ [[सिंटैक्टिक चीनी]] प्रदान करता है। एक प्रोटोटाइप टेबल के अंदर मेथड (कंप्यूटर साइंस) घोषित करने के लिए, कोई भी उपयोग कर सकता है {{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)}}.
Line 279: Line 267:
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


==== वंशानुक्रम ====
====वंशानुक्रम====
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है।<ref>{{cite book|title=लुआ में प्रोग्रामिंग, चौथा संस्करण|page=165|author=Roberto Ierusalimschy}}</ref> इस उदाहरण में, हम वैक्टर को एक व्युत्पन्न वर्ग में उनके मूल्यों को एक स्थिरांक से गुणा करने की अनुमति देते हैं।
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है।<nowiki><ref></nowiki>{{cite book|title=लुआ में प्रोग्रामिंग, चौथा संस्करण|page=165|author=Roberto Ierusalimschy}}</ref>  
 
'''मेटाटेबल्स'''
 
एक्स्टेंसिबल शब्दार्थ लुआ की एक प्रमुख विशेषता है, और मेटाटेबल अवधारणा तालिकाओं के शक्तिशाली अनुकूलन की अनुमति देती है। निम्न उदाहरण एक "अनंत" तालिका प्रदर्शित करता है। किसी भी <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,
                                                  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
})
</syntaxhighlight>'''ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग'''
 
हालांकि लुआ में कक्षाओं की एक अंतर्निहित अवधारणा नहीं है, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को फ़ंक्शंस और तालिकाओं का उपयोग करके अनुकरण किया जा सकता है। टेबल में मेथड्स और फील्ड्स डालकर ऑब्जेक्ट बनाया जाता है। इनहेरिटेंस (सिंगल और मल्टीपल दोनों) को मेटाटेबल्स के साथ लागू किया जा सकता है, गैर-मौजूद तरीकों और फील्ड्स को पैरेंट ऑब्जेक्ट को सौंप दिया जाता है।
 
इन तकनीकों के साथ "वर्ग" जैसी कोई अवधारणा नहीं है; बल्कि, स्व या जावास्क्रिप्ट के समान प्रोटोटाइप का उपयोग किया जाता है। नई वस्तुओं को या तो फ़ैक्टरी विधि (जो स्क्रैच से नई वस्तुओं का निर्माण करती है) या किसी मौजूदा वस्तु का क्लोन बनाकर बनाई जाती है।
 
एक बुनियादी सदिश वस्तु बनाना:<syntaxhighlight lang="d">
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)
</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>function table:func(args)</code> का उपयोग कर सकता है, जो <code>function table.func(self, args)</code> के बराबर है। कॉलिंग क्लास के तरीके भी कोलन: <code>object:func(args)</code> का उपयोग करते हैं जो <code>object.func(object, args)</code> के बराबर है।
 
इसे ध्यान में रखते हुए, यहाँ एक संगत वर्ग है: वाक्यात्मक खंड:<syntaxhighlight lang="d">
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)
</syntaxhighlight>'''वंशानुक्रम'''
 
लुआ वर्ग विरासत देने के लिए लुआ मेटाटेबल्स का उपयोग करने का समर्थन करता है। इस उदाहरण में, हम वैक्टर को एक व्युत्पन्न वर्ग में उनके मूल्यों को एक स्थिरांक से गुणा करने की अनुमति देते हैं।


<वाक्यविन्यास लैंग = लुआ>
<वाक्यविन्यास लैंग = लुआ>

Revision as of 09:17, 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)

वंशानुक्रम

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

<वाक्यविन्यास लैंग = लुआ> स्थानीय वेक्टर = {} वेक्टर.__इंडेक्स = वेक्टर

फ़ंक्शन वेक्टर: नया (x, y, z) - कंस्ट्रक्टर

 - यहाँ, स्वयं का तात्पर्य किसी भी वर्ग के नए से है
 -- विधि जिसे हम कहते हैं। एक व्युत्पन्न वर्ग में, स्व-इच्छा
 - व्युत्पन्न वर्ग हो; वेक्टर वर्ग में, self
 - वेक्टर होगा
 रिटर्न सेटमेटेबल ({x = x, y = y, z = z}, स्वयं)

समाप्त

फ़ंक्शन वेक्टर: परिमाण () - एक और तरीका

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

समाप्त

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

फ़ंक्शन वेक्टर मल्टी: गुणा (मान)

 स्व.एक्स = स्व.एक्स * मूल्य
 Self.y = Self.y * मान
 स्व.जेड = स्व.जेड * मूल्य
 स्वयं लौटें

समाप्त

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

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


कार्यान्वयन

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

अधिकांश सीपीयू की तरह, और अधिकांश वर्चुअल मशीनों (जो स्टैक मशीन|स्टैक-आधारित हैं) के विपरीत, लुआ वीएम रजिस्टर मशीन|रजिस्टर-आधारित है, और इसलिए वास्तविक हार्डवेयर डिज़ाइन के अधिक निकट है। रजिस्टर आर्किटेक्चर दोनों मूल्यों की अत्यधिक प्रतिलिपि से बचाता है और प्रति कार्य निर्देशों की कुल संख्या को कम करता है। लुआ 5 की वर्चुअल मशीन व्यापक उपयोग के लिए पहले रजिस्टर-आधारित शुद्ध वीएम में से एक है।[14] तोता आभासी मशीन और Android (ऑपरेटिंग सिस्टम) का Dalvik (सॉफ़्टवेयर) दो अन्य प्रसिद्ध रजिस्टर-आधारित VM हैं। PCScheme का VM भी रजिस्टर-आधारित था।[15] यह उदाहरण फैक्टोरियल फ़ंक्शन परिभाषित #फ़ैक्टोरियल उदाहरण की बायटेकोड सूची है (जैसा कि luac 5.1 संकलक):[16] समारोह <फैक्टोरियल.लुआ: 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

सी एपीआई

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

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

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

<वाक्यविन्यास प्रकाश लैंग = सी>

  1. शामिल <stdio.h>
  2. शामिल <lua.h> // लुआ मुख्य पुस्तकालय (लुआ_*)
  3. शामिल <lauxlib.h> // लुआ सहायक पुस्तकालय (luaL_*)

पूर्णांक मुख्य (शून्य) {

   // लुआ राज्य बनाएं
   लुआ_स्टेट * एल = लुआएल_न्यूस्टेट ();
   // लोड करें और एक स्ट्रिंग निष्पादित करें
   if (luaL_dostring(L, function foo (x,y) return x+y end )) {
       लुआ_क्लोज़ (एल);
       वापसी -1;
   }
   // ग्लोबल फू का पुश वैल्यू (ऊपर परिभाषित फंक्शन)
   // ढेर के लिए, पूर्णांक 5 और 3 के बाद
   lua_getglobal (एल, फू);
   लुआ_पुशिनटेगर (एल, 5);
   लुआ_पुशिनटेगर (एल, 3);
   लुआ_कॉल (एल, 2, 1); // एक फ़ंक्शन को दो तर्कों और एक वापसी मान के साथ कॉल करें
   प्रिंटफ (परिणाम:% d \ n, lua_tointeger (एल, -1)); // स्टैक टॉप पर आइटम का पूर्णांक मान प्रिंट करें
   लुआ_पॉप (एल, 1); // स्टैक को मूल स्थिति में लौटाएं
   लुआ_क्लोज़ (एल); // करीब लुआ राज्य
   वापसी 0;

} </वाक्यविन्यास हाइलाइट>

इस उदाहरण को चलाना देता है:

$ cc -o उदाहरण example.c -llua
$ ./उदाहरण
परिणाम: 8
</पूर्व>

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

Lua API का उपयोग करके एक्सटेंशन मॉड्यूल लिखना संभव है। एक्सटेंशन मॉड्यूल लाइब्रेरी (कंप्यूटिंग) # डायनेमिक लिंकिंग हैं जिनका उपयोग लुआ लिपियों को मूल सुविधाएं प्रदान करके दुभाषिया की कार्यक्षमता बढ़ाने के लिए किया जा सकता है। लुआ स्क्रिप्ट एक्सटेंशन मॉड्यूल का उपयोग करके लोड कर सकती हैं require,[17]लुआ में ही लिखे गए मॉड्यूल की तरह, या साथ package.loadlib.[19] जब सी लाइब्रेरी के माध्यम से लोड किया जाता है require("foo") लुआ समारोह की तलाश करेंगे luaopen_foo और इसे कॉल करें, जो लुआ से कॉल करने योग्य किसी भी सी फ़ंक्शन के रूप में कार्य करता है और आम तौर पर विधियों से भरी तालिका देता है। चट्टानों के रूप में जाने जाने वाले मॉड्यूल का बढ़ता हुआ संग्रह LuaRocks नामक पैकेज प्रबंधन प्रणाली के माध्यम से उपलब्ध है,[20] सीपीएएन, RubyGems और पायथन अंडे की भावना में। अन्य स्क्रिप्टिंग भाषाओं सहित अधिकांश लोकप्रिय प्रोग्रामिंग भाषाओं के लिए पूर्व लिखित लुआ भाषा बंधन मौजूद है।[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