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

A Calculus of Inheritance

यह शोधपत्र इनहेरिटेंस-कैलकुलस (inheritance-calculus) प्रस्तुत करता है, जो रिकॉर्ड्स, डेफिनिशन और इनहेरिटेंस पर आधारित एक डिक्लेरेटिव प्रोग्रामिंग फाउंडेशन है जो मल्टीपल-इनहेरिटेंस (multiple-inheritance) की समस्याओं को संरचनात्मक रूप से हल करने और λ\lambda-कैलकुलस की तुलना में अधिक अभिव्यंजकता प्राप्त करने के लिए सेट यूनियन (set union) के अंतर्गत मुख्य ऑब्जेक्ट-ओरिएंटेड अवधारणाओं को एकीकृत करता है।

मूल लेखक: Bo Yang

प्रकाशित 2026-03-11✓ Author reviewed
📖 7 मिनट में पढ़ें🧠 गहराई से पढ़ें

मूल लेखक: Bo Yang

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

कल्पना कीजिए कि आप केवल लेगो ब्रिक्स (Lego bricks) का उपयोग करके एक विशाल, जटिल शहर बना रहे हैं।

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

यह पेपर निर्माण करने का एक नया तरीका पेश करता है: इन्हेरिटेंस-कैलकुलस (Inheritance-Calculus)

मशीनों के बजाय, यहाँ बुनियादी निर्माण खंड एक रिकॉर्ड (Record) (विशेषताओं का एक कंटेनर) है। रिकॉर्ड को एक मशीन के रूप में नहीं, बल्कि एक पारदर्शी बॉक्स या केक की एक परत के रूप में सोचें।

यहाँ मुख्य विचार है, जिसे सरल उपमाओं के माध्यम से समझाया गया है:

1. तीन जादुई उपकरण

जिस तरह पारंपरिक प्रोग्रामिंग में एब्स्ट्रैक्शन (Abstraction), एप्लीकेशन (Application) और वेरिएबल्स (Variables) का उपयोग किया जाता है, यह नया सिस्टम तीन सरल उपकरणों का उपयोग करता है:

  • रिकॉर्ड (Record): एक बॉक्स जो चीजों को रखता है (जैसे फाइलों वाला एक फोल्डर)।
  • डेफिनेशन (Definition): एक बॉक्स के अंदर फाइल रखना।
  • इन्हेरिटेंस (Inheritance): दो बॉक्सों को आपस में चिपकाना।

2. सुपरपावर: "डीप मर्ज" (केक की उपमा)

अधिकांश प्रोग्रामिंग भाषाओं में, यदि आप दो ऑब्जेक्ट्स को आपस में जोड़ने की कोशिश करते हैं और उन दोनों के पास config.txt नाम की एक फाइल है, तो एक फाइल दूसरी को ओवरराइट (मिटा) देती है। यह केक की एक नई परत पुराने केक के ऊपर रखने जैसा है; पुराना स्वाद गायब हो जाता है।

Inheritance-Calculus में, जोड़ना अलग है। यह डीप मर्ज (Deep Merge) की तरह है।

  • कल्पना कीजिए कि आपके पास एक "बेस केक" है जिसमें वैनिला की परत है।
  • आपके पास एक "चॉकलेट केक" है जिसमें चॉकलेट की परत है।
  • जब आप उन्हें आपस में जोड़ते हैं, तो आप वैनिला को खोते नहीं हैं। आपको एक ऐसा केक मिलता है जिसमें वैनिला और चॉकलेट दोनों परतें होती हैं, और यदि उनमें एक साझा "फ्रॉस्टिंग" परत है, तो फ्रॉस्टिंग आपस में पूरी तरह से मिल जाती है।

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

3. "ट्रैफिक जाम" को हल करना (लीनियराइजेशन की समस्या)

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (जैसे Java या Scala) में, यदि क्लास A, B से इनहेरिट करती है, और क्लास C भी B से इनहेरिट करती है, और आप A और C को मिलाने की कोशिश करते हैं, तो कंप्यूटर भ्रमित हो जाता है कि साझा हिस्सों का "मालिक" कौन है। इसे तय करने के लिए इसे एक सख्त सूची (एक "लीनियराइजेशन") बनानी पड़ती है कि कौन जीतेगा। यह एक ट्रैफिक जाम की तरह है जहाँ कारें रास्ता पाने के लिए लड़ रही हैं।

Inheritance-Calculus इस ट्रैफिक जाम को पूरी तरह से समाप्त कर देता है। क्योंकि "जोड़ना" (gluing) कम्यूटेटिव (commutative) (क्रम मायने नहीं रखता), एसोसिएटिव (associative) (ग्रुपिंग मायने नहीं रखती), और आइडम्पोटेंट (idempotent) (एक ही चीज़ को दो बार जोड़ने से वह टूटती नहीं है) है, सिस्टम बस सब कुछ एक बड़े, खुशहाल ढेर में मर्ज कर देता है। यहाँ कोई "विजेता" या "हारने वाला" नहीं है; हर चीज़ योगदान देती है।

