← नवीनतम पेपर
💻 computer science

Yarrow: Reconciling Effects Handlers and Region-Based Memory Management

यह शोध पत्र यैरो (Yarrow) को प्रस्तुत करता है, जो एक नई ML-समान भाषा है जो यैरो लॉजिक (Yarrow Logic - YL) के विकास के माध्यम से बीजगणितीय प्रभावों (algebraic effects) को क्षेत्र-आधारित मेमोरी प्रबंधन (region-based memory management) के साथ सफलतापूर्वक सामंजस्य स्थापित करती है, जिसे आइरिस (Iris) फ्रेमवर्क के भीतर एक औपचारिक प्रोग्राम लॉजिक के रूप में सिद्ध किया गया है ताकि सुरक्षित, मॉड्यूलर तर्क और चेकपॉइंटिंग एवं एसिंक्रोनस कंप्यूटेशन जैसे जटिल अनुप्रयोगों के लिए कुशल, गारबेज-कलेक्शन-मुक्त निष्पादन को सक्षम बनाया जा सके।

मूल लेखक: Anders Alnor Mathiasen, Amin Timany, Lars Birkedal

प्रकाशित 2026-07-20
📖 10 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Anders Alnor Mathiasen, Amin Timany, Lars Birkedal

मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें

कल्पना कीजिए कि आप एक अत्यंत कुशल कंप्यूटर प्रोग्राम बनाने की कोशिश कर रहे हैं, लेकिन आप अपने उपकरणों को प्रबंधित करने के दो बहुत अलग तरीकों के बीच फंसे हुए हैं। एक तरफ, आपके पास गार्बेज कलेक्शन (Garbage Collection) है, जो एक मददगार लेकिन धीमा रोबोट है जो लगातार आपके कार्यक्षेत्र में घूमता रहता है, आपके द्वारा गिराए गए पुराने उपकरणों को उठाता है और उन्हें फेंक देता है ताकि आप जगह खत्म होने से बच सकें। यह सुरक्षित है, लेकिन यह आपके वास्तविक काम से समय चुरा लेता है। दूसरी ओर, आपके पास रीजन-बेस्ड मेमोरी (Region-Based Memory) है, जहाँ एक सख्त प्रणाली है जिसमें आप किसी कार्य के लिए एक विशिष्ट "बॉक्स" (रीजन) बनाते हैं, अपने सभी उपकरण उस बॉक्स के अंदर रखते हैं, और जब कार्य समाप्त हो जाता है, तो आप तुरंत उस पूरे बॉक्स और उसके भीतर की हर चीज़ को कुचल देते हैं। यह अविश्वसनीय रूप से तेज़ है, लेकिन यह केवल तभी काम करता है जब आप एक सख्त नियम का पालन करते हैं: आपको अपना कार्य पूरा करना होगा, अपने उपकरण रख देने होंगे, और अगला कार्य शुरू करने से पहले बॉक्स से बाहर निकलना होगा।

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

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

यारो की कहानी: समय-यात्रा करने वाली मेमोरी को वश में करना

इस पहेली को हल करने के तरीके को समझने के लिए, हमें पहले खलनायक को देखना होगा: स्टैक डिसिप्लिन (stack discipline) और डेलिमिटेड कंटीन्यूएशन (delimited continuations) के बीच का संघर्ष।

कंप्यूटर मेमोरी की दुनिया में, कल्पना कीजिए कि प्लेटों का एक ढेर है। जब आप एक काम शुरू करते हैं, तो आप ऊपर एक नई प्लेट रखते हैं (एक "रीजन")। आप अपना काम करते हैं, और जब आप समाप्त कर लेते हैं, तो आप प्लेट को हटा देते हैं। यह "स्टैक डिसिप्लिन" है। यह सरल, सुरक्षित और तेज़ है। लेकिन फिर इफेक्ट हैंडलर (Effect Handler) आता है, जो जादुई पॉज़ बटन है। जब आप इस बटन को दबाते हैं, तो कंप्यूटर रुक जाता है, वर्तमान स्थिति को सहेज लेता है, और किसी समस्या को संभालने के लिए प्रोग्राम के दूसरे हिस्से में कूद जाता है। जब यह वापस कूदता है, तो यह समय यात्रा जैसा होता है।

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

