सार निरंतरता
निरंतरता एक अमूर्त धारणा है कि नियंत्रण प्रवाह अर्थ विज्ञान का वर्णन किया जाता है। इस अर्थ में, वे दोनों मौजूद हैं और मौजूद नहीं हैं (याद रखें, वे अमूर्त हैं) किसी भी भाषा में जो नियंत्रण ऑपरेटरों (जैसा कि किसी भी ट्यूरिंग पूर्ण भाषा को जरूरी है) प्रदान करता है, वैसे ही दोनों संख्याएं मौजूद हैं (सार तत्वों के रूप में) और अस्तित्व में नहीं है (मूर्त संस्थाओं के रूप में)।
निरंतरता नियंत्रण कॉल/रिटर्न, अपवाद हैंडलिंग और यहां तक कि गोटोस जैसे नियंत्रण प्रभावों का वर्णन करती है। एक अच्छी तरह से स्थापित भाषा, अन्य चीजों के साथ, निरंतरताओं (उदा। अपवाद) पर बनाए गए अमूर्तताओं के साथ डिजाइन की जाएगी। (ऐसा कहने के लिए, एक अच्छी तरह से स्थापित भाषा में नियंत्रण ऑपरेटर शामिल होंगे जो निरंतरता के साथ डिजाइन किए गए थे। निश्चित रूप से, केवल नियंत्रण अबास्ट्रक्शन के रूप में निरंतरता का पर्दाफाश करने के लिए एक भाषा के लिए पूरी तरह से उचित है, जिससे उपयोगकर्ता निर्माण कर सकते हैं शीर्ष पर अपने स्वयं के कपोल-कल्पना।)
प्रथम श्रेणी निरंतरता
तो एक निरंतरता की धारणा reified एक भाषा में एक प्रथम श्रेणी वस्तु के रूप में है, तो हम एक उपकरण है जिस पर नियंत्रण प्रभाव के सभी प्रकार किया जा सकता है बनाया। उदाहरण के लिए, यदि किसी भाषा में प्रथम श्रेणी की निरंतरता है, लेकिन अपवाद नहीं है, तो हम निरंतरता के शीर्ष पर अपवाद बना सकते हैं।
पहली कक्षा निरंतरता के साथ कोई समस्या
जबकि प्रथम श्रेणी निरंतरता कई मामलों में एक शक्तिशाली और उपयोगी उपकरण हैं, वहाँ भी उन्हें एक भाषा में उजागर करने के लिए कुछ कमियां हैं:
- अलग बनाया कपोल-कल्पना निरंतरता के शीर्ष पर बनाये जाने पर अप्रत्याशित/अनजान व्यवहार हो सकता है। उदाहरण के लिए, यदि मैं गणना को निरस्त करने के लिए निरंतरता का उपयोग करता हूं तो
finally
ब्लॉक छोड़ा जा सकता है।
- यदि किसी भी समय वर्तमान निरंतरता का अनुरोध किया जा सकता है, तो भाषा रन-टाइम को संरचित किया जाना चाहिए ताकि किसी भी समय वर्तमान निरंतरता के कुछ डेटा-संरचना का प्रतिनिधित्व करना संभव हो। यह एक सुविधा के लिए रन-टाइम पर कुछ बोझ रखता है, जो बेहतर या बदतर के लिए अक्सर "विदेशी" माना जाता है। यदि भाषा होस्ट की जाती है (जैसे क्लोजर JVM पर होस्ट किया गया है), तो वह प्रतिनिधित्व होस्टिंग प्लेटफॉर्म द्वारा प्रदान किए गए ढांचे के भीतर फिट होना चाहिए। ऐसी अन्य विशेषताएं भी हो सकती हैं जो एक भाषा को बनाए रखना चाहें (उदा।, सी इंटरऑप) जो समाधान स्थान को प्रतिबंधित करती है। इस तरह के मुद्दे "प्रतिबाधा विसंगति" की संभावना को बढ़ाते हैं, और एक प्रदर्शन समाधान के विकास को गंभीर रूप से जटिल कर सकते हैं।
एक भाषा
metaprogramming के माध्यम से करने के लिए पहली कक्षा निरंतरता जोड़ा जा रहा है, यह एक भाषा के लिए प्रथम श्रेणी के निरंतरता के लिए समर्थन जोड़ने के लिए संभव है। आम तौर पर, इस दृष्टिकोण में कोड को निरंतर-गुजरने वाली शैली (सीपीएस) में परिवर्तित करना शामिल है, जिसमें वर्तमान निरंतरता प्रत्येक कार्य के लिए एक स्पष्ट तर्क के रूप में पारित होती है।
उदाहरण के लिए, डेविड नोलन की delimc लाइब्रेरी मैक्रो ट्रांसफॉर्म की एक श्रृंखला के माध्यम से क्लोजर प्रोग्राम के हिस्सों की सीमित निरंतरता लागू करती है। इसी तरह से, मैंने pulley.cps लिखा है, जो एक मैक्रो कंपाइलर है जो कोड को सीपीएस में बदलता है, साथ ही कोर क्लोजर फीचर्स (जैसे अपवाद हैंडलिंग) के साथ-साथ देशी क्लोजर कोड के साथ इंटरऑप का समर्थन करने के लिए रन-टाइम लाइब्रेरी के साथ।
इस दृष्टिकोण के साथ एक मुद्दा यह है कि आप मूल (क्लोजर) कोड और परिवर्तित (सीपीएस) कोड के बीच सीमा को कैसे संभालेंगे। विशेष रूप से, चूंकि आप मूल कोड की निरंतरता को कैप्चर नहीं कर सकते हैं, इसलिए आपको आधार भाषा के साथ या तो किसी भी तरह की अनुमति (या किसी भी तरह से प्रतिबंधित) की आवश्यकता है या संदर्भ को सुनिश्चित करने के उपयोगकर्ता पर बोझ डालने की आवश्यकता है, जिसे वे वास्तव में किसी भी निरंतरता को कैप्चर करना चाहते हैं कब्जा किया।
pulley.cps उत्तरार्द्ध की ओर जाता है, हालांकि उपयोगकर्ता को इसे प्रबंधित करने की अनुमति देने के लिए कुछ प्रयास किए गए हैं। उदाहरण के लिए, मूल कोड में कॉल करने के लिए सीपीएस कोड को अस्वीकार करना संभव है। इसके अलावा, मौजूदा मूल कार्यों के सीपीएस संस्करणों की आपूर्ति के लिए एक तंत्र प्रदान किया जाता है।
पर्याप्त रूप से मजबूत प्रकार प्रणाली (जैसे हास्केल) वाली भाषा में, कम्प्यूटेशनल शुद्ध कोड से नियंत्रण संचालन (यानी, निरंतरता) का उपयोग करने वाले कंप्यूटेशंस को समाहित करने के लिए टाइप सिस्टम का उपयोग करना संभव है।
सारांश
अब हम जानकारी सीधे अपने तीन सवालों के जवाब देने के लिए आवश्यक है:
- Clojure प्रथम श्रेणी के व्यावहारिक दृष्टिकोण के कारण निरंतरता का समर्थन नहीं करता।
- सभी भाषाओं को सैद्धांतिक अर्थ में निरंतरता पर बनाया गया है, लेकिन कुछ भाषाएं प्रथम श्रेणी की वस्तुओं के रूप में निरंतरता का पर्दाफाश करती हैं। हालांकि, सीपीएस में परिवर्तन, उदाहरण के माध्यम से, किसी भी भाषा में निरंतरता जोड़ना संभव है।
- delimc और/या pulley.cps के लिए प्रलेखन देखें।
आपका प्रश्न शीर्षक प्रश्न टेक्स्ट के साथ बहुत कुछ नहीं लगता है। –
क्या यह बेहतर है? कॉल स्टैक – unj2