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

From Vigyanwiki
No edit summary
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 के दशक के अंत में ओलिवेटी रिसर्च सेंटर (ओआरसी)
'''मॉड्यूल-3''' [[प्रोग्रामिंग भाषा|प्रोग्रामिंग]] लैंग्वेज है जिसे [[Modula-2|मॉड्यूल-2]] के उन्नत वर्जन के उत्तराधिकारी के रूप में तैयार किया गया है जिसे [[Modula-2+|मॉड्यूल-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 में [[ सामान्य प्रोग्रामिंग |सामान्य प्रोग्रामिंग]] ([[टेम्पलेट (प्रोग्रामिंग)]] के समान), [[थ्रेड (कंप्यूटर विज्ञान)]], अपवाद प्रबंधन, कचरा संग्रह (कंप्यूटर विज्ञान), [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] , [[आंशिक रहस्योद्घाटन]] के लिए समर्थन जोड़ा गया, और असुरक्षित कोड का स्पष्ट अंकन। मॉड्यूला-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+ लैंग्वेज पर कार्य से अधिक प्रभावित था, जो वह लैंग्वेज थी जिसमें ऑपरेटिंग सिस्टम था डीईसी फ़ायरफ़्लाई मल्टीप्रोसेसर [[VAX|वैक्स]] वर्कस्टेशन लिखा गया था और जिसमें [[एआरएम वास्तुकला|एआरएम आर्किटेक्वैरिएबल]] आधारित [[बलूत का फल आर्किमिडीज़|एकोर्न आर्किमिडीज़]] श्रेणी के कंप्यूटरों के एआरएक्स (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम प्रोजेक्ट के लिए एआरसी पर एकॉर्न सी और मॉड्यूला एक्ज़ीक्यूशन लाइब्रेरी (केमल) के लिए एकोर्न कंपाइलर लिखा गया था। जैसा कि संशोधित मॉड्यूला -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 नाम का वाणिज्यिक [[ संकलक |कॉमपाईलर]] डीईसी एसआरसी के पूर्व मुख्य कार्यान्वयनकर्ताओं में से द्वारा बनाए रखा गया था, जिसे डीईसी से पहले कार्य पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एकीकृत विकास वातावरण (आईडीई) और एक्स्टेंसिबल [[जावा वर्चुअल मशीन]] ([[बाइनरी कोड]] में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा प्रस्तुत किए गए थे, किन्तु उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। {{not a typo|elego}} सॉफ्टवेयर सॉल्यूशंस जीएमबीएच मॉड्यूला-3 अब विश्वविद्यालयों में अधिकतर तुलनात्मक प्रोग्रामिंग लैंग्वेज पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः मॉड्यूल-3 का एकमात्र कॉर्पोरेट समर्थक है , जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में 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 पर काम जारी रहा, बाद के वर्षों में इसमें सुधार हुआ जब तक कि यह अप्रचलित नहीं हो गया।


==वाक्यविन्यास==
==सिंटैक्स==
किसी भाषा के [[सिंटैक्स (प्रोग्रामिंग भाषाएँ)]] का सामान्य उदाहरण हैलो, वर्ल्ड! कार्यक्रम.
किसी लैंग्वेज के [[सिंटैक्स (प्रोग्रामिंग भाषाएँ)|सिंटैक्स (प्रोग्रामिंग लैंग्वेज)]] का सामान्य उदाहरण हैलो, वर्ल्ड! प्रोग्राम.<syntaxhighlight lang="abl">
MODULE Main;
IMPORT IO;
BEGIN
  IO.Put("Hello World\n")
END Main.
</syntaxhighlight>


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
मॉड्यूल मुख्य;
आयात आईओ;
शुरू
  IO.पुट(हैलो वर्ल्ड\n)
END मुख्य.
</सिंटैक्सहाइलाइट>


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


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


==भाषा विशेषताएँ==
 
मॉड्यूल फ़ाइल नाम स्रोत कोड में नाम के समान होने की सलाह दी जाती है। यदि वे भिन्न हैं, तो कंपाइलर केवल चेतावनी उत्सर्जित करता है।
 
सिंटैक्स में अन्य परंपराओं में इंटरफ़ेस के निर्यातित प्रकार का नामकरण सम्मिलित है <code>T</code>, चूंकि प्रकार सामान्यतः उनके पूर्ण नामों से योग्य होते हैं, इसलिए प्रकार <code>T</code> अंदर मॉड्यूल का नाम Foo रखा जाएगा <code>Foo.T</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> ऐसे मॉड्यूल के लिए जिसका नाम समान नहीं है। उदाहरण के लिए, मुख्य प्रोग्राम मुख्य इंटरफ़ेस के लिए कार्यान्वयन मॉड्यूल निर्यात करता है।<syntaxhighlight>
MODULE HelloWorld EXPORTS Main;
IMPORT IO;
BEGIN
  IO.Put("Hello World\n")
END HelloWorld.
</syntaxhighlight>


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
मॉड्यूल हैलोवर्ल्ड एक्सपोर्ट्स मुख्य;
आयात आईओ;
शुरू
  IO.पुट(हैलो वर्ल्ड\n)
समाप्त हैलोवर्ल्ड।
</सिंटैक्सहाइलाइट>


कोई भी संकलित इकाई हो सकती है <code>IMPORT</code> अन्य इंटरफ़ेस, हालाँकि सर्कुलर आयात निषिद्ध हैं। इसे कार्यान्वयन मॉड्यूल से आयात करके हल किया जा सकता है। आयातित मॉड्यूल के भीतर इकाइयों को केवल मॉड्यूल नाम के बजाय, का उपयोग करके आयात किया जा सकता है <code>FROM Module IMPORT Item [, Item]*</code> वाक्य - विन्यास:
कोई भी कॉमपिल्ड इकाई हो सकती है <code>IMPORT</code> अन्य इंटरफ़ेस, चूंकि सर्कुलर आयात निषिद्ध हैं। इसे कार्यान्वयन मॉड्यूल से आयात करके हल किया जा सकता है। आयातित मॉड्यूल के अन्दर इकाइयों को केवल मॉड्यूल नाम के अतिरिक्त, <code>FROM Module IMPORT Item [, Item]*</code> का उपयोग करके आयात किया जा सकता है  सिंटेक्स:<syntaxhighlight>
MODULE HelloWorld EXPORTS Main;
FROM IO IMPORT Put;
BEGIN
  Put("Hello World\n")
END HelloWorld.
</syntaxhighlight>


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
मॉड्यूल हैलोवर्ल्ड एक्सपोर्ट्स मुख्य;
आईओ आयात पुट से;
शुरू
  रखो(हैलो वर्ल्ड\n)
समाप्त हैलोवर्ल्ड।
</सिंटैक्सहाइलाइट>


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


आयातित मॉड्यूल और मॉड्यूल के भीतर अन्य इकाई के बीच नाम टकराव की स्थिति में, आरक्षित शब्द
<code>AS</code> के रूप में उपयोग किया जा सकता है <code>IMPORT CollidingModule AS X;</code>




===सुरक्षित बनाम असुरक्षित===
===सुरक्षित बनाम असुरक्षित===
कुछ क्षमताएं असुरक्षित मानी जाती हैं, जहां कंपाइलर अब गारंटी नहीं दे सकता कि परिणाम सुसंगत होंगे; उदाहरण के लिए, जब 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
 
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
इंटरफ़ेस पूर्णांकElem;
CONST नाम = पूर्णांक;
प्रकार टी = पूर्णांक;
प्रक्रिया प्रारूप(x: T): पाठ;
प्रक्रिया स्कैन(txt: टेक्स्ट; VAR x: T): बूलियन;
अंत पूर्णांकElem.
</सिंटैक्सहाइलाइट>
 
फ़ाइल: GenericStack.ig
 
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
जेनेरिक इंटरफ़ेस जेनेरिकस्टैक (तत्व);
(* यहां Element.T जेनेरिक स्टैक में संग्रहित किया जाने वाला प्रकार है। *)
प्रकार
  टी = सार्वजनिक वस्तु;
  सार्वजनिक = वस्तु
  विधि
  init(): TStack;
  प्रारूप(): पाठ;
  खाली है(): बूलियन;
  गिनती(): पूर्णांक;
  पुश (एल्म: एलिमेंट.टी);
  पॉप (VAR elem: Element.T): बूलियन;
  अंत;
जेनेरिकस्टैक समाप्त करें।
</सिंटैक्सहाइलाइट>
 
फ़ाइल: जेनेरिकस्टैक.एमजी


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
'''फ़ाइल: IntegerElem.i3'''<syntaxhighlight>
जेनेरिक मॉड्यूल जेनेरिकस्टैक(एलिमेंट);
INTERFACE IntegerElem;
<... सामान्य कार्यान्वयन विवरण... >
CONST Name = "Integer";
प्रक्रिया प्रारूप (स्वयं: टी): पाठ =
TYPE T = INTEGER;
वीएआर
PROCEDURE Format(x: T): TEXT;
  str: पाठ;
PROCEDURE Scan(txt: TEXT; VAR x: T): BOOLEAN;
शुरू
END IntegerElem.
  str := Element.Name & Stack{ ;
</syntaxhighlight>
  k के लिए�:= 0 प्रति self.n -1 DO
  यदि k > 0 तो strt:= str & , ; अंत;
  strs:= str और Element.Format(self.arr[k]);
  अंत;
  str := str & }; ;
  रिटर्न स्ट्र;
अंत प्रारूप;
<... अधिक सामान्य कार्यान्वयन विवरण... >
जेनेरिकस्टैक समाप्त करें।
</सिंटैक्सहाइलाइट>


फ़ाइल: IntegerStack.i3


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
इंटरफ़ेस इंटीजरस्टैक = जेनेरिकस्टैक(इंटीजरएलेम) अंत इंटीजरस्टैक।
</सिंटैक्सहाइलाइट>


फ़ाइल: IntegerStack.m3
'''फ़ाइल: GenericStack.ig'''<syntaxhighlight>
GENERIC INTERFACE GenericStack(Element);
(* Here Element.T is the type to be stored in the generic stack. *)
TYPE
  T = Public OBJECT;
  Public = OBJECT
  METHODS
      init(): TStack;
      format(): TEXT;
      isEmpty(): BOOLEAN;
      count(): INTEGER;
      push(elm: Element.T);
      pop(VAR elem: Element.T): BOOLEAN;
  END;
END GenericStack.
</syntaxhighlight>'''FILE: GenericStack.mg'''<syntaxhighlight>
GENERIC MODULE GenericStack(Element);
< ... generic implementation details... >
PROCEDURE Format(self: T): TEXT =
VAR
  str: TEXT;
BEGIN
  str := Element.Name & "Stack{";
  FOR k := 0 TO self.n -1 DO
      IF k > 0 THEN str := str & ", "; END;
      str := str & Element.Format(self.arr[k]);
  END;
  str := str & "};";
  RETURN str;
END Format;
< ... more generic implementation details... >
END GenericStack.
</syntaxhighlight>'''FILE: IntegerStack.i3'''<syntaxhighlight>
INTERFACE IntegerStack = GenericStack(IntegerElem) END IntegerStack.


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
</syntaxhighlight>
मॉड्यूल इंटीजरस्टैक = जेनेरिकस्टैक(इंटीजरएलेम) एंड इंटीजरस्टैक।
</सिंटैक्सहाइलाइट>


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


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
TYPE Color = {Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Gray, White};
इंटरफ़ेस ए;


प्रकार रंग = {काला, भूरा, लाल, नारंगी, पीला, हरा, नीला, बैंगनी, ग्रे, सफेद};
END A;
</syntaxhighlight><syntaxhighlight>
MODULE B;


अंत ए;
IMPORT A;
</सिंटैक्सहाइलाइट>
FROM A IMPORT Color;
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
मॉड्यूल बी;


आयात ए;
VAR
आयातित रंग से;
  aColor: A.Color;  (* Uses the module name as a prefix *)
  theColor: Color; (* Does not have the module name as a prefix *)
  anotherColor: A.Color;


वीएआर
BEGIN
   एरंग: .रंग; (* मॉड्यूल नाम को उपसर्ग के रूप में उपयोग करता है *)
   aColor := A.Color.Brown;
   रंग: रंग; (* उपसर्ग के रूप में मॉड्यूल नाम नहीं है *)
  theColor := Color.Red;
  अन्यरंग: ​​ए.रंग;
   anotherColor := Color.Orange; (* Can't simply use Orange *)
END B.
</syntaxhighlight>


शुरू
===डायनामिक एलोकेशन ===
  aरंग := A.रंग.भूरा;
मॉड्यूला-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 (मॉड्यूल, जेनरिक) में प्रदान की गई विभिन्न अन्य सुविधाएं सामान्यतः ऑब्जेक्ट-ओरिएंटेशन की स्थान ले सकती हैं।


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


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


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 हाइलाइट= 1 >
END Person.
इंटरफ़ेस व्यक्ति;
</syntaxhighlight>यह इंटरफ़ेस को परिभाषित करता है <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> जैसा<syntaxhighlight>
  सार्वजनिक = वस्तु
VAR jim := NEW(Person.T).init("Jim", 25);
  विधि
</syntaxhighlight>
  getAge(): पूर्णांक;
  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.T</code> ऑब्जेक्ट, अंतर्निहित प्रक्रिया का उपयोग करें <code>NEW</code> विधि के साथ <code>init()</code> जैसा
मॉड्यूल-3 <code>REVEAL</code> कन्स्ट्रक्ट, इच्छानुसार विधि से मित्रता के विभिन्न स्तरों के साथ, ग्राहकों से कार्यान्वयन विवरण छिपाने के लिए वैचारिक रूप से सरल और स्वच्छ किन्तु बहुत शक्तिशाली तंत्र प्रदान करता है। उपयोग <code>REVEAL</code> का पूर्ण कार्यान्वयन दिखाने के लिए <code>Person</code> ऊपर से इंटरफ़ेस है.<syntaxhighlight>
<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
MODULE Person;
VAR जिम := NEW(Person.T).init(जिम, 25);
</सिंटैक्सहाइलाइट>


मॉड्यूल-3 <code>REVEAL</code> कन्स्ट्रक्ट, मनमाने ढंग से मित्रता के कई स्तरों के साथ, ग्राहकों से कार्यान्वयन विवरण छिपाने के लिए वैचारिक रूप से सरल और स्वच्छ लेकिन बहुत शक्तिशाली तंत्र प्रदान करता है। उपयोग <code>REVEAL</code> का पूर्ण कार्यान्वयन दिखाने के लिए <code>Person</code> ऊपर से इंटरफ़ेस.
REVEAL T = Public BRANDED
OBJECT
  name: TEXT;  (* These two variables *)
  age: INTEGER; (* are private. *)
OVERRIDES
  getAge := Age;
  init := Init;
END;


<सिंटैक्सहाइलाइट लैंग= मॉड्यूल2 >
PROCEDURE Age(self: T): INTEGER =
मॉड्यूल व्यक्ति;
  BEGIN
    RETURN self.age;
  END Age;


रिवील टी = सार्वजनिक ब्रांडेड
PROCEDURE Init(self: T; name: TEXT; age: INTEGER): T =
वस्तु
   BEGIN
  नाम: पाठ; (*ये दो चर*)
    self.name := name;
   आयु: पूर्णांक; (*निजी हैं।*)
    self.age := age;
ओवरराइड
   RETURN self;
  getAge := आयु;
  END Init;
   init := init;
अंत;


प्रक्रिया आयु (स्वयं: टी): पूर्णांक =
BEGIN
  शुरू
END Person.
  वापसी स्व.उम्र;
                                                                                                                                                               
  अंत आयु;
                                                                                                             
                                                                                                           
                                                                                                             
                                                                                                               
                                                                                                             
                                                                                                         
                                                                                                               
                                                                                                                           
                                                                                                                   
                                                                                                                   
                                                                                                               
                                                                                                             
                                                                                                               
                                                                                                                 
                                                                                                             
                                                                                                           
                                                                                                           
                                                                                                             
                                                                                                             
                                                                                                             
                                                                                                           
                                                                                                               
                                                                                                               
                                                                                                                 
                                                                                                             
                                                                                                               
                                                                                                                 
                                                                                                                                     
                                                                                                               
                                                                                                               
</syntaxhighlight>


प्रक्रिया प्रारंभ(स्वयं: टी; नाम: पाठ; आयु: पूर्णांक): टी =
  शुरू
  स्वयं का नाम�:= नाम;
  स्व.उम्र�:=आयु;
  स्वयं लौटें;
  अंत प्रारंभ;


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


के उपयोग पर ध्यान दें <code>BRANDED</code> कीवर्ड, जो संरचनात्मक तुल्यता से बचने के लिए वस्तुओं को अद्वितीय बनाने के लिए उन्हें ब्रांड करता है। <code>BRANDED</code> स्ट्रिंग को तर्क के रूप में भी ले सकते हैं, लेकिन जब छोड़ा जाता है, तो आपके लिए अद्वितीय स्ट्रिंग उत्पन्न होती है।
मॉड्यूला-3 उन कुछ प्रोग्रामिंग लैंग्वेज में से है, जिन्हें कड़ाई से योग्य होने के लिए मॉड्यूल से बाहरी संदर्भों की आवश्यकता होती है। अर्थात मॉड्यूल में संदर्भ <code>A</code> ऑब्जेक्ट को <code>x</code> मॉड्यूल से निर्यात किया गया <code>B</code> फॉर्म लेना होगा <code>B.x</code>. मॉड्यूल-3 में, मॉड्यूल से सभी निर्यातित नामों को आयात करना असंभव है।


मॉड्यूला-3 उन कुछ प्रोग्रामिंग भाषाओं में से है, जिन्हें कड़ाई से योग्य होने के लिए मॉड्यूल से बाहरी संदर्भों की आवश्यकता होती है। यानी मॉड्यूल में संदर्भ <code>A</code> वस्तु को <code>x</code> मॉड्यूल से निर्यात किया गया <code>B</code> फॉर्म लेना होगा <code>B.x</code>. मॉड्यूल-3 में, मॉड्यूल से सभी निर्यातित नामों को आयात करना असंभव है।
नाम योग्यता और विधि ओवरराइडिंग पर लैंग्वेज की आवश्यकताओं के कारण, किसी इंटरफ़ेस (किसी भी इंटरफ़ेस) में नई घोषणाएँ जोड़कर किसी कार्यशील प्रोग्राम को तोड़ना असंभव है। इससे विभिन्न प्रोग्रामरों द्वारा बड़े प्रोग्रामों को साथ संपादित करना संभव हो जाता है, जिसमें नामकरण संबंधी विवादों की कोई चिंता नहीं होती है; और यह मुख्य लैंग्वेज लाइब्रेरी को इस पुख्ता ज्ञान के साथ संपादित करना भी संभव बनाता है कि इस प्रक्रिया में कोई भी वर्तमान प्रोग्राम नहीं है।


नाम योग्यता और विधि ओवरराइडिंग पर भाषा की आवश्यकताओं के कारण, किसी इंटरफ़ेस (किसी भी इंटरफ़ेस) में नई घोषणाएँ जोड़कर किसी कार्यशील प्रोग्राम को तोड़ना असंभव है। इससे कई प्रोग्रामरों द्वारा बड़े कार्यक्रमों को साथ संपादित करना संभव हो जाता है, जिसमें नामकरण संबंधी विवादों की कोई चिंता नहीं होती है; और यह मुख्य भाषा पुस्तकालयों को इस पुख्ता ज्ञान के साथ संपादित करना भी संभव बनाता है कि इस प्रक्रिया में कोई भी मौजूदा प्रोग्राम नहीं टूटेगा।
===एक्सेप्शन ===
एक्सेप्शन हेंडलिंग किस पर आधारित है? <code>TRY</code>...<code>EXCEPT</code> ब्लॉक प्रणाली, जो तब से है विशेषता जिसे अन्य लैंग्वेज में नहीं अपनाया गया है, [[डेल्फ़ी (प्रोग्रामिंग भाषा)|डेल्फ़ी (प्रोग्रामिंग लैंग्वेज)]], पायथन (प्रोग्रामिंग लैंग्वेज) के उल्लेखनीय एक्सेप्शन के साथ[https://www.python.org/doc/faq/general/#why-was-python-created-in-the-first- स्थान], [[स्काला (प्रोग्रामिंग भाषा)|स्काला (प्रोग्रामिंग लैंग्वेज)]][http://scala.epfl.ch] और विज़ुअल बेसिक.NET, वह है <code>EXCEPT</code> कंस्ट्रक्ट ने प्रत्येक संभावित एक्सेप्शन  के साथ [[ स्विच कथन |स्विच स्टेटमेंट]] के रूप को अपने EXCEPT क्लॉज में स्थिति के रूप में परिभाषित किया है। मॉड्यूल-3 भी सपोर्ट करता है a <code>LOOP</code>...<code>EXIT</code>...<code>END</code> उस लूप का निर्माण तब तक करें जब तक कि a <code>EXIT</code> होता है, a के अंदर साधारण लूप के समतुल्य संरचना <code>TRY</code>...<code>EXCEPT</code> खंड है.


===अपवाद===
===मल्टी-थ्रेडेड===
अपवाद प्रबंधन किस पर आधारित है? <code>TRY</code>...<code>EXCEPT</code> ब्लॉक प्रणाली, जो तब से है{{citation needed|date=March 2014}} आम हो जाओ. विशेषता जिसे अन्य भाषाओं में नहीं अपनाया गया है{{citation needed|date=March 2014}}, [[डेल्फ़ी (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग भाषा) के उल्लेखनीय अपवादों के साथ[https://www.python.org/doc/faq/general/#why-was-python-created-in-the-first- स्थान], [[स्काला (प्रोग्रामिंग भाषा)]][http://scala.epfl.ch] और विज़ुअल बेसिक.NET, वह है <code>EXCEPT</code> कंस्ट्रक्ट ने प्रत्येक संभावित अपवाद के साथ [[ स्विच कथन |स्विच कथन]] के रूप को अपने EXCEPT क्लॉज में मामले के रूप में परिभाषित किया है। Modula-3 भी सपोर्ट करता है a <code>LOOP</code>...<code>EXIT</code>...<code>END</code> उस लूप का निर्माण तब तक करें जब तक कि a <code>EXIT</code> होता है, a के अंदर साधारण लूप के समतुल्य संरचना <code>TRY</code>...<code>EXCEPT</code> खंड.
लैंग्वेज मल्टी-थ्रेडिंग के उपयोग और थ्रेड्स के मध्य सिंक्रनाइज़ेशन का समर्थन करती है।
[[ क्रम पुस्तकालय | क्रम लाइब्रेरी]] (एम3कोर) के अन्दर थ्रेड नामक मानक मॉड्यूल है, जो मल्टी-थ्रेडेड अनुप्रयोगों के उपयोग का समर्थन करता है। मॉड्यूला-3 रनटाइम गारबेज कलेक्सनण जैसे आंतरिक कार्यों के लिए अलग थ्रेड का उपयोग कर सकता है।


===बहु-थ्रेडेड===
अंतर्निर्मित डेटा स्ट्रक्चर <code>[[Lock (computer science)|म्युटेक्स]]</code> इसका उपयोग विभिन्न थ्रेड्स को सिंक्रोनाइज़ करने और डेटा स्ट्रक्चरओं को संभावित भ्रष्टाचार या दौड़ की स्थिति के साथ साथ एक्सेस से बचाने के लिए किया जाता है। <code>LOCK</code> e> स्टेटमेंट ब्लॉक प्रस्तुत करता है जिसमें म्यूटेक्स लॉक है। अनलॉक करना ए <code>म्युटेक्स</code> कोड निष्पादन लोकस के ब्लॉक छोड़ने से निहित है। <code>म्युटेक्स</code> e> ऑब्जेक्ट है, और इस प्रकार, अन्य ऑब्जेक्ट इससे प्राप्त की जा सकती हैं।
भाषा मल्टी-थ्रेडिंग के उपयोग और थ्रेड्स के बीच सिंक्रनाइज़ेशन का समर्थन करती है।
[[ क्रम पुस्तकालय | क्रम पुस्तकालय]] (एम3कोर) के भीतर थ्रेड नामक मानक मॉड्यूल है, जो मल्टी-थ्रेडेड अनुप्रयोगों के उपयोग का समर्थन करता है। मॉड्यूला-3 रनटाइम कचरा संग्रहण जैसे आंतरिक कार्यों के लिए अलग थ्रेड का उपयोग कर सकता है।


अंतर्निर्मित डेटा संरचना <code>[[Lock (computer science)|MUTEX]]</code> इसका उपयोग कई थ्रेड्स को सिंक्रोनाइज़ करने और डेटा संरचनाओं को संभावित भ्रष्टाचार या दौड़ की स्थिति के साथ साथ एक्सेस से बचाने के लिए किया जाता है। <code>LOCK</code> e> स्टेटमेंट ब्लॉक प्रस्तुत करता है जिसमें म्यूटेक्स लॉक है। अनलॉक करना ए <code>MUTEX</code> कोड निष्पादन लोकस के ब्लॉक छोड़ने से निहित है। <code>MUTEX</code> e> वस्तु है, और इस प्रकार, अन्य वस्तुएँ इससे प्राप्त की जा सकती हैं।
उदाहरण के लिए, लाइब्रेरी libm3 के इनपुट/आउटपुट (I/O) अनुभाग में, पाठक और लेखक (Rd.T, और Wr.T) म्युटेक्स से प्राप्त होते हैं, और वे किसी भी आंतरिक डेटा तक पहुंचने या संशोधित करने से पहले स्वयम को लॉक कर लेते हैं।  


उदाहरण के लिए, लाइब्रेरी libm3 के इनपुट/आउटपुट (I/O) अनुभाग में, पाठक और लेखक (Rd.T, और Wr.T) MUTEX से प्राप्त होते हैं, और वे किसी भी आंतरिक डेटा तक पहुंचने या संशोधित करने से पहले खुद को लॉक कर लेते हैं। बफ़र्स।






===सारांश===
===सारांश===
संक्षेप में, भाषा की विशेषताएं:
संक्षेप में, लैंग्वेज की विशेषताएं:
*[[मॉड्यूलैरिटी (प्रोग्रामिंग)]] और [[इंटरफ़ेस (कंप्यूटर विज्ञान)]]
*[[मॉड्यूलैरिटी (प्रोग्रामिंग)]] और [[इंटरफ़ेस (कंप्यूटर विज्ञान)]]
*असुरक्षित कोड का स्पष्ट अंकन
*असुरक्षित कोड का स्पष्ट अंकन
*सामान्य प्रोग्रामिंग
*सामान्य प्रोग्रामिंग
*स्वचालित कचरा संग्रहण (कंप्यूटर विज्ञान)
*स्वचालित गारबेज कलेक्सनण (कंप्यूटर विज्ञान)
*दृढ़ता से टाइप की गई प्रोग्रामिंग भाषा, प्रकारों की संरचनात्मक तुल्यता
*दृढ़ता से टाइप की गई प्रोग्रामिंग लैंग्वेज, प्रकारों की संरचनात्मक तुल्यता
*[[वस्तु (कंप्यूटर विज्ञान)]]
*[[वस्तु (कंप्यूटर विज्ञान)|ऑब्जेक्ट (कंप्यूटर विज्ञान)]]
*एक्सेप्शन हेंडलिंग
*एक्सेप्शन हेंडलिंग
*थ्रेड (कंप्यूटर विज्ञान)
*थ्रेड (कंप्यूटर विज्ञान)
मॉड्यूला-3 उन दुर्लभ भाषाओं में से है जिनकी विशेषताओं का विकास प्रलेखित है।
मॉड्यूला-3 उन दुर्लभ लैंग्वेज में से है जिनकी विशेषताओं का विकास प्रलेखित है।


मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग में भाषा डिजाइन के चार आवश्यक बिंदुओं पर गहन चर्चा की गई है। ये विषय हैं: संरचनात्मक बनाम नाम तुल्यता, उपप्रकार नियम, सामान्य मॉड्यूल और पैरामीटर मोड जैसे <code>READONLY</code>.
मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग में लैंग्वेज डिजाइन के चार आवश्यक बिंदुओं पर गहन वैरिएबल्चा की गई है। यह विषय हैं: संरचनात्मक बनाम नाम तुल्यता, उपप्रकार नियम, सामान्य मॉड्यूल और पैरामीटर मोड जैसे <code>READONLY है</code>


==[[मानक पुस्तकालय]] सुविधाएँ==
==[[मानक पुस्तकालय|मानक लाइब्रेरी]] सुविधाएँ==
सी (प्रोग्रामिंग भाषा) भाषा के साथ शुरू हुई प्रवृत्ति को जारी रखते हुए, वास्तविक प्रोग्राम लिखने के लिए आवश्यक कई सुविधाओं को भाषा परिभाषा से बाहर रखा गया और इसके बजाय मानक लाइब्रेरी सेट के माध्यम से प्रदान किया गया। नीचे दिए गए अधिकांश इंटरफ़ेस का विस्तार से वर्णन किया गया है<ref name=DecSrcRr113>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-113.pdf Some Useful Modula-3 Interfaces] {{Webarchive|url=https://web.archive.org/web/20160304040009/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-113.pdf |date=2016-03-04 }} Jim Horning, Bill Kalsow, Paul McJones, Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 113 (December 1993)</ref>
इस प्रकार सी (प्रोग्रामिंग लैंग्वेज) लैंग्वेज के साथ प्रारंभ हुई प्रवृत्ति को जारी रखते हुए, वास्तविक प्रोग्राम लिखने के लिए आवश्यक विभिन्न सुविधाओं को लैंग्वेज परिभाषा से बाहर रखा गया और इसके अतिरिक्त मानक लाइब्रेरी सेट के माध्यम से प्रदान किया गया था। नीचे दिए गए अधिकांश इंटरफ़ेस का विस्तार से वर्णन किया गया है <ref name=DecSrcRr113>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-113.pdf Some Useful Modula-3 Interfaces] {{Webarchive|url=https://web.archive.org/web/20160304040009/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-113.pdf |date=2016-03-04 }} Jim Horning, Bill Kalsow, Paul McJones, Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 113 (December 1993)</ref> मानक लाइब्रेरी निम्नलिखित सुविधाएँ प्रदान करते हैं। इन्हें मानक इंटरफ़ेस कहा जाता है और ये लैंग्वेज में आवश्यक (प्रदान किए जाने चाहिए) होते हैं।
मानक पुस्तकालय निम्नलिखित सुविधाएँ प्रदान करते हैं। इन्हें मानक इंटरफ़ेस कहा जाता है और ये भाषा में आवश्यक (प्रदान किए जाने चाहिए) होते हैं।
* टेक्स्ट: <code>TEXT</code>एस अपरिवर्तनीय स्ट्रिंग संदर्भों पर संचालन, कहा जाता है  
* पाठ: अपरिवर्तनीय स्ट्रिंग संदर्भों पर संचालन, कहा जाता है <code>TEXT</code>एस
* थ्रेड: थ्रेडिंग से संबंधित संचालन, जिसमें सम्मिलित हैं <code>म्युटेक्स</code>, स्थिति परिवर्तनशील, और थ्रेड का रुकना थ्रेडिंग लाइब्रेरी प्री-एम्प्टिव थ्रेड स्विचिंग प्रदान करती है
* थ्रेड: थ्रेडिंग से संबंधित संचालन, जिसमें शामिल हैं <code>MUTEX</code>, स्थिति परिवर्तनशील, और थ्रेड का रुकना। थ्रेडिंग लाइब्रेरी प्री-एम्प्टिव थ्रेड स्विचिंग प्रदान करती है
* वर्ड: अहस्ताक्षरित पूर्णांकों (या मशीन वर्डों) पर बिटवाइज़ संचालन सामान्यतः कॉमपाईलर द्वारा सीधे कार्यान्वित किया जाता है
* शब्द: अहस्ताक्षरित पूर्णांकों (या मशीन शब्दों) पर बिटवाइज़ संचालन। सामान्यतः संकलक द्वारा सीधे कार्यान्वित किया जाता है
* फ़्लोटिंग-पॉइंट इंटरफ़ेस
* फ़्लोटिंग-पॉइंट इंटरफ़ेस
कुछ अनुशंसित इंटरफ़ेस उपलब्ध कार्यान्वयन में लागू किए गए हैं लेकिन आवश्यक नहीं हैं
कुछ अनुशंसित इंटरफ़ेस उपलब्ध कार्यान्वयन में प्रयुक्त किए गए हैं किन्तु आवश्यक नहीं हैं
* लेक्स: संख्या और अन्य डेटा को पार्स करने के लिए
* लेक्स: संख्या और अन्य डेटा को पार्स करने के लिए
* Fmt: मुद्रण के लिए विभिन्न डेटा प्रकारों को फ़ॉर्मेट करना
* Fmt: मुद्रण के लिए विभिन्न डेटा प्रकारों को फ़ॉर्मेट करना
* पीकेएल (या अचार): कचरा संग्रहकर्ता द्वारा पहुंच योग्य किसी भी संदर्भ प्रकार का ऑब्जेक्ट क्रमांकन
* पीकेएल (या अचार): गारबेज कलेक्सनकर्ता द्वारा पहुंच योग्य किसी भी संदर्भ प्रकार का ऑब्जेक्ट क्रमांकन
* तालिका: मानचित्र के लिए सामान्य मॉड्यूल (कंप्यूटर विज्ञान)
* टेबल: मानचित्र के लिए सामान्य मॉड्यूल (कंप्यूटर विज्ञान)


C की तरह, I/O भी लाइब्रेरीज़ के माध्यम से प्रदान किया जाता है, जिसे Modula-3 कहा जाता है <code>Rd</code> और <code>Wr</code>. आरडी (पाठक) और डब्लूआर (लेखक) पुस्तकालयों के ऑब्जेक्ट-ओरिएंटेड डिज़ाइन को ग्रेग नेल्सन की पुस्तक में विस्तार से शामिल किया गया है। मॉड्यूला-3 का दिलचस्प पहलू यह है कि यह उन कुछ प्रोग्रामिंग भाषाओं में से है, जिनके मानक पुस्तकालयों को औपचारिक रूप से सत्यापित किया गया है कि उनमें लॉकिंग बग सहित विभिन्न प्रकार के बग शामिल नहीं हैं। यह लार्च/मोडुला-3 के तत्वावधान में किया गया था ([[लार्च परिवार]] देखें)<ref name=DecSrcRr072>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-072.pdf LM3] {{Webarchive|url=https://web.archive.org/web/20160303215535/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-072.pdf |date=2016-03-03 }} Kevin D. Jones. [[DEC Systems Research Center]] (SRC) Research Report 72 (June 1991)</ref> और [[विस्तारित स्थैतिक जाँच]]<ref name=CompaqSrcRr159>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-159.pdf Extended Static Checking] {{Webarchive|url=https://web.archive.org/web/20170705054838/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-159.pdf |date=2017-07-05 }}  David L. Detlefs, K. Rustan M. Leino, Greg Nelson, [[James B. Saxe]]. Compaq SRC Research Report 159 (December 1998)</ref> [[डीईसी एसआरसी]] में परियोजनाएं।
C की तरह, I/O भी लाइब्रेरीज़ के माध्यम से प्रदान किया जाता है, जिसे मॉड्यूल-3 कहा जाता है <code>Rd</code> और <code>Wr</code>. आरडी (रीडर) और डब्लूआर (लेखक) लाइब्रेरी के ऑब्जेक्ट-ओरिएंटेड डिज़ाइन को ग्रेग नेल्सन की पुस्तक में विस्तार से सम्मिलित किया गया है। मॉड्यूला-3 का रोचक पहलू यह है कि यह उन कुछ प्रोग्रामिंग लैंग्वेज में से है, जिनके मानक लाइब्रेरी को औपचारिक रूप से सत्यापित किया गया है कि उनमें लॉकिंग बग सहित विभिन्न प्रकार के बग सम्मिलित नहीं हैं। यह लार्च/मोडुला-3 के तत्वावधान में किया गया था ([[लार्च परिवार]] देखें)<ref name=DecSrcRr072>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-072.pdf LM3] {{Webarchive|url=https://web.archive.org/web/20160303215535/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-072.pdf |date=2016-03-03 }} Kevin D. Jones. [[DEC Systems Research Center]] (SRC) Research Report 72 (June 1991)</ref> और [[विस्तारित स्थैतिक जाँच|एक्सटेंडेड स्टैटिक चेकिंग]] <ref name=CompaqSrcRr159>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-159.pdf Extended Static Checking] {{Webarchive|url=https://web.archive.org/web/20170705054838/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-159.pdf |date=2017-07-05 }}  David L. Detlefs, K. Rustan M. Leino, Greg Nelson, [[James B. Saxe]]. Compaq SRC Research Report 159 (December 1998)</ref> [[डीईसी एसआरसी]] में स्कीम सम्मिलित है।


==कार्यान्वयन==
==कार्यान्वयन==
कई कंपाइलर उपलब्ध हैं, उनमें से अधिकांश [[ओपन-सोर्स मॉडल]] हैं।
विभिन्न कंपाइलर उपलब्ध हैं, उनमें से अधिकांश [[ओपन-सोर्स मॉडल]] हैं।


*DEC-SRC M3, मूल।<ref>[ftp://ftp.u-aizu.ac.jp/pub/lang/Modula/m3/faq/document/src-m3-doc/SRCm3-3.3.ps.gz SRC Modula-3 3.3]{{Dead link|date=November 2018 |bot=InternetArchiveBot |fix-attempted=yes }} Bill Kalsow and Eric Muller. Digital Equipment Corporation (January 1995)</ref>
*डीईसी-एसआरसी M3, मूल है।<ref>[ftp://ftp.u-aizu.ac.jp/pub/lang/Modula/m3/faq/document/src-m3-doc/SRCm3-3.3.ps.gz SRC Modula-3 3.3]{{Dead link|date=November 2018 |bot=InternetArchiveBot |fix-attempted=yes }} Bill Kalsow and Eric Muller. Digital Equipment Corporation (January 1995)</ref>
*ओलिवेटी रिसर्च सेंटर (ओआरसी) मोडुला-3 टूलकिट, मूल रूप से कंपाइलर, अब मॉड्यूला-3 कार्यक्रमों के वाक्यविन्यास, शाब्दिक और अर्थ संबंधी विश्लेषण के लिए पुस्तकालय के रूप में उपलब्ध है।<ref>{{Cite journal
*ओलिवेटी रिसर्च सेंटर (ओआरसी) मोडुला-3 टूलकिट, मूल रूप से कंपाइलर, अब मॉड्यूला-3 प्रोग्रामों के सिंटैक्स, शाब्दिक और अर्थ संबंधी विश्लेषण के लिए लाइब्रेरी के रूप में उपलब्ध है।<ref>{{Cite journal
| doi = 10.1145/99278.99285
| doi = 10.1145/99278.99285
| volume = 15
| volume = 15
Line 301: Line 312:
| doi-access = free
| doi-access = free
}}</ref>
}}</ref>
*क्रिटिकल मास CM3, DEC-SRC M3 का अलग उत्तराधिकारी
*क्रिटिकल मास CM3, डीईसी-एसआरसी M3 का अलग उत्तराधिकारी है
*पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है
*पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है
*EzM3, स्वतंत्र हल्का और आसानी से पोर्टेबल कार्यान्वयन, CVSup के संबंध में विकसित किया गया
*EzM3, स्वतंत्र हल्का और सरलता से पोर्टेबल कार्यान्वयन, सी.वी.एस.यू.पी के संबंध में विकसित किया गया था
*एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, [[एनपीटीएल]] का उपयोग करके देशी थ्रेडिंग के समर्थन के साथ
*एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, [[एनपीटीएल]] का उपयोग करके थ्रेडिंग के समर्थन के साथ उपयोग किया जाता है
*CM3, क्रिटिकल मास CM3 का उत्तराधिकारी। यह एकमात्र अद्यतन, अनुरक्षित और विकसित कार्यान्वयन है। रिलीज़ http://www.opencm3.net/releng/ पर उपलब्ध हैं।
*CM3, क्रिटिकल मास CM3 का उत्तराधिकारी यह एकमात्र अद्यतन, अनुरक्षित और विकसित कार्यान्वयन है। रिलीज़ http://www.opencm3.net/releng/ पर उपलब्ध हैं।


चूँकि C डेटा संरचनाओं का एकमात्र पहलू जो Modula-3 से गायब है, वह यूनियन प्रकार है, सभी मौजूदा Modula-3 कार्यान्वयन Array डेटा संरचना और [[रिकॉर्ड (कंप्यूटर विज्ञान)]] की C भाषा प्रकार की घोषणाओं के साथ अच्छी बाइनरी कोड संगतता प्रदान करने में सक्षम हैं।
चूँकि C डेटा स्ट्रक्चरओं का एकमात्र पहलू जो मॉड्यूल-3 से विलुप्त है, वह यूनियन प्रकार है, सभी वर्तमान मॉड्यूल-3 कार्यान्वयन एरे डेटा स्ट्रक्चर और [[रिकॉर्ड (कंप्यूटर विज्ञान)]] की C लैंग्वेज प्रकार की घोषणाओं के साथ अच्छी बाइनरी कोड संगतता प्रदान करने में सक्षम हैं।


==किताबें==
==किताबें==
इनमें से कोई भी पुस्तक अभी भी प्रिंट में नहीं है, हालांकि उपयोग की गई प्रतियां प्राप्य हैं और कुछ आंशिक या पूर्ण रूप से डिजिटलीकृत हैं, और उनमें से कुछ अध्यायों के पूर्व या बाद के संस्करण वेब से शोध रिपोर्ट के रूप में प्राप्त किए जा सकते हैं।
इनमें से कोई भी पुस्तक अभी भी प्रिंट में नहीं है, चूंकि उपयोग की गई प्रतियां प्राप्य हैं और कुछ आंशिक या पूर्ण रूप से डिजिटलीकृत हैं, और उनमें से कुछ अध्यायों के पूर्व या पश्चात् के वर्जन वेब से शोध रिपोर्ट के रूप में प्राप्त किए जा सकते हैं।


*ग्रेग नेल्सन, एड., मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड सिस्टम सॉफ्टवेयर निर्माण पर दिलचस्प लेखों और भाषा की अंतिम विशेषताओं तक ले जाने वाली चर्चा के दस्तावेजीकरण के साथ मॉड्यूला-3 भाषा पर निश्चित संदर्भ। कुछ पूर्व हैं (देखें<ref name=DecSrcRr052 />अध्याय दो के लिए,<ref name=DecSrcRr035>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-035.pdf An Introduction to Programming with Threads] {{Webarchive|url=https://web.archive.org/web/20170705054620/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-035.pdf |date=2017-07-05 }} Andrew D. Birrell. [[DEC Systems Research Center]] (SRC) Research Report 35 (January 1989)</ref> अध्याय चार के लिए,<ref name=DecSrcRr020>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-020.pdf Synchronization Primitives for a Multiprocessor: A Formal Specification] {{Webarchive|url=https://web.archive.org/web/20160304040003/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-020.pdf |date=2016-03-04 }} A. D. Birrell, J. V. Guttag, J. J. Horning, R. Levin. [[DEC Systems Research Center]] (SRC) Research Report 20 (August 1987)</ref> अध्याय पाँच के लिए,<ref name=DecSrcRr053>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-053.pdf IO Streams: Abstract Types, Real Programs] {{Webarchive|url=https://web.archive.org/web/20160303224416/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-053.pdf |date=2016-03-03 }} Mark R. Brown and Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 53 (November 1989)</ref> अध्याय छह के लिए) और कुछ पीछे (देखें)।<ref name=DecSrcRefMan95>[http://www.minet.uni-jena.de/www/fakultaet/schukat/Inf1/Praktikum/Modula-3-refman.ps Modula-3 Reference Manual] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. [[DEC Systems Research Center]] (SRC) (February 1995)</ref> अध्याय और अधिक अद्यतन दो के लिए, इस प्रकार भाषा परिभाषा के दोनों पूर्व संस्करण<ref name=DecSrcRr052 />और,<ref name=DecSrcRr113 />अध्याय तीन के लिए और<ref name=DecSrcRr069>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-069.pdf Trestle Tutorial] {{Webarchive|url=https://web.archive.org/web/20160303213053/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-069.pdf |date=2016-03-03 }} Mark S. Manasse and Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 69 (May 1992)</ref> अध्याय सात के लिए) इसके आठ अध्यायों में से अधिकांश के प्रकाशन संस्करण डाउनलोड के लिए अनुसंधान रिपोर्ट के रूप में पूर्व डीईसी सिस्टम्स रिसर्च सेंटर (एसआरसी) से व्यक्तिगत रूप से उपलब्ध हैं।
*ग्रेग नेल्सन, एड., मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड सिस्टम सॉफ्टवेयर निर्माण पर रोचक लेखों और लैंग्वेज की अंतिम विशेषताओं तक ले जाने वाली वैरिएबल्चा के डॉक्यूमेंटेसन के साथ मॉड्यूला-3 लैंग्वेज पर निश्चित संदर्भ। कुछ पूर्व हैं (देखें <ref name=DecSrcRr052 />अध्याय दो के लिए,<ref name=DecSrcRr035>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-035.pdf An Introduction to Programming with Threads] {{Webarchive|url=https://web.archive.org/web/20170705054620/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-035.pdf |date=2017-07-05 }} Andrew D. Birrell. [[DEC Systems Research Center]] (SRC) Research Report 35 (January 1989)</ref> अध्याय चार के लिए,<ref name=DecSrcRr020>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-020.pdf Synchronization Primitives for a Multiprocessor: A Formal Specification] {{Webarchive|url=https://web.archive.org/web/20160304040003/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-020.pdf |date=2016-03-04 }} A. D. Birrell, J. V. Guttag, J. J. Horning, R. Levin. [[DEC Systems Research Center]] (SRC) Research Report 20 (August 1987)</ref> अध्याय पाँच के लिए,<ref name=DecSrcRr053>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-053.pdf IO Streams: Abstract Types, Real Programs] {{Webarchive|url=https://web.archive.org/web/20160303224416/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-053.pdf |date=2016-03-03 }} Mark R. Brown and Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 53 (November 1989)</ref> अध्याय छह के लिए) और कुछ पीछे (देखें)।<ref name=DecSrcRefMan95>[http://www.minet.uni-jena.de/www/fakultaet/schukat/Inf1/Praktikum/Modula-3-refman.ps Modula-3 Reference Manual] Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. [[DEC Systems Research Center]] (SRC) (February 1995)</ref> अध्याय और अधिक अद्यतन दो के लिए, इस प्रकार लैंग्वेज परिभाषा के दोनों पूर्व वर्जन <ref name=DecSrcRr052 /> और,<ref name=DecSrcRr113 />अध्याय तीन के लिए और<ref name=DecSrcRr069>[http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-069.pdf Trestle Tutorial] {{Webarchive|url=https://web.archive.org/web/20160303213053/http://apotheca.hpl.hp.com/ftp/pub/dec/SRC/research-reports/SRC-069.pdf |date=2016-03-03 }} Mark S. Manasse and Greg Nelson. [[DEC Systems Research Center]] (SRC) Research Report 69 (May 1992)</ref> अध्याय सात के लिए) इसके आठ अध्यायों में से अधिकांश के प्रकाशन वर्जन डाउनलोड के लिए अनुसंधान रिपोर्ट के रूप में पूर्व डीईसी सिस्टम्स रिसर्च सेंटर (एसआरसी) से व्यक्तिगत रूप से उपलब्ध हैं।
*सैमुअल पी. हार्बिसन, मॉड्यूला-3 कक्षा पाठ्यपुस्तक का उपयोग करना आसान है।
*सैमुअल पी. हार्बिसन, मॉड्यूला-3 कक्षा पाठ्यपुस्तक का उपयोग करना सरल है।
*[[रॉबर्ट सेडगेविक (कंप्यूटर वैज्ञानिक)]], मॉड्यूला-3 में एल्गोरिदम
*[[रॉबर्ट सेडगेविक (कंप्यूटर वैज्ञानिक)]], मॉड्यूला-3 में एल्गोरिदम है
*लास्ज़लो बोस्ज़ोर्मेनी और कार्स्टन वीच, मॉड्यूला-3 में प्रोग्रामिंग: स्टाइल के साथ प्रोग्रामिंग में परिचय
*लास्ज़लो बोस्ज़ोर्मेनी और कार्स्टन वीच, मॉड्यूला-3 में प्रोग्रामिंग: स्टाइल के साथ प्रोग्रामिंग में परिचय है
*रेन्ज़ो ओरसिनी, एगोस्टिनो कॉर्टेसी प्रोग्राममेयर इन मोडुला-3: इंट्रोड्यूज़ियोन अल्ला प्रोग्राममेज़ियोन इम्पेरटिवा ई ए ओगेटी भाषा की इतालवी पुस्तक जो इसकी मुख्य विशेषताओं को समझाती है।
*रेन्ज़ो ओरसिनी, एगोस्टिनो कॉर्टेसी प्रोग्राममेयर इन मोडुला-3: इंट्रोड्यूज़ियोन अल्ला प्रोग्राममेज़ियोन इम्पेरटिवा ई ए ओगेटी लैंग्वेज की इतालवी पुस्तक जो इसकी मुख्य विशेषताओं को समझाती है।


==मॉड्यूला-3 का उपयोग करने वाली परियोजनाएं==
==मॉड्यूला-3 का उपयोग करने वाली परियोजनाएं==
मॉड्यूल-3 प्रोग्राम किए गए सॉफ़्टवेयर में शामिल हैं:
मॉड्यूल-3 प्रोग्राम किए गए सॉफ़्टवेयर में सम्मिलित हैं:
*[[स्पिन (ऑपरेटिंग सिस्टम)]] ऑपरेटिंग सिस्टम
*[[स्पिन (ऑपरेटिंग सिस्टम)]] ऑपरेटिंग सिस्टम है
*सीवीएसयूपी [[ सॉफ्टवेयर भंडार |सॉफ्टवेयर भंडार]] सिंक्रोनाइजिंग प्रोग्राम
*सीवीएसयूपी [[ सॉफ्टवेयर भंडार |सॉफ्टवेयर]] स्टोर सिंक्रोनाइजिंग प्रोग्राम है
*[[ बूंदा बांदी | बूंदा बांदी]] भाषा, जो स्थानीय नेटवर्क पर वस्तुओं को पारदर्शी रूप से स्थानांतरित करने के लिए मॉड्यूला-3 नेटवर्क ऑब्जेक्ट की क्षमता का उपयोग करती है, जिससे मॉड्यूला-3 ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रतिमान में वितरित क्षमता की अनुमति मिलती है। इसका उपयोग मॉड्यूला-3 में स्क्रिप्टिंग एक्सटेंशन के रूप में वितरित एप्लिकेशन, कंप्यूटर एनिमेशन और वेब प्रोग्रामिंग एप्लिकेशन बनाने के लिए किया गया है।
*[[ बूंदा बांदी |ओब्लिक]] लैंग्वेज, जो स्थानीय नेटवर्क पर वस्तुओं को पारदर्शी रूप से स्थानांतरित करने के लिए मॉड्यूला-3 नेटवर्क ऑब्जेक्ट की क्षमता का उपयोग करती है, जिससे मॉड्यूला-3 ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रतिमान में वितरित क्षमता की अनुमति मिलती है। इसका उपयोग मॉड्यूला-3 में स्क्रिप्टिंग एक्सटेंशन के रूप में वितरित एप्लिकेशन, कंप्यूटर एनिमेशन और वेब प्रोग्रामिंग एप्लिकेशन बनाने के लिए किया गया है।


==अन्य प्रोग्रामिंग भाषाओं पर प्रभाव==
==अन्य प्रोग्रामिंग लैंग्वेज पर प्रभाव==
हालाँकि मॉड्यूला-3 को मुख्यधारा का दर्जा नहीं मिला, लेकिन डीईसी-एसआरसी एम3 वितरण के कई हिस्सों को मिला। संभवतः सबसे प्रभावशाली हिस्सा नेटवर्क ऑब्जेक्ट लाइब्रेरी था, जिसने नेटवर्क प्रोटोकॉल सहित जावा के पहले रिमोट मेथड इनवोकेशन (आरएमआई) कार्यान्वयन का आधार बनाया। केवल जब सन [[ सामान्य वस्तु अनुरोध ब्रोकर आर्किटेक्चर |सामान्य वस्तु अनुरोध ब्रोकर आर्किटेक्चर]] (CORBA) मानक से [[सामान्य इंटर-ओआरबी प्रोटोकॉल]] में चला गया तो इसे हटा दिया गया। दूरस्थ वस्तुओं के कचरा संग्रहण (कंप्यूटर विज्ञान) पर जावा दस्तावेज़ अभी भी मॉड्यूला -3 नेटवर्क ऑब्जेक्ट्स के लिए किए गए अग्रणी कार्य का उल्लेख करता है।<ref>[http://docs.oracle.com/javase/8/docs/platform/rmi/spec/rmi-arch4.html ''Garbage Collection of Remote Objects''], Java Remote Method Invocation Documentation for Java SE 8.</ref> पायथन का कक्षाओं का कार्यान्वयन भी C++ और Modula-3 में पाए जाने वाले वर्ग तंत्र से प्रेरित था।<ref>[https://docs.python.org/3/tutorial/classes.html#classes ''Classes''], Official Python Documentation.</ref>
चूंकि मॉड्यूला-3 को मुख्यधारा का स्थान नहीं मिला था, किन्तु डीईसी-एसआरसी एम3 वितरण के विभिन्न भागो को मिला था। संभवतः सबसे प्रभावशाली भाग नेटवर्क ऑब्जेक्ट लाइब्रेरी था, जिसने नेटवर्क प्रोटोकॉल सहित जावा के पहले रिमोट मेथड इनवोकेशन (आरएमआई) कार्यान्वयन का आधार बनाया था। केवल जब सन [[ सामान्य वस्तु अनुरोध ब्रोकर आर्किटेक्चर |सामान्य ऑब्जेक्ट अनुरोध ब्रोकर आर्किटेक्वैरिएबल]] (कोरबा) मानक से [[सामान्य इंटर-ओआरबी प्रोटोकॉल|सिम्पल इंटर-ओआरबी प्रोटोकॉल]] में चला गया तो इसे हटा दिया गया था। दूरस्थ वस्तुओं के गारबेज कलेक्सनण (कंप्यूटर विज्ञान) पर जावा डॉक्यूमेंट अभी भी मॉड्यूला -3 नेटवर्क ऑब्जेक्ट्स के लिए किए गए अग्रणी कार्य का उल्लेख करता है।<ref>[http://docs.oracle.com/javase/8/docs/platform/rmi/spec/rmi-arch4.html ''Garbage Collection of Remote Objects''], Java Remote Method Invocation Documentation for Java SE 8.</ref> पायथन का कक्षाओं का कार्यान्वयन भी C++ और मॉड्यूल-3 में पाए जाने वाले वर्ग तंत्र से प्रेरित था।<ref>[https://docs.python.org/3/tutorial/classes.html#classes ''Classes''], Official Python Documentation.</ref> साथ ही निम लैंग्वेज (प्रोग्रामिंग लैंग्वेज) मॉड्यूला-3 के कुछ तथ्यों का उपयोग करती है, जैसे डायनामिक एलोकेशन  पॉइंटर्स है।
साथ ही निम भाषा (प्रोग्रामिंग भाषा) मॉड्यूला-3 के कुछ पहलुओं का उपयोग करती है, जैसे #डायनामिक आवंटन पॉइंटर्स।


==संदर्भ==
==संदर्भ==
Line 336: Line 346:
*{{GitHub|modula3|Modula3}}
*{{GitHub|modula3|Modula3}}
*[http://www.opencm3.net CM3 Implementation Website]
*[http://www.opencm3.net CM3 Implementation Website]
*[http://www.research.compaq.com/SRC/modula-3/html/home.html Modula-3 Home Page] (now long dead, [https://web.archive.org/web/20050220025439/http://www.research.compaq.com/SRC/modula-3/html/home.html mirror])
*[http://www.research.compaq.com/SRC/modula-3/html/home.html मॉड्यूल-3 Home Page] (now long dead, [https://web.archive.org/web/20050220025439/http://www.research.compaq.com/SRC/modula-3/html/home.html mirror])
*[http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-52.html Modula-3: Language definition]
*[http://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-52.html मॉड्यूल-3: Language definition]
*[http://www.elegosoft.com elego Software Solutions]
*[http://www.elegosoft.com elego Software Solutions]
*[news:comp.lang.modula3 Modula-3 newsgroup], mostly deserted
*[news:comp.lang.modula3 मॉड्यूल-3 newsgroup], mostly deserted
*[https://web.archive.org/web/20120326171529/https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3devel Modula-3 Development Mailing List], active
*[https://web.archive.org/web/20120326171529/https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3devel मॉड्यूल-3 Development Mailing List], active
*[https://web.archive.org/web/20091203151748/http://www.mikanystrom.com/cs2/ Notes from Caltech's CS2 class, taught in Modula-3 in 2002 and 2003]
*[https://web.archive.org/web/20091203151748/http://www.mikanystrom.com/cs2/ Notes from Caltech's CS2 class, taught in मॉड्यूल-3 in 2002 and 2003]
*{{webarchive |url=https://web.archive.org/web/20130523220501/http://www.ugcs.caltech.edu/~se/ |date=May 23, 2013 |title=Caltech's CS3 class 2009}}
*{{webarchive |url=https://web.archive.org/web/20130523220501/http://www.ugcs.caltech.edu/~se/ |date=May 23, 2013 |title=Caltech's CS3 class 2009}}
*[https://web.archive.org/web/19970814162826/http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html mirror ''Programming in Modula-3'': program examples]
*[https://web.archive.org/web/19970814162826/http://www.ifi.uni-klu.ac.at/Modula-3/m3book/examples.html mirror ''Programming in मॉड्यूल-3'': program examples]
*[https://web.archive.org/web/20120227030339/http://www.professeurs.polymtl.ca/michel.dagenais/pkg/BDAM3alpha.ps ''Building Distributed OO Applications: Modula-3 Objects at Work''. Michel R. Dagenais. Draft Version (January 1997)]
*[https://web.archive.org/web/20120227030339/http://www.professeurs.polymtl.ca/michel.dagenais/pkg/BDAM3alpha.ps ''Building Distributed OO Applications: मॉड्यूल-3 Objects at Work''. Michel R. Dagenais. Draft Version (January 1997)]
*[ftp://ftp.u-aizu.ac.jp/pub/lang/Modula/m3/faq/document/LangToolsLibs/root.ps ''Modula-3: Language, Libraries and Tools''. Presentation on Modula-3 over 120 slides. Michael R. Dagenais]{{Dead link|date=November 2018 |bot=InternetArchiveBot |fix-attempted=yes}}, dead
*[ftp://ftp.u-aizu.ac.jp/pub/lang/Modula/m3/faq/document/LangToolsLibs/root.ps ''मॉड्यूल-3: Language, Libraries and Tools''. Presentation on मॉड्यूल-3 over 120 slides. Michael R. Dagenais]{{Dead link|date=November 2018 |bot=InternetArchiveBot |fix-attempted=yes}}, dead
*[http://csis.pace.edu/~bergin/M3text ''Object-Oriented Data Abstraction in Modula-3''. Joseph Bergin (1997)]
*[http://csis.pace.edu/~bergin/M3text ''Object-Oriented Data Abstraction in मॉड्यूल-3''. Joseph Bergin (1997)]
*[http://www.techworld.com.au/article/252531/a-z_programming_languages_modula-3/ Computerworld Interview with Luca Cardelli on Modula-3]
*[http://www.techworld.com.au/article/252531/a-z_programming_languages_modula-3/ Computerworld Interview with Luca Cardelli on मॉड्यूल-3]


[[Category: मॉड्यूला प्रोग्रामिंग भाषा परिवार]] [[Category: ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाएँ]] [[Category: सिस्टम प्रोग्रामिंग भाषाएँ]] [[Category: प्रोग्रामिंग भाषाएँ 1988 में बनाई गईं]]  
[[Category: मॉड्यूला प्रोग्रामिंग भाषा परिवार]] [[Category: ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाएँ]] [[Category: सिस्टम प्रोग्रामिंग भाषाएँ]] [[Category: प्रोग्रामिंग भाषाएँ 1988 में बनाई गईं]]  

Revision as of 23:21, 22 November 2023

Modula-3
Modula-3.svg
Paradigmsimperative, structured, procedural, modular, concurrent, object-oriented, generic
परिवारWirth/Modula
द्वारा डिज़ाइन किया गयाLuca Cardelli, James Donahue, Lucille Glassman, Mick Jordan; Bill Kalsow, Greg Nelson
DevelopersDEC
Olivetti
elego Software Solutions GmbH
पहली प्रस्तुति1988; 36 years ago (1988)
Stable release
5.8.6 / July 14, 2010; 14 years ago (2010-07-14)
Preview release
5.8.6 / July 14, 2010; 14 years ago (2010-07-14)
टाइपिंग अनुशासनstrong, static, safe or if unsafe explicitly safe isolated
स्कोपLexical
प्लेटफॉर्मIA-32, x86-64, PowerPC, SPARC
ओएसCross-platform: FreeBSD, Linux, Darwin, SunOS
वेबसाइटwww.modula3.org
Major implementations
SRC Modula-3, CM3,[1] PM3,[2] EZM3,[3] M3/PC Klagenfurt[4]
Influenced by
ALGOL, Euclid, Mesa, Modula-2, Modula-2+, Oberon, Pascal
Influenced
C#, Java, Nim,[5] OCaml, Rust,[6] Python[7]

मॉड्यूल-3 प्रोग्रामिंग लैंग्वेज है जिसे मॉड्यूल-2 के उन्नत वर्जन के उत्तराधिकारी के रूप में तैयार किया गया है जिसे मॉड्यूल-2+ के नाम से जाना जाता है। चूंकि यह अनुसंधान क्षेत्रों में प्रभावशाली रहा है (जावा (प्रोग्रामिंग लैंग्वेज), सी शार्प (प्रोग्रामिंग लैंग्वेज) या सी#, पायथन (प्रोग्रामिंग लैंग्वेज) जैसी लैंग्वेज के डिजाइन को प्रभावित कर रहा है।[8] और निम (प्रोग्रामिंग लैंग्वेज)) इसे उद्योग में व्यापक रूप से नहीं अपनाया गया है। इसे डिजिटल इक्विपमेंट कारपोरेशन (डीईसी) डीईसी सिस्टम्स रिसर्च सेंटर (एसआरसी) में लुका कार्डेली, जेम्स डोनह्यू, ल्यूसिल ग्लासमैन, मिक जॉर्डन (ओलिवेत्ति सॉफ्टवेयर टेक्नोलॉजी प्रयोगशाला से पहले), 1980 के दशक के अंत में ओलिवेटी रिसर्च सेंटर (ओआरसी) बिल कल्सो और ग्रेग नेल्सन (कंप्यूटर वैज्ञानिक) द्वारा डिजाइन किया गया था। ।

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

ऐतिहासिक विकास

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

इसका डिज़ाइन उस समय एसआरसी और एकोर्न कम्प्यूटर्स रिसर्च सेंटर (एआरसी, पश्चात् में ओआरसी जब ओलिवेटी अक्वायर्ड एकोर्न) में उपयोग में आने वाली मोडुला-2+ लैंग्वेज पर कार्य से अधिक प्रभावित था, जो वह लैंग्वेज थी जिसमें ऑपरेटिंग सिस्टम था डीईसी फ़ायरफ़्लाई मल्टीप्रोसेसर वैक्स वर्कस्टेशन लिखा गया था और जिसमें एआरएम आर्किटेक्वैरिएबल आधारित एकोर्न आर्किमिडीज़ श्रेणी के कंप्यूटरों के एआरएक्स (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम प्रोजेक्ट के लिए एआरसी पर एकॉर्न सी और मॉड्यूला एक्ज़ीक्यूशन लाइब्रेरी (केमल) के लिए एकोर्न कंपाइलर लिखा गया था। जैसा कि संशोधित मॉड्यूला -3 रिपोर्ट में कहा गया है, लैंग्वेज अन्य लैंग्वेज जैसे मेसा (प्रोग्रामिंग लैंग्वेज), सीडर (प्रोग्रामिंग लैंग्वेज), ऑब्जेक्ट पास्कल, ओबेरॉन (प्रोग्रामिंग लैंग्वेज) और यूक्लिड (प्रोग्रामिंग लैंग्वेज) से प्रभावित थी।[9] 1990 के दशक के समय, मॉड्यूला-3 ने शिक्षण लैंग्वेज के रूप में अधिक लोकप्रियता प्राप्त की थी, किन्तु इसे कभी भी औद्योगिक उपयोग के लिए व्यापक रूप से नहीं अपनाया गया था। इसमें योगदान देने वाला प्रमुख मॉड्यूला-3 समर्थक डीईसी का निधन हो सकता है (विशेषकर जब 1998 में डीईसी को कॉम्पैक को बेचे जाने से पहले इसने इसे प्रभावी विधि से बनाए रखना बंद कर दिया था)। किसी भी स्थिति में, मॉड्यूला-3 की सरलता और शक्ति के अतिरिक्त, ऐसा प्रतीत होता है कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रतिबंधित कार्यान्वयन के साथ प्रक्रियात्मक कॉमपिल्ड लैंग्वेज की बहुत कम मांग थी। कुछ समय के लिए, CM3 नाम का वाणिज्यिक कॉमपाईलर डीईसी एसआरसी के पूर्व मुख्य कार्यान्वयनकर्ताओं में से द्वारा बनाए रखा गया था, जिसे डीईसी से पहले कार्य पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एकीकृत विकास वातावरण (आईडीई) और एक्स्टेंसिबल जावा वर्चुअल मशीन (बाइनरी कोड में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा प्रस्तुत किए गए थे, किन्तु उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। elego सॉफ्टवेयर सॉल्यूशंस जीएमबीएच मॉड्यूला-3 अब विश्वविद्यालयों में अधिकतर तुलनात्मक प्रोग्रामिंग लैंग्वेज पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः मॉड्यूल-3 का एकमात्र कॉर्पोरेट समर्थक है , जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में CM3 सिस्टम के विभिन्न रिलीज़ किए हैं। रिएक्टर आईडीई को विभिन्न वर्षों के पश्चात् ओपन सोर्स जारी किया गया है, नए नाम सीएम3-आईडीई के साथ। मार्च 2002 में, elego ने अन्य सक्रिय मॉड्यूला-3 वितरण, पीएम3 के भंडार को भी अपने अधिक्रत में ले लिया था, जिसे तब तक इकोले पॉलिटेक्निक डी मॉन्ट्रियल में बनाए रखा गया था, किन्तु पश्चात् में एचएम3 पर कार्य जारी रहा, पश्चात् के वर्षों में इसमें सुधार हुआ जब तक कि यह अप्रचलित नहीं हो गया था।

सिंटैक्स

किसी लैंग्वेज के सिंटैक्स (प्रोग्रामिंग लैंग्वेज) का सामान्य उदाहरण हैलो, वर्ल्ड! प्रोग्राम.

MODULE Main; 
IMPORT IO;
BEGIN
  IO.Put("Hello World\n")
END Main.


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

MODULE Foo EXPORTS Main


मॉड्यूल फ़ाइल नाम स्रोत कोड में नाम के समान होने की सलाह दी जाती है। यदि वे भिन्न हैं, तो कंपाइलर केवल चेतावनी उत्सर्जित करता है।

सिंटैक्स में अन्य परंपराओं में इंटरफ़ेस के निर्यातित प्रकार का नामकरण सम्मिलित है T, चूंकि प्रकार सामान्यतः उनके पूर्ण नामों से योग्य होते हैं, इसलिए प्रकार T अंदर मॉड्यूल का नाम Foo रखा जाएगा Foo.T. इससे पठनीयता में सहायता मिलती है. इसी तरह का अन्य सम्मेलन किसी सार्वजनिक ऑब्जेक्ट का नामकरण करना है जैसा कि नीचे दिए गए OOP उदाहरणों में है।

लैंग्वेज विशेषताएँ

मॉड्यूलैरिटी

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

MODULE HelloWorld EXPORTS Main; 
IMPORT IO;
BEGIN
  IO.Put("Hello World\n")
END HelloWorld.


कोई भी कॉमपिल्ड इकाई हो सकती है IMPORT अन्य इंटरफ़ेस, चूंकि सर्कुलर आयात निषिद्ध हैं। इसे कार्यान्वयन मॉड्यूल से आयात करके हल किया जा सकता है। आयातित मॉड्यूल के अन्दर इकाइयों को केवल मॉड्यूल नाम के अतिरिक्त, FROM Module IMPORT Item [, Item]* का उपयोग करके आयात किया जा सकता है सिंटेक्स:

MODULE HelloWorld EXPORTS Main; 
FROM IO IMPORT Put;
BEGIN
  Put("Hello World\n")
END HelloWorld.


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

आयातित मॉड्यूल और मॉड्यूल के अन्दर अन्य इकाई के मध्य नाम टकराव की स्थिति में, आरक्षित वर्डAS के रूप में IMPORT CollidingModule AS X; का उपयोग किया जा सकता है


सुरक्षित बनाम असुरक्षित

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

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

जेनेरिक

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

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

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

फ़ाइल: IntegerElem.i3

INTERFACE IntegerElem;
CONST Name = "Integer";
TYPE T = INTEGER;
PROCEDURE Format(x: T): TEXT;
PROCEDURE Scan(txt: TEXT; VAR x: T): BOOLEAN;
END IntegerElem.


फ़ाइल: GenericStack.ig

GENERIC INTERFACE GenericStack(Element);
(* Here Element.T is the type to be stored in the generic stack. *)
TYPE
   T = Public OBJECT;
   Public = OBJECT
   METHODS
       init(): TStack;
       format(): TEXT;
       isEmpty(): BOOLEAN;
       count(): INTEGER;
       push(elm: Element.T);
       pop(VAR elem: Element.T): BOOLEAN;
   END;
END GenericStack.

FILE: GenericStack.mg

GENERIC MODULE GenericStack(Element);
< ... generic implementation details... >
PROCEDURE Format(self: T): TEXT =
VAR
   str: TEXT;
BEGIN
   str := Element.Name & "Stack{";
   FOR k := 0 TO self.n -1 DO
       IF k > 0 THEN str := str & ", "; END;
       str := str & Element.Format(self.arr[k]);
   END;
   str := str & "};";
   RETURN str;
END Format;
< ... more generic implementation details... >
END GenericStack.

FILE: IntegerStack.i3

INTERFACE IntegerStack = GenericStack(IntegerElem) END IntegerStack.

ट्रेसेबिलिटी

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

INTERFACE A;

TYPE Color = {Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Gray, White};

END A;
MODULE B;

IMPORT A;
FROM A IMPORT Color;

VAR
  aColor: A.Color;  (* Uses the module name as a prefix *)
  theColor: Color;  (* Does not have the module name as a prefix *)
  anotherColor: A.Color;

BEGIN
  aColor := A.Color.Brown;
  theColor := Color.Red;
  anotherColor := Color.Orange;  (* Can't simply use Orange *)
END B.

डायनामिक एलोकेशन

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

ऑब्जेक्ट-ओरिएंटेड

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

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

INTERFACE Person;

TYPE T <: Public;
  Public = OBJECT 
  METHODS
    getAge(): INTEGER;
    init(name: TEXT; age: INTEGER): T;
  END;

END Person.

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

VAR jim := NEW(Person.T).init("Jim", 25);


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

MODULE Person;

REVEAL T = Public BRANDED 
OBJECT 
  name: TEXT;   (* These two variables *)
  age: INTEGER; (* are private. *)
OVERRIDES
  getAge := Age;
  init := Init;
END;

PROCEDURE Age(self: T): INTEGER =
  BEGIN
    RETURN self.age;
  END Age;

PROCEDURE Init(self: T; name: TEXT; age: INTEGER): T =
  BEGIN
    self.name := name;
    self.age := age;
  RETURN self;
  END Init;

BEGIN
END Person.


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

मॉड्यूला-3 उन कुछ प्रोग्रामिंग लैंग्वेज में से है, जिन्हें कड़ाई से योग्य होने के लिए मॉड्यूल से बाहरी संदर्भों की आवश्यकता होती है। अर्थात मॉड्यूल में संदर्भ A ऑब्जेक्ट को x मॉड्यूल से निर्यात किया गया B फॉर्म लेना होगा B.x. मॉड्यूल-3 में, मॉड्यूल से सभी निर्यातित नामों को आयात करना असंभव है।

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

एक्सेप्शन

एक्सेप्शन हेंडलिंग किस पर आधारित है? TRY...EXCEPT ब्लॉक प्रणाली, जो तब से है विशेषता जिसे अन्य लैंग्वेज में नहीं अपनाया गया है, डेल्फ़ी (प्रोग्रामिंग लैंग्वेज), पायथन (प्रोग्रामिंग लैंग्वेज) के उल्लेखनीय एक्सेप्शन के साथस्थान, स्काला (प्रोग्रामिंग लैंग्वेज)[1] और विज़ुअल बेसिक.NET, वह है EXCEPT कंस्ट्रक्ट ने प्रत्येक संभावित एक्सेप्शन के साथ स्विच स्टेटमेंट के रूप को अपने EXCEPT क्लॉज में स्थिति के रूप में परिभाषित किया है। मॉड्यूल-3 भी सपोर्ट करता है a LOOP...EXIT...END उस लूप का निर्माण तब तक करें जब तक कि a EXIT होता है, a के अंदर साधारण लूप के समतुल्य संरचना TRY...EXCEPT खंड है.

मल्टी-थ्रेडेड

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

अंतर्निर्मित डेटा स्ट्रक्चर म्युटेक्स इसका उपयोग विभिन्न थ्रेड्स को सिंक्रोनाइज़ करने और डेटा स्ट्रक्चरओं को संभावित भ्रष्टाचार या दौड़ की स्थिति के साथ साथ एक्सेस से बचाने के लिए किया जाता है। LOCK e> स्टेटमेंट ब्लॉक प्रस्तुत करता है जिसमें म्यूटेक्स लॉक है। अनलॉक करना ए म्युटेक्स कोड निष्पादन लोकस के ब्लॉक छोड़ने से निहित है। म्युटेक्स e> ऑब्जेक्ट है, और इस प्रकार, अन्य ऑब्जेक्ट इससे प्राप्त की जा सकती हैं।

उदाहरण के लिए, लाइब्रेरी libm3 के इनपुट/आउटपुट (I/O) अनुभाग में, पाठक और लेखक (Rd.T, और Wr.T) म्युटेक्स से प्राप्त होते हैं, और वे किसी भी आंतरिक डेटा तक पहुंचने या संशोधित करने से पहले स्वयम को लॉक कर लेते हैं।



सारांश

संक्षेप में, लैंग्वेज की विशेषताएं:

मॉड्यूला-3 उन दुर्लभ लैंग्वेज में से है जिनकी विशेषताओं का विकास प्रलेखित है।

मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग में लैंग्वेज डिजाइन के चार आवश्यक बिंदुओं पर गहन वैरिएबल्चा की गई है। यह विषय हैं: संरचनात्मक बनाम नाम तुल्यता, उपप्रकार नियम, सामान्य मॉड्यूल और पैरामीटर मोड जैसे READONLY है

मानक लाइब्रेरी सुविधाएँ

इस प्रकार सी (प्रोग्रामिंग लैंग्वेज) लैंग्वेज के साथ प्रारंभ हुई प्रवृत्ति को जारी रखते हुए, वास्तविक प्रोग्राम लिखने के लिए आवश्यक विभिन्न सुविधाओं को लैंग्वेज परिभाषा से बाहर रखा गया और इसके अतिरिक्त मानक लाइब्रेरी सेट के माध्यम से प्रदान किया गया था। नीचे दिए गए अधिकांश इंटरफ़ेस का विस्तार से वर्णन किया गया है [10] मानक लाइब्रेरी निम्नलिखित सुविधाएँ प्रदान करते हैं। इन्हें मानक इंटरफ़ेस कहा जाता है और ये लैंग्वेज में आवश्यक (प्रदान किए जाने चाहिए) होते हैं।

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

कुछ अनुशंसित इंटरफ़ेस उपलब्ध कार्यान्वयन में प्रयुक्त किए गए हैं किन्तु आवश्यक नहीं हैं

  • लेक्स: संख्या और अन्य डेटा को पार्स करने के लिए
  • Fmt: मुद्रण के लिए विभिन्न डेटा प्रकारों को फ़ॉर्मेट करना
  • पीकेएल (या अचार): गारबेज कलेक्सनकर्ता द्वारा पहुंच योग्य किसी भी संदर्भ प्रकार का ऑब्जेक्ट क्रमांकन
  • टेबल: मानचित्र के लिए सामान्य मॉड्यूल (कंप्यूटर विज्ञान)

C की तरह, I/O भी लाइब्रेरीज़ के माध्यम से प्रदान किया जाता है, जिसे मॉड्यूल-3 कहा जाता है Rd और Wr. आरडी (रीडर) और डब्लूआर (लेखक) लाइब्रेरी के ऑब्जेक्ट-ओरिएंटेड डिज़ाइन को ग्रेग नेल्सन की पुस्तक में विस्तार से सम्मिलित किया गया है। मॉड्यूला-3 का रोचक पहलू यह है कि यह उन कुछ प्रोग्रामिंग लैंग्वेज में से है, जिनके मानक लाइब्रेरी को औपचारिक रूप से सत्यापित किया गया है कि उनमें लॉकिंग बग सहित विभिन्न प्रकार के बग सम्मिलित नहीं हैं। यह लार्च/मोडुला-3 के तत्वावधान में किया गया था (लार्च परिवार देखें)[11] और एक्सटेंडेड स्टैटिक चेकिंग [12] डीईसी एसआरसी में स्कीम सम्मिलित है।

कार्यान्वयन

विभिन्न कंपाइलर उपलब्ध हैं, उनमें से अधिकांश ओपन-सोर्स मॉडल हैं।

  • डीईसी-एसआरसी M3, मूल है।[13]
  • ओलिवेटी रिसर्च सेंटर (ओआरसी) मोडुला-3 टूलकिट, मूल रूप से कंपाइलर, अब मॉड्यूला-3 प्रोग्रामों के सिंटैक्स, शाब्दिक और अर्थ संबंधी विश्लेषण के लिए लाइब्रेरी के रूप में उपलब्ध है।[14]
  • क्रिटिकल मास CM3, डीईसी-एसआरसी M3 का अलग उत्तराधिकारी है
  • पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है
  • EzM3, स्वतंत्र हल्का और सरलता से पोर्टेबल कार्यान्वयन, सी.वी.एस.यू.पी के संबंध में विकसित किया गया था
  • एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, एनपीटीएल का उपयोग करके थ्रेडिंग के समर्थन के साथ उपयोग किया जाता है
  • CM3, क्रिटिकल मास CM3 का उत्तराधिकारी यह एकमात्र अद्यतन, अनुरक्षित और विकसित कार्यान्वयन है। रिलीज़ http://www.opencm3.net/releng/ पर उपलब्ध हैं।

चूँकि C डेटा स्ट्रक्चरओं का एकमात्र पहलू जो मॉड्यूल-3 से विलुप्त है, वह यूनियन प्रकार है, सभी वर्तमान मॉड्यूल-3 कार्यान्वयन एरे डेटा स्ट्रक्चर और रिकॉर्ड (कंप्यूटर विज्ञान) की C लैंग्वेज प्रकार की घोषणाओं के साथ अच्छी बाइनरी कोड संगतता प्रदान करने में सक्षम हैं।

किताबें

इनमें से कोई भी पुस्तक अभी भी प्रिंट में नहीं है, चूंकि उपयोग की गई प्रतियां प्राप्य हैं और कुछ आंशिक या पूर्ण रूप से डिजिटलीकृत हैं, और उनमें से कुछ अध्यायों के पूर्व या पश्चात् के वर्जन वेब से शोध रिपोर्ट के रूप में प्राप्त किए जा सकते हैं।

  • ग्रेग नेल्सन, एड., मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड सिस्टम सॉफ्टवेयर निर्माण पर रोचक लेखों और लैंग्वेज की अंतिम विशेषताओं तक ले जाने वाली वैरिएबल्चा के डॉक्यूमेंटेसन के साथ मॉड्यूला-3 लैंग्वेज पर निश्चित संदर्भ। कुछ पूर्व हैं (देखें [9]अध्याय दो के लिए,[15] अध्याय चार के लिए,[16] अध्याय पाँच के लिए,[17] अध्याय छह के लिए) और कुछ पीछे (देखें)।[18] अध्याय और अधिक अद्यतन दो के लिए, इस प्रकार लैंग्वेज परिभाषा के दोनों पूर्व वर्जन [9] और,[10]अध्याय तीन के लिए और[19] अध्याय सात के लिए) इसके आठ अध्यायों में से अधिकांश के प्रकाशन वर्जन डाउनलोड के लिए अनुसंधान रिपोर्ट के रूप में पूर्व डीईसी सिस्टम्स रिसर्च सेंटर (एसआरसी) से व्यक्तिगत रूप से उपलब्ध हैं।
  • सैमुअल पी. हार्बिसन, मॉड्यूला-3 कक्षा पाठ्यपुस्तक का उपयोग करना सरल है।
  • रॉबर्ट सेडगेविक (कंप्यूटर वैज्ञानिक), मॉड्यूला-3 में एल्गोरिदम है
  • लास्ज़लो बोस्ज़ोर्मेनी और कार्स्टन वीच, मॉड्यूला-3 में प्रोग्रामिंग: स्टाइल के साथ प्रोग्रामिंग में परिचय है
  • रेन्ज़ो ओरसिनी, एगोस्टिनो कॉर्टेसी प्रोग्राममेयर इन मोडुला-3: इंट्रोड्यूज़ियोन अल्ला प्रोग्राममेज़ियोन इम्पेरटिवा ई ए ओगेटी लैंग्वेज की इतालवी पुस्तक जो इसकी मुख्य विशेषताओं को समझाती है।

मॉड्यूला-3 का उपयोग करने वाली परियोजनाएं

मॉड्यूल-3 प्रोग्राम किए गए सॉफ़्टवेयर में सम्मिलित हैं:

  • स्पिन (ऑपरेटिंग सिस्टम) ऑपरेटिंग सिस्टम है
  • सीवीएसयूपी सॉफ्टवेयर स्टोर सिंक्रोनाइजिंग प्रोग्राम है
  • ओब्लिक लैंग्वेज, जो स्थानीय नेटवर्क पर वस्तुओं को पारदर्शी रूप से स्थानांतरित करने के लिए मॉड्यूला-3 नेटवर्क ऑब्जेक्ट की क्षमता का उपयोग करती है, जिससे मॉड्यूला-3 ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रतिमान में वितरित क्षमता की अनुमति मिलती है। इसका उपयोग मॉड्यूला-3 में स्क्रिप्टिंग एक्सटेंशन के रूप में वितरित एप्लिकेशन, कंप्यूटर एनिमेशन और वेब प्रोग्रामिंग एप्लिकेशन बनाने के लिए किया गया है।

अन्य प्रोग्रामिंग लैंग्वेज पर प्रभाव

चूंकि मॉड्यूला-3 को मुख्यधारा का स्थान नहीं मिला था, किन्तु डीईसी-एसआरसी एम3 वितरण के विभिन्न भागो को मिला था। संभवतः सबसे प्रभावशाली भाग नेटवर्क ऑब्जेक्ट लाइब्रेरी था, जिसने नेटवर्क प्रोटोकॉल सहित जावा के पहले रिमोट मेथड इनवोकेशन (आरएमआई) कार्यान्वयन का आधार बनाया था। केवल जब सन सामान्य ऑब्जेक्ट अनुरोध ब्रोकर आर्किटेक्वैरिएबल (कोरबा) मानक से सिम्पल इंटर-ओआरबी प्रोटोकॉल में चला गया तो इसे हटा दिया गया था। दूरस्थ वस्तुओं के गारबेज कलेक्सनण (कंप्यूटर विज्ञान) पर जावा डॉक्यूमेंट अभी भी मॉड्यूला -3 नेटवर्क ऑब्जेक्ट्स के लिए किए गए अग्रणी कार्य का उल्लेख करता है।[20] पायथन का कक्षाओं का कार्यान्वयन भी C++ और मॉड्यूल-3 में पाए जाने वाले वर्ग तंत्र से प्रेरित था।[21] साथ ही निम लैंग्वेज (प्रोग्रामिंग लैंग्वेज) मॉड्यूला-3 के कुछ तथ्यों का उपयोग करती है, जैसे डायनामिक एलोकेशन पॉइंटर्स है।

संदर्भ

  1. "Critical Mass Modula-3 (CM3)". Critical Mass Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
  2. "Polytechnique Montréal Modula-3 (PM3): What is it". Polytechnique Montréal Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
  3. Polstra, John D. (November 9, 2006). "Ezm3: An Easier Modula-3 Distribution". CVSup.org. Archived from the original on April 10, 2013. Retrieved 2020-03-21.
  4. Weich, Carsten. "M3/PC Klagenfurt 96: a Modula-3 environment for MS-DOS". Department of Informatics. University of Klagenfurt. Archived from the original on 20 May 2000. Retrieved 2020-03-21.
  5. Picheta, Dominik; Locurcio, Hugo. "Frequently Asked Questions". Retrieved 2020-03-21.
  6. "R/Rust - I just learned about Modula-3, a language that had a lot of similar goals to Rust, and there was even an experimental OS that relied on the safety provided by the language".
  7. van Rossum, Guido (May 1996). "Programming Python: Foreword (1st ed.)". Python.org. Retrieved 2020-03-21.
  8. "Design and History FAQ: Why must 'self' be used explicitly in method definitions and calls?". Python.org. March 21, 2020. Retrieved 2020-03-21.
  9. 9.0 9.1 9.2 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)
  10. 10.0 10.1 Some Useful Modula-3 Interfaces Archived 2016-03-04 at the Wayback Machine Jim Horning, Bill Kalsow, Paul McJones, Greg Nelson. DEC Systems Research Center (SRC) Research Report 113 (December 1993)
  11. LM3 Archived 2016-03-03 at the Wayback Machine Kevin D. Jones. DEC Systems Research Center (SRC) Research Report 72 (June 1991)
  12. Extended Static Checking Archived 2017-07-05 at the Wayback Machine David L. Detlefs, K. Rustan M. Leino, Greg Nelson, James B. Saxe. Compaq SRC Research Report 159 (December 1998)
  13. SRC Modula-3 3.3[permanent dead link] Bill Kalsow and Eric Muller. Digital Equipment Corporation (January 1995)
  14. Jordan, Mick (1990). "An extensible programming environment for Modula-3". SIGSOFT Softw. Eng. Notes. 15 (6): 66–76. doi:10.1145/99278.99285.
  15. An Introduction to Programming with Threads Archived 2017-07-05 at the Wayback Machine Andrew D. Birrell. DEC Systems Research Center (SRC) Research Report 35 (January 1989)
  16. Synchronization Primitives for a Multiprocessor: A Formal Specification Archived 2016-03-04 at the Wayback Machine A. D. Birrell, J. V. Guttag, J. J. Horning, R. Levin. DEC Systems Research Center (SRC) Research Report 20 (August 1987)
  17. IO Streams: Abstract Types, Real Programs Archived 2016-03-03 at the Wayback Machine Mark R. Brown and Greg Nelson. DEC Systems Research Center (SRC) Research Report 53 (November 1989)
  18. Modula-3 Reference Manual Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. DEC Systems Research Center (SRC) (February 1995)
  19. Trestle Tutorial Archived 2016-03-03 at the Wayback Machine Mark S. Manasse and Greg Nelson. DEC Systems Research Center (SRC) Research Report 69 (May 1992)
  20. Garbage Collection of Remote Objects, Java Remote Method Invocation Documentation for Java SE 8.
  21. Classes, Official Python Documentation.


बाहरी संबंध