Lua Academy · पाठ

JIT-अनुकूल Lua लिखना

JIT बाउलआउट से बचें: प्रकार स्थिर रखें, टेबल का आकार बदलना घटाएँ और स्थानीय वेरिएबल उपयोग करें।

पाठ 2, कुल 4 में से13 चरण

JIT-अनुकूल Lua लिखना, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

JIT-अनुकूलता क्यों महत्वपूर्ण है

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

प्रकार स्थिर रखें

किसी चर में हमेशा एक ही प्रकार का मान होना चाहिए। यदि कोई चर कभी संख्या और कभी स्ट्रिंग रखता है, तो JIT उसे विशिष्ट रूप से अनुकूलित नहीं कर सकता और हर जगह प्रकार की जाँच डालनी पड़ती है।

-- BAD: type unstable
local x = 1
if cond then x = "one" end  -- JIT cannot specialize x

-- GOOD: separate variables
local xNum = 1
local xStr = "one"

स्थानीय चरों का उपयोग करें

स्थानीय चर Lua स्टैक पर संग्रहीत होते हैं और JIT द्वारा रजिस्टर आवंटित किए जाते हैं। वैश्विक और अपवैल्यू तक पहुँच धीमी होती है। गर्म फ़ंक्शन की शुरुआत में वैश्विक मानों को स्थानीय चरों में कैश करें।

local sin = math.sin  -- cache as local
for i = 1, 1e6 do
  result = sin(i)  -- fast local access
end

लूप में तालिका का आकार बदलने से बचें

तालिकाओं को उनके अपेक्षित आकार के अनुसार पहले से आवंटित करें। लूप में तालिका बढ़ाने पर, जब अगली 2 की घात वाली सीमा पार होती है, ऐरे फिर से आवंटित और कॉपी होता है, जिससे JIT ट्रेस टूट जाते हैं।

local t = table.new(1000, 0)  -- LuaJIT extension
for i = 1, 1000 do t[i] = i end

मिश्रित ऐरे/हैश से बचें

ऐरे वाले हिस्सों को ऐरे ही रखें, जिनकी पूर्णांक कुंजियाँ 1 से शुरू होती हैं। एक ही तालिका में पूर्णांक और स्ट्रिंग कुंजियाँ मिलाने से ऐरे अनुकूलन रुक जाता है।

गर्म आंतरिक लूपों में क्लोज़र बनाने से बचें

हर दोहराव में नया क्लोज़र बनाने से मेमोरी आवंटित होती है और कचरा-संग्रहण का दबाव बढ़ सकता है। क्लोज़र को लूप के बाहर पहले से आवंटित करें।

-- BAD: closure created every iteration
for i = 1, 1e6 do
  local fn = function() return i end  -- allocation!
end

-- GOOD: use a local function outside
local function work(i) return i end
for i = 1, 1e6 do work(i) end

बहुरूपी कॉल से बचें

एक ही कॉल स्थान से अलग-अलग फ़ंक्शन ऑब्जेक्ट को कॉल करने पर, यानी हर दोहराव में अलग फ़ंक्शन चलाने पर, बहुरूपी कॉल स्थान बनता है जिसे JIT इनलाइन नहीं कर सकता।

NYI (अभी लागू नहीं) सुविधाओं से बचें

Lua की कुछ सुविधाएँ LuaJIT के JIT में लागू नहीं हैं (NYI): कुछ विनिर्देशकों के साथ string.format, JIT ट्रेस के भीतर pcall, और pairs/next। jit.v का आउटपुट जाँचें।

ट्रेस की विस्तृत जानकारी के लिए jit.v

यह देखने के लिए विस्तृत JIT आउटपुट सक्षम करें कि कौन-से ट्रेस कंपाइल हुए और कौन-से रुक गए।

-- Run script with: luajit -jv script.lua
-- Or in code:
jit.attach(function(event, ...)
  if event == "abort" then print("ABORT:", ...) end
end, "all")

निश्चित आकार के ऐरे का उपयोग करें

जब ऐरे का आकार पहले से ज्ञात हो, तो FFI के माध्यम से उसे निश्चित आकार वाले C ऐरे के रूप में घोषित करना Lua तालिका की तुलना में बहुत तेज़ हो सकता है।

अनुकूलन से पहले प्रोफ़ाइल बनाएँ

पहले मापें। समय से पहले किया गया अनुकूलन सभी समस्याओं की जड़ है। JIT-अनुकूल पुनर्लेखन पर समय लगाने से पहले वास्तविक गर्म पथ खोजने के लिए प्रोफ़ाइल बनाएँ।

JIT-अनुकूलता का प्रश्न

गर्म आंतरिक लूपों के अंदर क्लोज़र बनाने से क्यों बचना चाहिए?

पुनरावलोकन: JIT-अनुकूल Lua

प्रकार स्थिर रखें, स्थानीय चरों का उपयोग करें, तालिकाएँ पहले से आवंटित करें, गर्म लूपों में क्लोज़र से बचें और jit.v से NYI सुविधाओं की जाँच करें। पहले प्रोफ़ाइल बनाएँ — केवल प्रमाणित अड़चनों का ही अनुकूलन करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “JIT-अनुकूल Lua लिखना” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “JIT-अनुकूल Lua लिखना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“JIT-अनुकूल Lua लिखना” में मैं क्या सीखूँगा?

JIT बाउलआउट से बचें: प्रकार स्थिर रखें, टेबल का आकार बदलना घटाएँ और स्थानीय वेरिएबल उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“JIT-अनुकूल Lua लिखना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. LuaJIT आर्किटेक्चर का अवलोकन
  2. JIT-अनुकूल Lua लिखना
  3. jit.p और perf से प्रोफ़ाइलिंग
  4. बेंचमार्किंग पैटर्न
← Lua Academy पर वापस जाएँ