मॉड्यूल-3: Difference between revisions

From Vigyanwiki
No edit summary
Line 22: Line 22:
}}
}}


Modula-3 एक [[प्रोग्रामिंग भाषा]] है जिसे [[Modula-2]] के उन्नत संस्करण के उत्तराधिकारी के रूप में तैयार किया गया है जिसे [[Modula-2+]] के नाम से जाना जाता है। हालांकि यह अनुसंधान क्षेत्रों में प्रभावशाली रहा है ([[जावा (प्रोग्रामिंग भाषा)]], सी शार्प (प्रोग्रामिंग भाषा)|सी#, [[पायथन (प्रोग्रामिंग भाषा)]] जैसी भाषाओं के डिजाइन को प्रभावित कर रहा है।<ref>{{Cite web |url=https://docs.python.org/3/faq/design.html#why-self |title=Design and History FAQ: Why must 'self' be used explicitly in method definitions and calls? |date=March 21, 2020 |website=Python.org |access-date=2020-03-21}}</ref> और [[निम (प्रोग्रामिंग भाषा)]]) इसे उद्योग में व्यापक रूप से नहीं अपनाया गया है। इसे [[डिजिटल उपकरण निगम]] (डीईसी) [[डीईसी सिस्टम्स रिसर्च सेंटर]] (एसआरसी) में [[लुका कार्डेली]], जेम्स डोनह्यू, ल्यूसिल ग्लासमैन, मिक जॉर्डन ([[ओलिवेत्ति]] सॉफ्टवेयर टेक्नोलॉजी प्रयोगशाला से पहले), बिल कल्सो और [[ग्रेग नेल्सन (कंप्यूटर वैज्ञानिक)]] द्वारा डिजाइन किया गया था। 1980 के दशक के अंत में ओलिवेटी रिसर्च सेंटर (ओआरसी)।
Modula-3 [[प्रोग्रामिंग भाषा]] है जिसे [[Modula-2]] के उन्नत संस्करण के उत्तराधिकारी के रूप में तैयार किया गया है जिसे [[Modula-2+]] के नाम से जाना जाता है। हालांकि यह अनुसंधान क्षेत्रों में प्रभावशाली रहा है ([[जावा (प्रोग्रामिंग भाषा)]], सी शार्प (प्रोग्रामिंग भाषा)|सी#, [[पायथन (प्रोग्रामिंग भाषा)]] जैसी भाषाओं के डिजाइन को प्रभावित कर रहा है।<ref>{{Cite web |url=https://docs.python.org/3/faq/design.html#why-self |title=Design and History FAQ: Why must 'self' be used explicitly in method definitions and calls? |date=March 21, 2020 |website=Python.org |access-date=2020-03-21}}</ref> और [[निम (प्रोग्रामिंग भाषा)]]) इसे उद्योग में व्यापक रूप से नहीं अपनाया गया है। इसे [[डिजिटल उपकरण निगम]] (डीईसी) [[डीईसी सिस्टम्स रिसर्च सेंटर]] (एसआरसी) में [[लुका कार्डेली]], जेम्स डोनह्यू, ल्यूसिल ग्लासमैन, मिक जॉर्डन ([[ओलिवेत्ति]] सॉफ्टवेयर टेक्नोलॉजी प्रयोगशाला से पहले), बिल कल्सो और [[ग्रेग नेल्सन (कंप्यूटर वैज्ञानिक)]] द्वारा डिजाइन किया गया था। 1980 के दशक के अंत में ओलिवेटी रिसर्च सेंटर (ओआरसी)।


मॉड्यूला-3 की मुख्य विशेषताएं सिस्टम-प्रोग्रामिंग भाषा की शक्ति को संरक्षित करते हुए सरलता और सुरक्षा हैं। मॉड्यूला-3 का उद्देश्य व्यावहारिक वास्तविक दुनिया प्रोग्रामिंग के लिए नए निर्माणों को पेश करते हुए प्रकार की सुरक्षा की [[पास्कल (प्रोग्रामिंग भाषा)]] परंपरा को जारी रखना है। विशेष रूप से मॉड्यूला-3 में [[ सामान्य प्रोग्रामिंग ]] ([[टेम्पलेट (प्रोग्रामिंग)]] के समान), [[थ्रेड (कंप्यूटर विज्ञान)]], अपवाद प्रबंधन, कचरा संग्रह (कंप्यूटर विज्ञान), [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]], [[आंशिक रहस्योद्घाटन]] के लिए समर्थन जोड़ा गया{{Explain|date=August 2021}}, और असुरक्षित कोड का स्पष्ट अंकन। मॉड्यूला-3 का डिज़ाइन लक्ष्य एक ऐसी भाषा थी जो आधुनिक [[अनिवार्य प्रोग्रामिंग]] भाषाओं की सबसे महत्वपूर्ण विशेषताओं को काफी बुनियादी रूपों में लागू करती है। इस प्रकार कथित रूप से खतरनाक और जटिल विशेषताएं जैसे एकाधिक वंशानुक्रम और [[ऑपरेटर ओवरलोडिंग]] को छोड़ दिया गया।
मॉड्यूला-3 की मुख्य विशेषताएं सिस्टम-प्रोग्रामिंग भाषा की शक्ति को संरक्षित करते हुए सरलता और सुरक्षा हैं। मॉड्यूला-3 का उद्देश्य व्यावहारिक वास्तविक दुनिया प्रोग्रामिंग के लिए नए निर्माणों को पेश करते हुए प्रकार की सुरक्षा की [[पास्कल (प्रोग्रामिंग भाषा)]] परंपरा को जारी रखना है। विशेष रूप से मॉड्यूला-3 में [[ सामान्य प्रोग्रामिंग |सामान्य प्रोग्रामिंग]] ([[टेम्पलेट (प्रोग्रामिंग)]] के समान), [[थ्रेड (कंप्यूटर विज्ञान)]], अपवाद प्रबंधन, कचरा संग्रह (कंप्यूटर विज्ञान), [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] , [[आंशिक रहस्योद्घाटन]] के लिए समर्थन जोड़ा गया, और असुरक्षित कोड का स्पष्ट अंकन। मॉड्यूला-3 का डिज़ाइन लक्ष्य ऐसी भाषा थी जो आधुनिक [[अनिवार्य प्रोग्रामिंग]] भाषाओं की सबसे महत्वपूर्ण विशेषताओं को काफी बुनियादी रूपों में लागू करती है। इस प्रकार कथित रूप से खतरनाक और जटिल विशेषताएं जैसे एकाधिक वंशानुक्रम और [[ऑपरेटर ओवरलोडिंग]] को छोड़ दिया गया।


==ऐतिहासिक विकास==
==ऐतिहासिक विकास==
मोडुला-3 परियोजना नवंबर 1986 में शुरू हुई जब [[मौरिस विल्केस]] ने मॉड्यूला के नए संस्करण के लिए कुछ विचारों के साथ [[ निकोलस विर्थ ]] को लिखा। विल्केस इस बिंदु से ठीक पहले डीईसी में काम कर रहे थे, और इंग्लैंड लौट आए थे और ओलिवेटी के अनुसंधान रणनीति बोर्ड में शामिल हो गए थे। विर्थ पहले ही [[ओबेरॉन (प्रोग्रामिंग भाषा)]] में चले गए थे, लेकिन विल्क्स की टीम द्वारा मोडुला नाम के तहत विकास जारी रखने में उन्हें कोई समस्या नहीं थी। भाषा की परिभाषा अगस्त 1988 में पूरी हुई, और जनवरी 1989 में एक अद्यतन संस्करण पूरा हुआ। डीईसी और ओलिवेटी के कंपाइलर्स ने जल्द ही इसका अनुसरण किया, और उसके बाद तीसरे पक्ष का कार्यान्वयन हुआ।
मोडुला-3 परियोजना नवंबर 1986 में शुरू हुई जब [[मौरिस विल्केस]] ने मॉड्यूला के नए संस्करण के लिए कुछ विचारों के साथ [[ निकोलस विर्थ |निकोलस विर्थ]] को लिखा। विल्केस इस बिंदु से ठीक पहले डीईसी में काम कर रहे थे, और इंग्लैंड लौट आए थे और ओलिवेटी के अनुसंधान रणनीति बोर्ड में शामिल हो गए थे। विर्थ पहले ही [[ओबेरॉन (प्रोग्रामिंग भाषा)]] में चले गए थे, लेकिन विल्क्स की टीम द्वारा मोडुला नाम के तहत विकास जारी रखने में उन्हें कोई समस्या नहीं थी। भाषा की परिभाषा अगस्त 1988 में पूरी हुई, और जनवरी 1989 में अद्यतन संस्करण पूरा हुआ। डीईसी और ओलिवेटी के कंपाइलर्स ने जल्द ही इसका अनुसरण किया, और उसके बाद तीसरे पक्ष का कार्यान्वयन हुआ।


इसका डिज़ाइन उस समय एसआरसी और [[बलूत का फल कंप्यूटर]] रिसर्च सेंटर (एआरसी, बाद में ओआरसी जब ओलिवेटी [[ कब्जा ]] एकोर्न) में उपयोग में आने वाली मोडुला-2+ भाषा पर काम से काफी प्रभावित था, जो वह भाषा थी जिसमें ऑपरेटिंग सिस्टम था DEC फ़ायरफ़्लाई मल्टीप्रोसेसर [[VAX]] वर्कस्टेशन लिखा गया था और जिसमें [[एआरएम वास्तुकला]] आधारित [[बलूत का फल आर्किमिडीज़]] श्रेणी के कंप्यूटरों के ARX (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम प्रोजेक्ट के लिए ARC पर एकॉर्न सी और मॉड्यूला एक्ज़ीक्यूशन लाइब्रेरी (CAMEL) के लिए एकोर्न कंपाइलर लिखा गया था। जैसा कि संशोधित मॉड्यूला -3 रिपोर्ट में कहा गया है, भाषा अन्य भाषाओं जैसे [[मेसा (प्रोग्रामिंग भाषा)]], सीडर (प्रोग्रामिंग भाषा), [[ऑब्जेक्ट पास्कल]], ओबेरॉन (प्रोग्रामिंग भाषा) और [[यूक्लिड (प्रोग्रामिंग भाषा)]] से प्रभावित थी।<ref name=DecSrcRr052>[http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-52.html Modula-3 report (revised)] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 52 (November 1989)</ref>
इसका डिज़ाइन उस समय एसआरसी और [[बलूत का फल कंप्यूटर]] रिसर्च सेंटर (एआरसी, बाद में ओआरसी जब ओलिवेटी [[ कब्जा |कब्जा]] एकोर्न) में उपयोग में आने वाली मोडुला-2+ भाषा पर काम से काफी प्रभावित था, जो वह भाषा थी जिसमें ऑपरेटिंग सिस्टम था DEC फ़ायरफ़्लाई मल्टीप्रोसेसर [[VAX]] वर्कस्टेशन लिखा गया था और जिसमें [[एआरएम वास्तुकला]] आधारित [[बलूत का फल आर्किमिडीज़]] श्रेणी के कंप्यूटरों के ARX (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम प्रोजेक्ट के लिए ARC पर एकॉर्न सी और मॉड्यूला एक्ज़ीक्यूशन लाइब्रेरी (CAMEL) के लिए एकोर्न कंपाइलर लिखा गया था। जैसा कि संशोधित मॉड्यूला -3 रिपोर्ट में कहा गया है, भाषा अन्य भाषाओं जैसे [[मेसा (प्रोग्रामिंग भाषा)]], सीडर (प्रोग्रामिंग भाषा), [[ऑब्जेक्ट पास्कल]], ओबेरॉन (प्रोग्रामिंग भाषा) और [[यूक्लिड (प्रोग्रामिंग भाषा)]] से प्रभावित थी।<ref name=DecSrcRr052>[http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-52.html Modula-3 report (revised)] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 52 (November 1989)</ref>
1990 के दशक के दौरान, मॉड्यूला-3 ने एक शिक्षण भाषा के रूप में काफी लोकप्रियता हासिल की, लेकिन इसे कभी भी औद्योगिक उपयोग के लिए व्यापक रूप से नहीं अपनाया गया। इसमें योगदान देने वाला एक प्रमुख मॉड्यूला-3 समर्थक डीईसी का निधन हो सकता है (विशेषकर जब 1998 में डीईसी को [[कॉम्पैक]] को बेचे जाने से पहले इसने इसे प्रभावी ढंग से बनाए रखना बंद कर दिया था)। किसी भी मामले में, मॉड्यूला-3 की सरलता और शक्ति के बावजूद, ऐसा प्रतीत होता है कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रतिबंधित कार्यान्वयन के साथ प्रक्रियात्मक [[संकलित भाषा]] की बहुत कम मांग थी। कुछ समय के लिए, CM3 नाम का एक वाणिज्यिक [[ संकलक ]] DEC SRC के पूर्व मुख्य कार्यान्वयनकर्ताओं में से एक द्वारा बनाए रखा गया था, जिसे DEC से पहले काम पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एक एकीकृत विकास वातावरण (आईडीई) और एक एक्स्टेंसिबल [[जावा वर्चुअल मशीन]] ([[बाइनरी कोड]] में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा पेश किए गए थे, लेकिन उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। {{not a typo|elego}} सॉफ्टवेयर सॉल्यूशंस जीएमबीएच। मॉड्यूला-3 अब विश्वविद्यालयों में ज्यादातर तुलनात्मक प्रोग्रामिंग भाषा पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः Modula-3 का एकमात्र कॉर्पोरेट समर्थक है {{not a typo|elego}}, जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में CM3 सिस्टम के कई रिलीज़ किए हैं। रिएक्टर आईडीई को कई वर्षों के बाद खुला स्रोत जारी किया गया है, नए नाम सीएम3-आईडीई के साथ। मार्च 2002 में, {{not a typo|elego}} ने एक अन्य सक्रिय मॉड्यूला-3 वितरण, पीएम3 के भंडार को भी अपने कब्जे में ले लिया, जिसे तब तक इकोले पॉलिटेक्निक डी मॉन्ट्रियल में बनाए रखा गया था, लेकिन बाद में एचएम3 पर काम जारी रहा, बाद के वर्षों में इसमें सुधार हुआ जब तक कि यह अप्रचलित नहीं हो गया।
1990 के दशक के दौरान, मॉड्यूला-3 ने शिक्षण भाषा के रूप में काफी लोकप्रियता हासिल की, लेकिन इसे कभी भी औद्योगिक उपयोग के लिए व्यापक रूप से नहीं अपनाया गया। इसमें योगदान देने वाला प्रमुख मॉड्यूला-3 समर्थक डीईसी का निधन हो सकता है (विशेषकर जब 1998 में डीईसी को [[कॉम्पैक]] को बेचे जाने से पहले इसने इसे प्रभावी ढंग से बनाए रखना बंद कर दिया था)। किसी भी मामले में, मॉड्यूला-3 की सरलता और शक्ति के बावजूद, ऐसा प्रतीत होता है कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रतिबंधित कार्यान्वयन के साथ प्रक्रियात्मक [[संकलित भाषा]] की बहुत कम मांग थी। कुछ समय के लिए, CM3 नाम का वाणिज्यिक [[ संकलक |संकलक]] DEC SRC के पूर्व मुख्य कार्यान्वयनकर्ताओं में से द्वारा बनाए रखा गया था, जिसे DEC से पहले काम पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एकीकृत विकास वातावरण (आईडीई) और एक्स्टेंसिबल [[जावा वर्चुअल मशीन]] ([[बाइनरी कोड]] में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा पेश किए गए थे, लेकिन उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। {{not a typo|elego}} सॉफ्टवेयर सॉल्यूशंस जीएमबीएच। मॉड्यूला-3 अब विश्वविद्यालयों में ज्यादातर तुलनात्मक प्रोग्रामिंग भाषा पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः Modula-3 का एकमात्र कॉर्पोरेट समर्थक है {{not a typo|elego}}, जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में CM3 सिस्टम के कई रिलीज़ किए हैं। रिएक्टर आईडीई को कई वर्षों के बाद खुला स्रोत जारी किया गया है, नए नाम सीएम3-आईडीई के साथ। मार्च 2002 में, {{not a typo|elego}} ने अन्य सक्रिय मॉड्यूला-3 वितरण, पीएम3 के भंडार को भी अपने कब्जे में ले लिया, जिसे तब तक इकोले पॉलिटेक्निक डी मॉन्ट्रियल में बनाए रखा गया था, लेकिन बाद में एचएम3 पर काम जारी रहा, बाद के वर्षों में इसमें सुधार हुआ जब तक कि यह अप्रचलित नहीं हो गया।


==वाक्यविन्यास==
==वाक्यविन्यास==
{{Expand section|date=July 2011}}<!-- Still needs some fleshing out. -->
किसी भाषा के [[सिंटैक्स (प्रोग्रामिंग भाषाएँ)]] का सामान्य उदाहरण हैलो, वर्ल्ड! कार्यक्रम.
किसी भाषा के [[सिंटैक्स (प्रोग्रामिंग भाषाएँ)]] का एक सामान्य उदाहरण हैलो, वर्ल्ड! कार्यक्रम.


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
Line 44: Line 43:
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>


मॉड्यूल-3 के सभी प्रोग्रामों में कम से कम एक मॉड्यूल फ़ाइल होती है, जबकि अधिकांश में एक इंटरफ़ेस फ़ाइल भी शामिल होती है जिसका उपयोग क्लाइंट मॉड्यूल से डेटा तक पहुंचने के लिए करते हैं। कुछ अन्य भाषाओं की तरह, एक मॉड्यूला-3 प्रोग्राम को एक मुख्य मॉड्यूल निर्यात करना होगा, जो या तो Main.m3 नाम की एक फ़ाइल हो सकती है, या एक फ़ाइल कॉल कर सकती है <code>EXPORT</code> मुख्य मॉड्यूल निर्यात करने के लिए। <सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >मॉड्यूल फू एक्सपोर्ट्स मुख्य</सिंटैक्सहाइलाइट> मॉड्यूल फ़ाइल नाम स्रोत कोड में नाम के समान होने की सलाह दी जाती है। यदि वे भिन्न हैं, तो कंपाइलर केवल एक चेतावनी उत्सर्जित करता है।
मॉड्यूल-3 के सभी प्रोग्रामों में कम से कम मॉड्यूल फ़ाइल होती है, जबकि अधिकांश में इंटरफ़ेस फ़ाइल भी शामिल होती है जिसका उपयोग क्लाइंट मॉड्यूल से डेटा तक पहुंचने के लिए करते हैं। कुछ अन्य भाषाओं की तरह, मॉड्यूला-3 प्रोग्राम को मुख्य मॉड्यूल निर्यात करना होगा, जो या तो Main.m3 नाम की फ़ाइल हो सकती है, या फ़ाइल कॉल कर सकती है <code>EXPORT</code> मुख्य मॉड्यूल निर्यात करने के लिए। <सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >मॉड्यूल फू एक्सपोर्ट्स मुख्य</सिंटैक्सहाइलाइट> मॉड्यूल फ़ाइल नाम स्रोत कोड में नाम के समान होने की सलाह दी जाती है। यदि वे भिन्न हैं, तो कंपाइलर केवल चेतावनी उत्सर्जित करता है।


सिंटैक्स में अन्य परंपराओं में इंटरफ़ेस के निर्यातित प्रकार का नामकरण शामिल है <code>T</code>, चूंकि प्रकार आमतौर पर उनके पूर्ण नामों से योग्य होते हैं, इसलिए एक प्रकार <code>T</code> अंदर एक मॉड्यूल का नाम Foo रखा जाएगा <code>Foo.T</code>. इससे पठनीयता में सहायता मिलती है. इसी तरह का एक अन्य सम्मेलन किसी सार्वजनिक वस्तु का नामकरण करना है <code>Public</code> जैसा कि नीचे दिए गए OOP उदाहरणों में है।
सिंटैक्स में अन्य परंपराओं में इंटरफ़ेस के निर्यातित प्रकार का नामकरण शामिल है <code>T</code>, चूंकि प्रकार आमतौर पर उनके पूर्ण नामों से योग्य होते हैं, इसलिए प्रकार <code>T</code> अंदर मॉड्यूल का नाम Foo रखा जाएगा <code>Foo.T</code>. इससे पठनीयता में सहायता मिलती है. इसी तरह का अन्य सम्मेलन किसी सार्वजनिक वस्तु का नामकरण करना है <code>Public</code> जैसा कि नीचे दिए गए OOP उदाहरणों में है।


==भाषा विशेषताएँ==
==भाषा विशेषताएँ==


===मॉड्यूलैरिटी===
===मॉड्यूलैरिटी===
सबसे पहले और सबसे महत्वपूर्ण, सभी संकलित इकाइयाँ या तो हैं <code>INTERFACE</code> या कार्यान्वयन <code>MODULE</code>एस, एक स्वाद या दूसरे का। कीवर्ड से शुरू होने वाली एक इंटरफ़ेस संकलित इकाई <code>INTERFACE</code>, स्थिरांक, प्रकार, चर, अपवाद और प्रक्रियाओं को परिभाषित करता है। कार्यान्वयन मॉड्यूल, कीवर्ड से शुरू होता है <code>MODULE</code>, इंटरफ़ेस को लागू करने के लिए आवश्यक कोड और कोई अन्य स्थिरांक, प्रकार या चर प्रदान करता है। डिफ़ॉल्ट रूप से, एक कार्यान्वयन मॉड्यूल उसी नाम के इंटरफ़ेस को लागू करेगा, लेकिन एक मॉड्यूल स्पष्ट रूप से कर सकता है <code>EXPORT</code> एक ऐसे मॉड्यूल के लिए जिसका नाम समान नहीं है। उदाहरण के लिए, मुख्य प्रोग्राम मुख्य इंटरफ़ेस के लिए एक कार्यान्वयन मॉड्यूल निर्यात करता है।
सबसे पहले और सबसे महत्वपूर्ण, सभी संकलित इकाइयाँ या तो हैं <code>INTERFACE</code> या कार्यान्वयन <code>MODULE</code>एस, स्वाद या दूसरे का। कीवर्ड से शुरू होने वाली इंटरफ़ेस संकलित इकाई <code>INTERFACE</code>, स्थिरांक, प्रकार, चर, अपवाद और प्रक्रियाओं को परिभाषित करता है। कार्यान्वयन मॉड्यूल, कीवर्ड से शुरू होता है <code>MODULE</code>, इंटरफ़ेस को लागू करने के लिए आवश्यक कोड और कोई अन्य स्थिरांक, प्रकार या चर प्रदान करता है। डिफ़ॉल्ट रूप से, कार्यान्वयन मॉड्यूल उसी नाम के इंटरफ़ेस को लागू करेगा, लेकिन मॉड्यूल स्पष्ट रूप से कर सकता है <code>EXPORT</code> ऐसे मॉड्यूल के लिए जिसका नाम समान नहीं है। उदाहरण के लिए, मुख्य प्रोग्राम मुख्य इंटरफ़ेस के लिए कार्यान्वयन मॉड्यूल निर्यात करता है।


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
Line 71: Line 70:
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>


आमतौर पर, कोई केवल इंटरफ़ेस आयात करता है, और इंटरफ़ेस के भीतर आइटम तक पहुंचने के लिए 'डॉट' नोटेशन का उपयोग करता है (रिकॉर्ड के भीतर फ़ील्ड तक पहुंचने के समान)। एक सामान्य उपयोग किसी भी समर्थन प्रक्रिया के साथ प्रति इंटरफ़ेस एक [[डेटा संरचना]] (रिकॉर्ड या ऑब्जेक्ट) को परिभाषित करना है। यहां मुख्य प्रकार को 'टी' नाम मिलेगा, और एक का उपयोग इन के रूप में किया जाएगा <code>MyModule.T</code>.
आमतौर पर, कोई केवल इंटरफ़ेस आयात करता है, और इंटरफ़ेस के भीतर आइटम तक पहुंचने के लिए 'डॉट' नोटेशन का उपयोग करता है (रिकॉर्ड के भीतर फ़ील्ड तक पहुंचने के समान)। सामान्य उपयोग किसी भी समर्थन प्रक्रिया के साथ प्रति इंटरफ़ेस [[डेटा संरचना]] (रिकॉर्ड या ऑब्जेक्ट) को परिभाषित करना है। यहां मुख्य प्रकार को 'टी' नाम मिलेगा, और का उपयोग इन के रूप में किया जाएगा <code>MyModule.T</code>.


आयातित मॉड्यूल और मॉड्यूल के भीतर अन्य इकाई के बीच नाम टकराव की स्थिति में, आरक्षित शब्द
आयातित मॉड्यूल और मॉड्यूल के भीतर अन्य इकाई के बीच नाम टकराव की स्थिति में, आरक्षित शब्द
Line 78: Line 77:


===सुरक्षित बनाम असुरक्षित===
===सुरक्षित बनाम असुरक्षित===
कुछ क्षमताएं असुरक्षित मानी जाती हैं, जहां कंपाइलर अब गारंटी नहीं दे सकता कि परिणाम सुसंगत होंगे; उदाहरण के लिए, जब C (प्रोग्रामिंग भाषा) भाषा से इंटरफ़ेस किया जाता है। कीवर्ड <code>UNSAFE</code> के सामने उपसर्ग लगाया गया <code>INTERFACE</code> या <code>MODULE</code>, का उपयोग संकलक को भाषा की कुछ निम्न स्तरीय विशेषताओं को सक्षम करने के लिए बताने के लिए किया जा सकता है। उदाहरण के लिए, एक असुरक्षित ऑपरेशन उपयोग किए जाने वाले प्रकार के सिस्टम को बायपास कर रहा है <code>LOOPHOLE</code> किसी पूर्णांक के बिट्स को फ़्लोटिंग पॉइंट में कॉपी करना <code>REAL</code> संख्या।
कुछ क्षमताएं असुरक्षित मानी जाती हैं, जहां कंपाइलर अब गारंटी नहीं दे सकता कि परिणाम सुसंगत होंगे; उदाहरण के लिए, जब C (प्रोग्रामिंग भाषा) भाषा से इंटरफ़ेस किया जाता है। कीवर्ड <code>UNSAFE</code> के सामने उपसर्ग लगाया गया <code>INTERFACE</code> या <code>MODULE</code>, का उपयोग संकलक को भाषा की कुछ निम्न स्तरीय विशेषताओं को सक्षम करने के लिए बताने के लिए किया जा सकता है। उदाहरण के लिए, असुरक्षित ऑपरेशन उपयोग किए जाने वाले प्रकार के सिस्टम को बायपास कर रहा है <code>LOOPHOLE</code> किसी पूर्णांक के बिट्स को फ़्लोटिंग पॉइंट में कॉपी करना <code>REAL</code> संख्या।


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


===जेनेरिक===
===जेनेरिक===
एक सामान्य इंटरफ़ेस और उसके अनुरूप सामान्य मॉड्यूल,
एक सामान्य इंटरफ़ेस और उसके अनुरूप सामान्य मॉड्यूल,
उपसर्ग करें <code>INTERFACE</code> या <code>MODULE</code> कीवर्ड के साथ <code>GENERIC</code>, और औपचारिक तर्क के रूप में अन्य इंटरफ़ेस लें। इस प्रकार ([[टेम्पलेट ([[सी++]])]]|सी++ टेम्प्लेट की तरह) कोई आसानी से अमूर्त डेटा प्रकारों को परिभाषित और उपयोग कर सकता है, लेकिन सी++ के विपरीत, ग्रैन्युलैरिटी मॉड्यूल स्तर पर है। एक इंटरफ़ेस को सामान्य इंटरफ़ेस और कार्यान्वयन मॉड्यूल को तर्क के रूप में पास किया जाता है, और कंपाइलर ठोस मॉड्यूल उत्पन्न करेगा।
उपसर्ग करें <code>INTERFACE</code> या <code>MODULE</code> कीवर्ड के साथ <code>GENERIC</code>, और औपचारिक तर्क के रूप में अन्य इंटरफ़ेस लें। इस प्रकार ([[टेम्पलेट ([[सी++]])]]|सी++ टेम्प्लेट की तरह) कोई आसानी से अमूर्त डेटा प्रकारों को परिभाषित और उपयोग कर सकता है, लेकिन सी++ के विपरीत, ग्रैन्युलैरिटी मॉड्यूल स्तर पर है। इंटरफ़ेस को सामान्य इंटरफ़ेस और कार्यान्वयन मॉड्यूल को तर्क के रूप में पास किया जाता है, और कंपाइलर ठोस मॉड्यूल उत्पन्न करेगा।


उदाहरण के लिए, कोई जेनेरिकस्टैक को परिभाषित कर सकता है, फिर इसे इंटरफेस जैसे इंस्टेंटियेट कर सकता है <code>IntegerElem</code>, या <code>RealElem</code>, या ऑब्जेक्ट के लिए इंटरफ़ेस भी, जब तक कि उनमें से प्रत्येक इंटरफ़ेस सामान्य मॉड्यूल के लिए आवश्यक गुणों को परिभाषित करता है।
उदाहरण के लिए, कोई जेनेरिकस्टैक को परिभाषित कर सकता है, फिर इसे इंटरफेस जैसे इंस्टेंटियेट कर सकता है <code>IntegerElem</code>, या <code>RealElem</code>, या ऑब्जेक्ट के लिए इंटरफ़ेस भी, जब तक कि उनमें से प्रत्येक इंटरफ़ेस सामान्य मॉड्यूल के लिए आवश्यक गुणों को परिभाषित करता है।


नंगे प्रकार <code>INTEGER</code>, या <code>REAL</code> उपयोग नहीं किया जा सकता, क्योंकि वे मॉड्यूल नहीं हैं, और जेनरिक की प्रणाली मॉड्यूल को तर्क के रूप में उपयोग करने पर आधारित है। तुलनात्मक रूप से, C++ टेम्पलेट में, एक नंगे प्रकार का उपयोग किया जाएगा।
नंगे प्रकार <code>INTEGER</code>, या <code>REAL</code> उपयोग नहीं किया जा सकता, क्योंकि वे मॉड्यूल नहीं हैं, और जेनरिक की प्रणाली मॉड्यूल को तर्क के रूप में उपयोग करने पर आधारित है। तुलनात्मक रूप से, C++ टेम्पलेट में, नंगे प्रकार का उपयोग किया जाएगा।


फ़ाइल: IntegerElem.i3
फ़ाइल: IntegerElem.i3
Line 107: Line 106:
(* यहां Element.T जेनेरिक स्टैक में संग्रहित किया जाने वाला प्रकार है। *)
(* यहां Element.T जेनेरिक स्टैक में संग्रहित किया जाने वाला प्रकार है। *)
प्रकार
प्रकार
  टी = सार्वजनिक वस्तु;
  टी = सार्वजनिक वस्तु;
  सार्वजनिक = वस्तु
  सार्वजनिक = वस्तु
  विधि
  विधि
      init(): TStack;
  init(): TStack;
      प्रारूप(): पाठ;
  प्रारूप(): पाठ;
      खाली है(): बूलियन;
  खाली है(): बूलियन;
      गिनती(): पूर्णांक;
  गिनती(): पूर्णांक;
      पुश (एल्म: एलिमेंट.टी);
  पुश (एल्म: एलिमेंट.टी);
      पॉप (VAR elem: Element.T): बूलियन;
  पॉप (VAR elem: Element.T): बूलियन;
  अंत;
  अंत;
जेनेरिकस्टैक समाप्त करें।
जेनेरिकस्टैक समाप्त करें।
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>
Line 127: Line 126:
प्रक्रिया प्रारूप (स्वयं: टी): पाठ =
प्रक्रिया प्रारूप (स्वयं: टी): पाठ =
वीएआर
वीएआर
  str: पाठ;
  str: पाठ;
शुरू
शुरू
  str := Element.Name & Stack{ ;
  str := Element.Name & Stack{ ;
  k के लिए := 0 प्रति self.n -1 DO
  k के लिए�:= 0 प्रति self.n -1 DO
      यदि k > 0 तो str := str & , ; अंत;
  यदि k > 0 तो strt:= str & , ; अंत;
      str := str और Element.Format(self.arr[k]);
  strs:= str और Element.Format(self.arr[k]);
  अंत;
  अंत;
  str := str & }; ;
  str := str & }; ;
  रिटर्न स्ट्र;
  रिटर्न स्ट्र;
अंत प्रारूप;
अंत प्रारूप;
<... अधिक सामान्य कार्यान्वयन विवरण... >
<... अधिक सामान्य कार्यान्वयन विवरण... >
Line 154: Line 153:


===ट्रेसेबिलिटी===
===ट्रेसेबिलिटी===
अन्य भाषाओं की 'शामिल' सुविधा के विपरीत, किसी भी पहचानकर्ता का पता वहीं लगाया जा सकता है जहां से उसकी उत्पत्ति हुई थी। एक संकलित इकाई को अन्य संकलित इकाइयों से पहचानकर्ताओं को आयात करना होगा <code>IMPORT</code> कथन। यहां तक ​​कि गणनाएं भी उसी 'डॉट' नोटेशन का उपयोग करती हैं जैसा कि किसी रिकॉर्ड के फ़ील्ड तक पहुंचने के दौरान किया जाता है।
अन्य भाषाओं की 'शामिल' सुविधा के विपरीत, किसी भी पहचानकर्ता का पता वहीं लगाया जा सकता है जहां से उसकी उत्पत्ति हुई थी। संकलित इकाई को अन्य संकलित इकाइयों से पहचानकर्ताओं को आयात करना होगा <code>IMPORT</code> कथन। यहां तक ​​कि गणनाएं भी उसी 'डॉट' नोटेशन का उपयोग करती हैं जैसा कि किसी रिकॉर्ड के फ़ील्ड तक पहुंचने के दौरान किया जाता है।


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
Line 167: Line 166:


आयात ए;
आयात ए;
एक आयातित रंग से;
आयातित रंग से;


वीएआर
वीएआर
Line 182: Line 181:


===गतिशील आवंटन===
===गतिशील आवंटन===
मॉड्यूला-3 [[रनटाइम (प्रोग्राम जीवनचक्र चरण)]] पर डेटा के आवंटन का समर्थन करता है। मेमोरी दो प्रकार की होती है जिन्हें आवंटित किया जा सकता है, <code>TRACED</code> और <code>UNTRACED</code>अंतर यह है कि कचरा संग्रहण (कंप्यूटर विज्ञान) इसे देख सकता है या नहीं। <code>NEW()</code> मेमोरी के इन वर्गों में से किसी एक के डेटा को आवंटित करने के लिए उपयोग किया जाता है। एक में <code>UNSAFE</code> मापांक, <code>DISPOSE</code> अप्रयुक्त स्मृति को मुक्त करने के लिए उपलब्ध है।
मॉड्यूला-3 [[रनटाइम (प्रोग्राम जीवनचक्र चरण)]] पर डेटा के आवंटन का समर्थन करता है। मेमोरी दो प्रकार की होती है जिन्हें आवंटित किया जा सकता है, <code>TRACED</code> और <code>UNTRACED</code>अंतर यह है कि कचरा संग्रहण (कंप्यूटर विज्ञान) इसे देख सकता है या नहीं। <code>NEW()</code> मेमोरी के इन वर्गों में से किसी के डेटा को आवंटित करने के लिए उपयोग किया जाता है। में <code>UNSAFE</code> मापांक, <code>DISPOSE</code> अप्रयुक्त स्मृति को मुक्त करने के लिए उपलब्ध है।


===वस्तु-उन्मुख===
===वस्तु-उन्मुख===
मॉड्यूल-3 में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग तकनीकों का उपयोग किया जा सकता है, लेकिन उनका उपयोग कोई आवश्यकता नहीं है। मॉड्यूल-3 (मॉड्यूल, जेनरिक) में प्रदान की गई कई अन्य सुविधाएं आमतौर पर ऑब्जेक्ट-ओरिएंटेशन की जगह ले सकती हैं।
मॉड्यूल-3 में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग तकनीकों का उपयोग किया जा सकता है, लेकिन उनका उपयोग कोई आवश्यकता नहीं है। मॉड्यूल-3 (मॉड्यूल, जेनरिक) में प्रदान की गई कई अन्य सुविधाएं आमतौर पर ऑब्जेक्ट-ओरिएंटेशन की जगह ले सकती हैं।


वस्तु समर्थन को जानबूझकर इसकी सबसे सरल शर्तों पर रखा गया है। एक ऑब्जेक्ट प्रकार (जिसे अन्य ऑब्जेक्ट-ओरिएंटेड भाषाओं में क्लास कहा जाता है) को इसके साथ पेश किया जाता है <code>OBJECT</code> घोषणा, जिसका वाक्य-विन्यास मूलतः a जैसा ही है <code>RECORD</code> घोषणा, हालांकि एक ऑब्जेक्ट प्रकार एक संदर्भ प्रकार है, जबकि मॉड्यूल -3 में रिकॉर्ड्स (सी में structs के समान) नहीं हैं। निर्यात किए गए प्रकारों को आम तौर पर परंपरा के अनुसार टी नाम दिया जाता है, और तरीकों और डेटा को उजागर करने के लिए एक अलग सार्वजनिक प्रकार बनाया जाता है। उदाहरण के लिए:
वस्तु समर्थन को जानबूझकर इसकी सबसे सरल शर्तों पर रखा गया है। ऑब्जेक्ट प्रकार (जिसे अन्य ऑब्जेक्ट-ओरिएंटेड भाषाओं में क्लास कहा जाता है) को इसके साथ पेश किया जाता है <code>OBJECT</code> घोषणा, जिसका वाक्य-विन्यास मूलतः a जैसा ही है <code>RECORD</code> घोषणा, हालांकि ऑब्जेक्ट प्रकार संदर्भ प्रकार है, जबकि मॉड्यूल -3 में रिकॉर्ड्स (सी में structs के समान) नहीं हैं। निर्यात किए गए प्रकारों को आम तौर पर परंपरा के अनुसार टी नाम दिया जाता है, और तरीकों और डेटा को उजागर करने के लिए अलग सार्वजनिक प्रकार बनाया जाता है। उदाहरण के लिए:


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
Line 195: Line 194:
   सार्वजनिक = वस्तु
   सार्वजनिक = वस्तु
   विधि
   विधि
    getAge(): पूर्णांक;
  getAge(): पूर्णांक;
    init(नाम: पाठ; आयु: पूर्णांक): टी;
  init(नाम: पाठ; आयु: पूर्णांक): टी;
   अंत;
   अंत;


अंत व्यक्ति.
अंत व्यक्ति.
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>
यह एक इंटरफ़ेस को परिभाषित करता है <code>Person</code> दो प्रकार के साथ, <code>T</code>, और <code>Public</code>, जिसे दो विधियों वाली एक वस्तु के रूप में परिभाषित किया गया है, <code>getAge()</code> और <code>init()</code>. <code>T</code> के उपप्रकार के रूप में परिभाषित किया गया है <code>Public</code> के प्रयोग से <code><:</code> ऑपरेटर।
यह इंटरफ़ेस को परिभाषित करता है <code>Person</code> दो प्रकार के साथ, <code>T</code>, और <code>Public</code>, जिसे दो विधियों वाली वस्तु के रूप में परिभाषित किया गया है, <code>getAge()</code> और <code>init()</code>. <code>T</code> के उपप्रकार के रूप में परिभाषित किया गया है <code>Public</code> के प्रयोग से <code><:</code> ऑपरेटर।


एक नया बनाने के लिए <code>Person.T</code> ऑब्जेक्ट, अंतर्निहित प्रक्रिया का उपयोग करें <code>NEW</code> विधि के साथ <code>init()</code> जैसा
नया बनाने के लिए <code>Person.T</code> ऑब्जेक्ट, अंतर्निहित प्रक्रिया का उपयोग करें <code>NEW</code> विधि के साथ <code>init()</code> जैसा
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
VAR जिम := NEW(Person.T).init(जिम, 25);
VAR जिम := NEW(Person.T).init(जिम, 25);
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>


मॉड्यूल-3 <code>REVEAL</code> कन्स्ट्रक्ट, मनमाने ढंग से मित्रता के कई स्तरों के साथ, ग्राहकों से कार्यान्वयन विवरण छिपाने के लिए एक वैचारिक रूप से सरल और स्वच्छ लेकिन बहुत शक्तिशाली तंत्र प्रदान करता है। उपयोग <code>REVEAL</code> का पूर्ण कार्यान्वयन दिखाने के लिए <code>Person</code> ऊपर से इंटरफ़ेस.
मॉड्यूल-3 <code>REVEAL</code> कन्स्ट्रक्ट, मनमाने ढंग से मित्रता के कई स्तरों के साथ, ग्राहकों से कार्यान्वयन विवरण छिपाने के लिए वैचारिक रूप से सरल और स्वच्छ लेकिन बहुत शक्तिशाली तंत्र प्रदान करता है। उपयोग <code>REVEAL</code> का पूर्ण कार्यान्वयन दिखाने के लिए <code>Person</code> ऊपर से इंटरफ़ेस.


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
Line 224: Line 223:
प्रक्रिया आयु (स्वयं: टी): पूर्णांक =
प्रक्रिया आयु (स्वयं: टी): पूर्णांक =
   शुरू
   शुरू
    वापसी स्व.उम्र;
  वापसी स्व.उम्र;
   अंत आयु;
   अंत आयु;


प्रक्रिया प्रारंभ(स्वयं: टी; नाम: पाठ; आयु: पूर्णांक): टी =
प्रक्रिया प्रारंभ(स्वयं: टी; नाम: पाठ; आयु: पूर्णांक): टी =
   शुरू
   शुरू
    स्वयं का नाम := नाम;
  स्वयं का नाम�:= नाम;
    स्व.उम्र :=आयु;
  स्व.उम्र�:=आयु;
   स्वयं लौटें;
   स्वयं लौटें;
   अंत प्रारंभ;
   अंत प्रारंभ;
Line 238: Line 237:
</सिंटैक्सहाइलाइट>
</सिंटैक्सहाइलाइट>


के उपयोग पर ध्यान दें <code>BRANDED</code> कीवर्ड, जो संरचनात्मक तुल्यता से बचने के लिए वस्तुओं को अद्वितीय बनाने के लिए उन्हें ब्रांड करता है। <code>BRANDED</code> एक स्ट्रिंग को एक तर्क के रूप में भी ले सकते हैं, लेकिन जब छोड़ा जाता है, तो आपके लिए