लेखकों ने एक साहसी प्रश्न पूछा: क्या हम तेज़, तत्काल-कुचलने वाले मेमोरी बॉक्स को रख सकते हैं जब हमारे पास ये समय-यात्रा करने वाले पॉज़ बटन हों?

वे कहते हैं हाँ, लेकिन केवल तभी जब हम बहुत सावधान रहें कि हम कैसे पॉज़ करते हैं। उन्होंने दो प्रकार के पॉज़ के बीच एक महत्वपूर्ण अंतर खोजा:

  1. वन-शॉट इफेक्ट्स (One-Shot Effects - "एक बार वाला" पॉज़): कल्पना कीजिए कि आप एक कार्य को रोकते हैं, उसे एक मित्र को सौंपते हैं, और वे अपना काम एक बार करते हैं और फिर इसे वापस सौंप देते हैं। इस परिदृश्य में, मेमोरी बॉक्स सुरक्षित है। लेखक दिखाते हैं कि जब आप पॉज़ करते हैं, तो मेमोरी बॉक्स कार्य के साथ "कैप्चर" हो जाता है। जब आप पुनः शुरू करते हैं, तो बॉक्स को ठीक वैसा ही बहाल कर दिया जाता है जैसा वह था। यह एक फिल्म के दृश्य को फ्रीज करने जैसा है; जब फिल्म फिर से शुरू होती है, तो प्रॉप्स अभी भी वहीं होते हैं।
  2. मल्टी-शॉट इफेक्ट्स (Multi-Shot Effects - "दोहराव वाला" पॉज़): अब कल्पना कीजिए कि आप एक कार्य को रोकते हैं, और आपका मित्र उस पॉज़ बटन का उपयोग कार्य को बार-बार फिर से शुरू करने के लिए कई बार कर सकता है। यहाँ मामला पेचीदा हो जाता है। यदि आप पॉज़ करते हैं, तो मेमोरी बॉक्स कैप्चर किया जाता है। लेकिन यदि आपका मित्र दोबारा पॉज़ बटन का उपयोग करता है, तो वे अनिवार्य रूप से उसी बॉक्स का दो बार उपयोग करने की कोशिश कर रहे हैं। लेखक समझाते हैं कि इस मामले में, मेमोरी बॉक्स को पहले उपयोग के बाद "कुचला हुआ" माना जाना चाहिए। यदि आप उस बॉक्स से दूसरी बार उपकरण का उपयोग करने की कोशिश करते हैं, तो यह असुरक्षित है। पेपर सिद्ध करता है कि आप इन मल्टी-शॉट पॉज़ का उपयोग कर सकते हैं, लेकिन आपको सख्त होना होगा: आप बॉक्स के भीतर के उपकरणों का उपयोग केवल एक बार ही कर सकते हैं।

इसे काम करने के लिए, टीम ने यारो लॉजिक (YL) बनाया। इस लॉजिक को एक खेल के नियम पुस्तिका के रूप में समझें। यह केवल यह जाँच नहीं करता कि कोड सही लिखा गया है या नहीं; यह वास्तविक समय में मेमोरी स्टैक के "आकार" को ट्रैक करता है। इसे पता होता है कि कौन से मेमोरी बॉक्स वर्तमान में सक्रिय हैं और कौन से पॉज़ बटन द्वारा कैप्चर किए गए हैं।

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

केस स्टडीज: यारो को परखना

यह दिखाने के लिए कि यारो केवल एक सिद्धांत नहीं है, लेखकों ने इसे परखने के लिए कई वास्तविक दुनिया के उदाहरण बनाए।

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

निष्कर्ष: हम क्या जानते हैं और हम क्या नहीं जानते

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

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

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

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

अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?

आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।

Digest आज़माएँ →