4. "मशीन में भूत" (सेल्फ-रेफरेंस)

आमतौर पर, जब एक प्रोग्राम खुद को संदर्भित करता है (जैसे एक फंक्शन खुद को कॉल करता है), तो इसे काम करने के लिए एक विशेष "जादुई ट्रिक" (फिक्स्ड-पॉइंट कॉम्बिनेटर) की आवश्यकता होती है।

इस सिस्टम में, सेल्फ-रेफरेंस स्वाभाविक है। एक रशियन नेस्टिंग डॉल (Russian Nesting Doll) की कल्पना करें।

  • यदि आपके पास एक गुड़िया है जो कहती है "मेरे अंदर मेरा ही एक छोटा संस्करण है," और आप दो ऐसी गुड़ियों को आपस में जोड़ते हैं, तो सिस्टम घबराता नहीं है। वह समझ जाता है कि "मैं" वास्तव में मूल गुड़िया और नई गुड़िया दोनों को संदर्भित करता है।
  • यह सेल्फ-रेफरेंस को एक साथ कई लक्ष्यों (multiple targets) तक हल करता है। यह एक दर्पण में दूसरे दर्पण के प्रतिबिंब जैसा है, लेकिन यह अनंत लूप (infinite loop) बनाने के बजाय जो कंप्यूटर को क्रैश कर दे, यह एक समृद्ध, बहु-स्तरीय प्रतिबिंब बनाता है जिसे सिस्टम आसानी से नेविगेट कर सकता है।

5. यह क्यों महत्वपूर्ण है: "एक्सप्रेशन प्रॉब्लम"

कंप्यूटर विज्ञान में एक प्रसिद्ध समस्या है जिसे एक्सप्रेशन प्रॉब्लम (Expression Problem) कहा जाता है। यह सवाल करती है: हम मौजूदा कोड को तोड़े या सब कुछ दोबारा लिखे बिना, एक प्रोग्राम में नए डेटा टाइप्स और नए ऑपरेशन्स को कैसे जोड़ सकते हैं?

  • पुराना तरीका: आपको आमतौर पर चुनाव करना पड़ता है। आप या तो नए डेटा को आसानी से जोड़ सकते हैं, या नए फंक्शन्स को आसानी से जोड़ सकते हैं, लेकिन दोनों को बिना सिरदर्द के करना दुर्लभ है।
  • Inheritance-Calculus का तरीका: "डीप मर्ज" के जादू के कारण, आप एक नई फाइल (नया डेटा) और एक नई फाइल (नया फंक्शन) स्वतंत्र रूप से जोड़ सकते हैं। जब आप उन्हें जोड़ते हैं, तो वे स्वचालित रूप से एक-दूसरे से बात करने लगते हैं। यह घर में एक नया कमरा और एक नया फर्नीचर जोड़ने जैसा है; फर्नीचर अपने आप कमरे में फिट हो जाता है क्योंकि घर को कुछ भी स्वीकार करने के लिए डिज़ाइन किया गया है।

6. फंक्शन्स का "कलर ब्लाइंडनेस"

पेपर "फंक्शन कलर ब्लाइंडनेस" का उल्लेख करता है।

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

बड़ी तस्वीर

लेखक, बो यांग (Bo Yang), कह रहे हैं: "हमें जटिल सॉफ्टवेयर बनाने के लिए जटिल मशीनों की आवश्यकता नहीं है। हमें बस पारदर्शी बक्सों की आवश्यकता है जो पूरी तरह से आपस में जुड़ सकें।"

सब कुछ को डीपली मर्ज होने वाले रिकॉर्ड के रूप में मानकर, यह नया "कैलकुलस ऑफ इनहेरिटेंस" प्रोग्रामिंग को बनाता है:

  1. अधिक लचीला: आप चीजों को तोड़े बिना कभी भी फीचर्स जोड़ सकते हैं।
  2. अधिक शक्तिशाली: यह पुराने "फंक्शन-आधारित" सिस्टम जो कुछ भी कर सकते हैं, वह सब कर सकता है, और उससे भी अधिक।
  3. सरल: यह इस बारे में जटिल नियमों की आवश्यकता को हटा देता है कि किसका क्या अधिकार है, क्योंकि सब कुछ साझा और मर्ज किया गया है।

यह प्रोग्रामिंग को "कौन जीतता है" के संघर्ष से बदलकर "एक साथ मिलकर एक बड़ा, समृद्ध ढांचा बनाने" के एक सहयोगात्मक कार्य में बदल देता है।

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

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

Digest आज़माएँ →