टाइपस्टेट विश्लेषण

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

टाइपस्टेट व्यवहार प्रकार के परिशोधन का प्रतिनिधित्व करने में सक्षम हैं जैसे कि विधि ए को विधि बी से पहले लागू किया जाना चाहिए, और विधि सी को बीच में लागू नहीं किया जा सकता है। टाइपस्टेट्स उन संसाधनों का प्रतिनिधित्व करने के लिए उपयुक्त हैं जो ओपन/क्लोज़ सेमेन्टिक्स का उपयोग शब्दार्थिक रूप से मान्य अनुक्रमों को लागू करके करते हैं जैसे कि ओपन फिर क्लोज अमान्य अनुक्रमों के विपरीत जैसे कि एक खुली स्थिति में फ़ाइल छोड़ना। ऐसे संसाधनों में फ़ाइल सिस्टम तत्व, लेन-देन, कनेक्शन और प्रोटोकॉल शामिल हैं। उदाहरण के लिए, डेवलपर्स यह निर्दिष्ट करना चाह सकते हैं कि फ़ाइलों या सॉकेट्स को पढ़ने या लिखे जाने से पहले खोला जाना चाहिए, और अगर उन्हें बंद कर दिया गया है तो उन्हें अब पढ़ा या लिखा नहीं जा सकता है। टाइपस्टेट नाम इस तथ्य से उपजा है कि इस प्रकार का विश्लेषण अक्सर प्रत्येक प्रकार की वस्तु को परिमित राज्य मशीन के रूप में मॉडल करता है। इस राज्य मशीन में, प्रत्येक राज्य में अनुमत विधियों/संदेशों का एक अच्छी तरह से परिभाषित सेट होता है, और विधि आमंत्रण राज्य संक्रमण का कारण बन सकता है। रिफाइनमेंट_टाइप के साथ उपयोग के लिए पेट्री डिश को संभावित व्यवहार मॉडल के रूप में भी प्रस्तावित किया गया है। 1983 में रोब स्ट्रोम द्वारा टाइपस्टेट विश्लेषण पेश किया गया था थॉमस जे. वॉटसन रिसर्च सेंटर | आईबीएम की वॉटसन लैब में विकसित नेटवर्क कार्यान्वयन भाषा (NIL) में। इसे 1986 के एक लेख में स्ट्रोम और येमिनी द्वारा औपचारिक रूप दिया गया था यह वर्णन करता है कि टाइपस्टेट का उपयोग चर के आरंभीकरण की डिग्री को ट्रैक करने के लिए कैसे किया जाता है, यह गारंटी देता है कि अनुचित तरीके से आरंभिक डेटा पर संचालन कभी भी लागू नहीं किया जाएगा, और आगे हर्मीस (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा में सामान्यीकृत किया जाएगा।

हाल के वर्षों में, विभिन्न अध्ययनों ने ऑब्जेक्ट-ओरिएंटेड भाषाओं में टाइपस्टेट अवधारणा को लागू करने के तरीके विकसित किए हैं।

दृष्टिकोण
स्ट्रोम और येमिनी (1986) को किसी दिए गए प्रकार के आंशिक रूप से आदेशित होने के लिए टाइपस्टेट्स के सेट की आवश्यकता होती है, ताकि कुछ जानकारी को हटाकर एक निम्न टाइपस्टेट को उच्चतर से प्राप्त किया जा सके। उदाहरण के लिए, ए  C (प्रोग्रामिंग लैंग्वेज) में वेरिएबल में आमतौर पर टाइपस्टेट्स अनइनिशियलाइज़्ड <इनिशियलाइज़्ड होते हैं, और a   पॉइंटर में टाइपस्टेट्स को आवंटित नहीं किया जा सकता है <आवंटित, लेकिन अप्रारंभीकृत <प्रारंभिक, लेकिन फ़ाइल नहीं खोली गई <फ़ाइल खोली गई। इसके अलावा, स्ट्रोम और येमिनी के लिए आवश्यक है कि प्रत्येक दो टाइपस्टेट्स की सबसे बड़ी निचली सीमा हो, यानी आंशिक क्रम एक मिलना-अर्ध-जाली भी हो; और यह कि प्रत्येक क्रम में एक न्यूनतम अवयव होता है, जिसे हमेशा ⊥ कहा जाता है।

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

प्रत्येक दो टाइपस्टेट्स के लिए टी1 कवरिंग रिलेशन|<· टी2, एक अद्वितीय टाइपस्टेट जबरदस्ती ऑपरेशन प्रदान करने की आवश्यकता है, जो टाइपस्टेट टी की वस्तु पर लागू होने पर2, इसके टाइपस्टेट को t तक कम कर देता है1, संभवतः कुछ संसाधन जारी करके। उदाहरण के लिए,  चेकों  फ़ाइल से टाइपस्टेट प्रारंभ करने के लिए खोला गया, लेकिन फ़ाइल नहीं खोली गई।

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

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

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

टाइपस्टेट अनुमान
कार्यक्रमों (या अनुबंधों जैसे अन्य कलाकृतियों) से टाइपस्टेट्स का अनुमान लगाने के लिए कई दृष्टिकोण हैं। उनमें से कई संकलन समय पर टाइपस्टेट्स का अनुमान लगा सकते हैं   और अन्य मॉडल को गतिशील रूप से माइन करते हैं।

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

यह भी देखें

 * अनुबंध द्वारा डिजाइन
 * रैखिक प्रकार प्रणाली
 * प्रभाव प्रणाली
 * रनटाइम सत्यापन