- Luau एक तेज, सुरक्षित और gradual typing को support करने वाली embedded scripting language है, जो Lua 5.1 से derived है
- यह Roblox platform के complex games और large-scale codebases को support करने के लिए performance, language tools, और type system को मजबूत करते हुए विकसित हुई
- सामान्य Lua के विपरीत, इसमें sandboxing features हैं, ताकि अलग-अलग permissions वाला code साथ-साथ चल सके
- इसका syntax Lua 5.1 के साथ compatible है, लेकिन यह additional syntax extensions और analysis tools (linter, type checker) देकर code quality बेहतर बनाता है
- performance optimization, custom bytecode, JIT support आदि के जरिए यह LuaJIT-स्तर की execution speed को लक्ष्य बनाता है, और Roblox से आगे विभिन्न embedded environments में भी इसकी उपयोगिता की संभावना है
Motivation (पृष्ठभूमि)
- लगभग 2006 में Roblox ने game scripting language के रूप में Lua 5.1 को अपनाया
- समय के साथ Roblox platform पर games का स्तर बढ़ा और टीमों का आकार बड़ा हुआ, इसलिए मौजूदा Lua की सीमाओं को पार करने के लिए भाषा और उसके implementation में बड़े सुधार किए गए
- platform की growth के साथ performance optimization, user friendliness, और language-related tools के development में काफी निवेश किया गया
- खासकर 2020 तक 10 लाख लाइनों से अधिक के large-scale codebase को manage करते हुए यह स्पष्ट हुआ कि gradual type system को अपनाना आवश्यक है
- इन्हीं जरूरतों के आधार पर Roblox ने Lua से derived Luau नाम की language विकसित की, जो तेज, छोटी, सुरक्षित है और जिसमें types को gradual तरीके से लागू किया जा सकता है
- अधिक जानकारी Why Luau दस्तावेज़ में उपलब्ध है
Luau overview
- Luau Lua 5.1 पर आधारित एक embedded scripting language है
- यह तेज और हल्का runtime प्रदान करती है
- यह gradual type system को support करती है, जिससे dynamic और static analysis साथ-साथ संभव होते हैं
- यह Roblox Studio में integrated है, और
--!strictflag से strict mode को सक्रिय किया जा सकता है - developers Luau Creator Docs में Roblox से जुड़ी documentation देख सकते हैं
Sandboxing (sandbox सुविधा)
- Luau exposed standard library को सीमित करती है और अतिरिक्त sandboxing features प्रदान करती है
- इससे सामान्य developers द्वारा लिखा गया unprivileged code और platform के अंदर का privileged code सुरक्षित रूप से parallel में चल सकता है
- इसी कारण इसका execution environment सामान्य Lua से अलग है
- अधिक विवरण Sandbox विवरण में उपलब्ध है
Compatibility (संगतता)
- जहाँ तक संभव हो, यह Lua 5.1 के साथ backward compatibility बनाए रखती है, और बाद के versions की कुछ features भी शामिल करती है
- लेकिन Luau Lua के सभी design decisions को नहीं अपनाती, बल्कि Roblox के विशिष्ट use cases और constraints को दर्शाती है
- Lua 5.1 के बाद के versions की feature support स्थिति Compatibility दस्तावेज़ में दी गई है
Syntax (syntax)
- यह Lua 5.1 syntax के साथ पूरी तरह compatible है
- साथ ही यह आधुनिक और परिचित syntax extensions देती है, जिससे development convenience बढ़ती है
- पूरा syntax Syntax दस्तावेज़ में देखा जा सकता है
Analysis (analysis tools)
-
सही code लिखने में मदद के लिए script analysis tools उपलब्ध हैं
-
components:
- Linter: सामान्य errors का पता लगाता है
- Type Checker: type verification
-
इन्हें
luau-analyzeCLI tool से चलाया जा सकता है -
lint rules के लिए Lint दस्तावेज़, और type checking guide के लिए Typecheck दस्तावेज़ देखें
Performance (प्रदर्शन)
- parser, linter, type checker वाले custom frontend के साथ optimized bytecode, interpreter, और compiler प्रदान किए जाते हैं
- कुछ मामलों में यह LuaJIT interpreter के बराबर प्रतिस्पर्धी performance दे सकती है
- x64 और ARM64 platforms पर optional JIT compiler support मिलता है, जिससे कुछ programs की performance काफी बढ़ सकती है
- runtime को लगातार optimize किया जा रहा है और उसके कुछ हिस्सों को दोबारा लिखा जा रहा है ताकि efficiency बेहतर हो
- performance की विस्तृत विशेषताएँ Performance दस्तावेज़ में उपलब्ध हैं
Libraries (लाइब्रेरी)
- भाषा स्वयं Lua 5.1 का पूर्ण superset है
- standard library में कुछ functions हटाए गए हैं और कुछ नए functions जोड़े गए हैं
- application में embed किए जाने पर यह app-specific extension libraries तक भी पहुँच सकती है
- पूरी library documentation Library दस्तावेज़ में देखी जा सकती है
1 टिप्पणियां
Hacker News राय
--!strictघोषित करने के बाद भी स्पष्ट type violation होने पर बिना किसी error या warning के code का चल जाना मेरे लिए चौंकाने वाला था। यह मेरी अपेक्षा से अलग व्यवहार थाluauexecutable से सीधे चलाने पर type checking लागू नहीं होती। अगर embedded environment में compile से पहले सभी code पर अनिवार्य type checking कराई जाए, तो अपेक्षा के अनुरूप type errors पकड़े जा सकते हैं। यह इस डिज़ाइन का लगभग अनिवार्य परिणाम है, क्योंकि लाखों लाइनों के Lua 5.1 codebase को एक साथ Luau में बदला गया थाtscसे जाँच कराकर errors/results को वापस Luau पर map किया जाए, तो क्या इससे कई dynamic languages के लिए तेज़ type checker बनाए जा सकते हैं