मॉड्यूल-3: Difference between revisions
m (8 revisions imported from alpha:मॉड्यूल-3) |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Infobox programming language | {{Infobox programming language | ||
| name = | | name = मोडुला-3 | ||
| logo = Modula-3.svg | | logo = Modula-3.svg | ||
| logo size = 120px | | logo size = 120px | ||
| paradigms = [[ | | paradigms = [[इम्पेरेटिव प्रोग्रामिंग|इम्पेरेटिव]], [[संरचित प्रोग्रामिंग|संरचित]], [[प्रक्रियात्मक प्रोग्रामिंग|प्रक्रियात्मक]], [[मॉड्यूलर प्रोग्रामिंग|मॉड्यूलर]], [[समवर्ती कंप्यूटिंग|समवर्ती]], [[ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग|ऑब्जेक्ट-ओरिएंटेड]], [[जेनेरिक प्रोग्रामिंग|जेनेरिक]] | ||
| typing = [[ | | typing = [[मजबूत और कमजोर टाइपिंग|मजबूत]], [[स्टेटिक टाइपिंग|स्टेटिक]], [[टाइप सिस्टम#सुरक्षित और असुरक्षित टाइप किए गए सिस्टम|सुरक्षित]] या यदि [[सिस्टम टाइप करें#सुरक्षित और असुरक्षित टाइप किए गए सिस्टम|असुरक्षित]] स्पष्ट रूप से सुरक्षित पृथक | ||
| scope = [[ | | scope = [[स्कोप (कंप्यूटर साइंस)|लेक्सिकल]] | ||
| family = [[ | | family = [[निकलौस विर्थ|विर्थ]]/[[मोडुला]] | ||
| designers = [[ | | designers = [[लुका कार्डेली]], जेम्स डोनह्यू, ल्यूसिले ग्लासमैन, मिक जॉर्डन; बिल कल्सो, [[ग्रेग नेल्सन (कंप्यूटर वैज्ञानिक)|ग्रेग नेल्सन]] | ||
| developers = [[ | | developers = [[डिजिटल इक्विपमेंट कॉर्पोरेशन|डीईसी]]<br/>[[ओलिवेटी]]<br/>{{टाइपो नहीं|एलेगो}} सॉफ्टवेयर सॉल्यूशंस जीएमबीएच | ||
| released = {{Start date and age|1988}} | | released = {{Start date and age|1988}} | ||
| latest release version = 5.8.6 | | latest release version = 5.8.6 | ||
Line 15: | Line 15: | ||
| latest preview date = {{Start date and age|2010|07|14}} | | latest preview date = {{Start date and age|2010|07|14}} | ||
| implementations = [[DEC Systems Research Center|SRC]] Modula-3, CM3,<ref>{{Cite web |url=https://modula3.elegosoft.com/cm3/ |title=Critical Mass Modula-3 (CM3) |website=Critical Mass Modula-3 |publisher=elego Software Solutions GmbH |access-date=2020-03-21}}</ref> PM3,<ref>{{cite web |url=https://modula3.elegosoft.com/pm3/ |title=Polytechnique Montréal Modula-3 (PM3): What is it |author=<!--Unstated--> |date=<!--Undated--> |website=Polytechnique Montréal Modula-3 |publisher=elego Software Solutions GmbH |access-date=2020-03-21}}</ref> EZM3,<ref>{{cite web |url=http://www.cvsup.org/ezm3/ |title=Ezm3: An Easier Modula-3 Distribution |last=Polstra |first=John D. |date=November 9, 2006 |website=CVSup.org |url-status=dead |archive-url=https://web.archive.org/web/20130410151327/http://www.cvsup.org/ezm3/ |archive-date=April 10, 2013 |access-date=2020-03-21}}</ref> M3/PC Klagenfurt<ref>{{cite web |url=http://www.ifi.uni-klu.ac.at/Modula-3/m3pc/m3pc.html |title=M3/PC Klagenfurt 96: a Modula-3 environment for MS-DOS |last=Weich |first=Carsten |date=<!-- Undated. --> |website=Department of Informatics |publisher=University of Klagenfurt |url-status=dead |archive-url=https://web.archive.org/web/20000520073936/http://www.ifi.uni-klu.ac.at/Modula-3/m3pc/m3pc.html |archive-date=20 May 2000 |access-date=2020-03-21}}</ref> | | implementations = [[DEC Systems Research Center|SRC]] Modula-3, CM3,<ref>{{Cite web |url=https://modula3.elegosoft.com/cm3/ |title=Critical Mass Modula-3 (CM3) |website=Critical Mass Modula-3 |publisher=elego Software Solutions GmbH |access-date=2020-03-21}}</ref> PM3,<ref>{{cite web |url=https://modula3.elegosoft.com/pm3/ |title=Polytechnique Montréal Modula-3 (PM3): What is it |author=<!--Unstated--> |date=<!--Undated--> |website=Polytechnique Montréal Modula-3 |publisher=elego Software Solutions GmbH |access-date=2020-03-21}}</ref> EZM3,<ref>{{cite web |url=http://www.cvsup.org/ezm3/ |title=Ezm3: An Easier Modula-3 Distribution |last=Polstra |first=John D. |date=November 9, 2006 |website=CVSup.org |url-status=dead |archive-url=https://web.archive.org/web/20130410151327/http://www.cvsup.org/ezm3/ |archive-date=April 10, 2013 |access-date=2020-03-21}}</ref> M3/PC Klagenfurt<ref>{{cite web |url=http://www.ifi.uni-klu.ac.at/Modula-3/m3pc/m3pc.html |title=M3/PC Klagenfurt 96: a Modula-3 environment for MS-DOS |last=Weich |first=Carsten |date=<!-- Undated. --> |website=Department of Informatics |publisher=University of Klagenfurt |url-status=dead |archive-url=https://web.archive.org/web/20000520073936/http://www.ifi.uni-klu.ac.at/Modula-3/m3pc/m3pc.html |archive-date=20 May 2000 |access-date=2020-03-21}}</ref> | ||
| influenced by = [[ | | influenced by = [[ऐल्गॉल]], [[यूक्लिड (प्रोग्रामिंग लैंग्वेज)|यूक्लिड]], [[मेसा (प्रोग्रामिंग लैंग्वेज)|मेसा]], [[मोडुला-2]], [[मोडुला-2+]], [[ओबेरॉन (प्रोग्रामिंग लैंग्वेज)|ओबेरॉन]], [[पास्कल (प्रोग्रामिंग लैंग्वेज)|पास्कल]] | ||
| influenced = [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Nim (programming language)|Nim]],<ref>{{Cite web |url=http://nim-lang.org/question.html |title=Frequently Asked Questions |last1=Picheta |first1=Dominik |last2=Locurcio |first2=Hugo |date=<!-- Undated. --> |access-date=2020-03-21}}</ref> [[OCaml]], [[Rust (programming language)|Rust]],<ref>{{Cite web |url=https://www.reddit.com/r/rust/comments/cycjou/i_just_learned_about_modula3_a_language_that_had/|title=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 }}</ref> [[Python (programming language)|Python]]<ref>{{Cite web |url=https://www.python.org/doc/essays/foreword/ |title=Programming Python: Foreword (1st ed.) |last=van Rossum |first=Guido |date=May 1996 |website=Python.org |access-date=2020-03-21}}</ref> | | influenced = [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Nim (programming language)|Nim]],<ref>{{Cite web |url=http://nim-lang.org/question.html |title=Frequently Asked Questions |last1=Picheta |first1=Dominik |last2=Locurcio |first2=Hugo |date=<!-- Undated. --> |access-date=2020-03-21}}</ref> [[OCaml]], [[Rust (programming language)|Rust]],<ref>{{Cite web |url=https://www.reddit.com/r/rust/comments/cycjou/i_just_learned_about_modula3_a_language_that_had/|title=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 }}</ref> [[Python (programming language)|Python]]<ref>{{Cite web |url=https://www.python.org/doc/essays/foreword/ |title=Programming Python: Foreword (1st ed.) |last=van Rossum |first=Guido |date=May 1996 |website=Python.org |access-date=2020-03-21}}</ref> | ||
| platform = [[ | | platform = [[आईए-32]], [[x86-64]], [[पावरपीसी]], [[स्पार्क]] | ||
| operating system = [[ | | operating system = [[क्रॉस-प्लेटफ़ॉर्म]]: [[फ्रीबीएसडी]], [[लिनक्स]], [[डार्विन (ऑपरेटिंग सिस्टम)|डार्विन]], [[सनओएस]] | ||
| website = {{URL|www.modula3.org}} | | website = {{URL|www.modula3.org}} | ||
}} | }} | ||
'''मॉड्यूल-3''' [[प्रोग्रामिंग भाषा|प्रोग्रामिंग]] लैंग्वेज है जिसे मॉड्यूल-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 परियोजना नवंबर 1986 में | मोडुला-3 परियोजना नवंबर 1986 में प्रारंभ हुई जब [[मौरिस विल्केस]] ने मॉड्यूला के नए वर्जन के लिए कुछ विचारों के साथ निकोलस विर्थ को लिखा था। विल्केस इस बिंदु से ठीक पहले डीईसी में कार्य कर रहे थे, और इंग्लैंड लौट आए थे और ओलिवेटी के अनुसंधान रणनीति बोर्ड में सम्मिलित हो गए थे। विर्थ पहले ही [[ओबेरॉन (प्रोग्रामिंग भाषा)|ओबेरॉन (प्रोग्रामिंग लैंग्वेज)]] में चले गए थे, किन्तु विल्क्स की टीम द्वारा मोडुला नाम के अनुसार विकास जारी रखने में उन्हें कोई समस्या नहीं थी। लैंग्वेज की परिभाषा अगस्त 1988 में पूरी हुई, और जनवरी 1989 में अद्यतन वर्जन पूरा हुआ था। डीईसी और ओलिवेटी के कंपाइलर्स ने जल्द ही इसका अनुसरण किया था, और उसके पश्चात् तीसरे पक्ष का कार्यान्वयन हुआ था। | ||
इसका डिज़ाइन उस समय एसआरसी और [[बलूत का फल कंप्यूटर]] रिसर्च सेंटर (एआरसी, | इसका डिज़ाइन उस समय एसआरसी और [[बलूत का फल कंप्यूटर|एकोर्न कम्प्यूटर्स]] रिसर्च सेंटर (एआरसी, पश्चात् में ओआरसी जब ओलिवेटी [[ कब्जा |अक्वायर्ड]] एकोर्न) में उपयोग में आने वाली मोडुला-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 की सरलता और शक्ति के अतिरिक्त, ऐसा प्रतीत होता है कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रतिबंधित कार्यान्वयन के साथ प्रक्रियात्मक [[संकलित भाषा|कॉमपिल्ड]] लैंग्वेज की बहुत कम मांग थी। कुछ समय के लिए, सीएम3 नाम का वाणिज्यिक [[ संकलक |कॉमपाईलर]] डीईसी एसआरसी के पूर्व मुख्य कार्यान्वयनकर्ताओं में से द्वारा बनाए रखा गया था, जिसे डीईसी से पहले कार्य पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एकीकृत विकास वातावरण (आईडीई) और एक्स्टेंसिबल [[जावा वर्चुअल मशीन]] ([[बाइनरी कोड]] में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा प्रस्तुत किए गए थे, किन्तु उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। {{not a typo|elego}} सॉफ्टवेयर सॉल्यूशंस जीएमबीएच मॉड्यूला-3 अब विश्वविद्यालयों में अधिकतर तुलनात्मक प्रोग्रामिंग लैंग्वेज पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः मॉड्यूल-3 का एकमात्र कॉर्पोरेट समर्थक है, जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में सीएम3 सिस्टम के विभिन्न रिलीज़ किए हैं। रिएक्टर आईडीई को विभिन्न वर्षों के पश्चात् ओपन सोर्स जारी किया गया है, नए नाम सीएम3-आईडीई के साथ। मार्च 2002 में, {{not a typo|elego}} ने अन्य सक्रिय मॉड्यूला-3 वितरण, पीएम3 के भंडार को भी अपने अधिक्रत में ले लिया था, जिसे तब तक इकोले पॉलिटेक्निक डी मॉन्ट्रियल में बनाए रखा गया था, किन्तु पश्चात् में एचएम3 पर कार्य जारी रहा, पश्चात् के वर्षों में इसमें सुधार हुआ जब तक कि यह अप्रचलित नहीं हो गया था। | ||
1990 के दशक के | |||
== | ==सिंटैक्स== | ||
किसी लैंग्वेज के [[सिंटैक्स (प्रोग्रामिंग भाषाएँ)|सिंटैक्स (प्रोग्रामिंग लैंग्वेज)]] का सामान्य उदाहरण हैलो, वर्ल्ड! प्रोग्राम.<syntaxhighlight lang="abl"> | |||
किसी | MODULE Main; | ||
IMPORT IO; | |||
BEGIN | |||
IO.Put("Hello World\n") | |||
END Main. | |||
</syntaxhighlight> | |||
मॉड्यूल-3 के सभी प्रोग्रामों में कम से कम | मॉड्यूल-3 के सभी प्रोग्रामों में कम से कम मॉड्यूल फ़ाइल होती है, जबकि अधिकांश में इंटरफ़ेस फ़ाइल भी सम्मिलित होती है जिसका उपयोग क्लाइंट मॉड्यूल से डेटा तक पहुंचने के लिए करते हैं। कुछ अन्य लैंग्वेज की तरह, मॉड्यूला-3 प्रोग्राम को मुख्य मॉड्यूल निर्यात करना होगा, जो या तो Main.m3 नाम की फ़ाइल हो सकती है, या फ़ाइल कॉल कर सकती है <code>EXPORT</code> मुख्य मॉड्यूल निर्यात करने के लिए | ||
<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> ऐसे मॉड्यूल के लिए जिसका नाम समान नहीं है। उदाहरण के लिए, मुख्य प्रोग्राम मुख्य इंटरफ़ेस के लिए कार्यान्वयन मॉड्यूल निर्यात करता है।<syntaxhighlight> | ||
MODULE HelloWorld EXPORTS Main; | |||
IMPORT IO; | |||
BEGIN | |||
IO.Put("Hello World\n") | |||
END HelloWorld. | |||
</syntaxhighlight> | |||
कोई भी | कोई भी कॉमपिल्ड इकाई हो सकती है <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> | |||
सामान्यतः, कोई केवल इंटरफ़ेस आयात करता है, और इंटरफ़ेस के अन्दर आइटम तक पहुंचने के लिए 'डॉट' नोटेशन का उपयोग करता है (रिकॉर्ड के अन्दर फ़ील्ड तक पहुंचने के समान)। सामान्य उपयोग किसी भी समर्थन प्रक्रिया के साथ प्रति इंटरफ़ेस [[डेटा संरचना|डेटा स्ट्रक्चर]] (रिकॉर्ड या ऑब्जेक्ट) को परिभाषित करना है। यहां मुख्य प्रकार को 'टी' नाम मिलेगा, और <code>MyModule.T</code>. का उपयोग इन के रूप में किया जाएगा | |||
<code> | |||
आयातित मॉड्यूल और मॉड्यूल के अन्दर अन्य इकाई के मध्य नाम टकराव की स्थिति में, आरक्षित वर्ड<code>AS</code> के रूप में <code>IMPORT CollidingModule AS X;</code> का उपयोग किया जा सकता है | |||
===सुरक्षित बनाम असुरक्षित=== | ===सुरक्षित बनाम असुरक्षित=== | ||
कुछ क्षमताएं असुरक्षित मानी जाती हैं, जहां कंपाइलर अब गारंटी नहीं दे सकता कि परिणाम सुसंगत होंगे; उदाहरण के लिए, जब C (प्रोग्रामिंग | कुछ क्षमताएं असुरक्षित मानी जाती हैं, जहां कंपाइलर अब गारंटी नहीं दे सकता कि परिणाम सुसंगत होंगे; उदाहरण के लिए, जब 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++ टेम्पलेट में, नंगे प्रकार का उपयोग किया जाता है। | |||
फ़ाइल: IntegerElem.i3 | '''फ़ाइल: IntegerElem.i3'''<syntaxhighlight> | ||
INTERFACE IntegerElem; | |||
CONST Name = "Integer"; | |||
TYPE T = INTEGER; | |||
PROCEDURE Format(x: T): TEXT; | |||
PROCEDURE Scan(txt: TEXT; VAR x: T): BOOLEAN; | |||
END IntegerElem. | |||
</syntaxhighlight> | |||
< | '''फ़ाइल: 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; | 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. | |||
</syntaxhighlight> | |||
</ | |||
===ट्रेसेबिलिटी=== | ===ट्रेसेबिलिटी=== | ||
अन्य | अन्य लैंग्वेज की 'सम्मिलित' सुविधा के विपरीत, किसी भी पहचानकर्ता का पता वहीं लगाया जा सकता है जहां से उसकी उत्पत्ति हुई थी। कॉमपिल्ड इकाई को अन्य कॉमपिल्ड इकाइयों से पहचानकर्ताओं को आयात करना होगा <code>IMPORT</code> कथन यहां तक कि गणनाएं भी उसी 'डॉट' नोटेशन का उपयोग करती हैं जैसा कि किसी रिकॉर्ड के फ़ील्ड तक पहुंचने के समय किया जाता है।<syntaxhighlight> | ||
INTERFACE A; | |||
< | |||
TYPE Color = {Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Gray, White}; | |||
END A; | |||
</syntaxhighlight><syntaxhighlight> | |||
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. | |||
</syntaxhighlight> | |||
===डायनामिक एलोकेशन === | |||
मॉड्यूला-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> | |||
INTERFACE Person; | |||
TYPE T <: Public; | |||
< | Public = OBJECT | ||
METHODS | |||
getAge(): INTEGER; | |||
init(name: TEXT; age: INTEGER): T; | |||
END; | |||
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> | |||
मॉड्यूल-3 <code>REVEAL</code> कन्स्ट्रक्ट, इच्छानुसार विधि से मित्रता के विभिन्न स्तरों के साथ, ग्राहकों से कार्यान्वयन विवरण छिपाने के लिए वैचारिक रूप से सरल और स्वच्छ किन्तु बहुत शक्तिशाली तंत्र प्रदान करता है। उपयोग <code>REVEAL</code> का पूर्ण कार्यान्वयन दिखाने के लिए <code>Person</code> ऊपर से इंटरफ़ेस है.<syntaxhighlight> | |||
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. | |||
</syntaxhighlight> | |||
<code>BRANDED</code> कीवर्ड के उपयोग पर ध्यान दें, जो संरचनात्मक तुल्यता से बचने के लिए वस्तुओं को अद्वितीय बनाने के लिए उन्हें ब्रांड करता है। <code>BRANDED</code> स्ट्रिंग को तर्क के रूप में भी ले सकते हैं, किन्तु जब छोड़ा जाता है, तो आपके लिए अद्वितीय स्ट्रिंग उत्पन्न होती है। | |||
मॉड्यूला-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> खंड है. | |||
===मल्टी-थ्रेडेड=== | |||
लैंग्वेज मल्टी-थ्रेडिंग के उपयोग और थ्रेड्स के मध्य सिंक्रनाइज़ेशन का समर्थन करती है। | |||
[[ क्रम पुस्तकालय | क्रम लाइब्रेरी]] (एम3कोर) के अन्दर थ्रेड नामक मानक मॉड्यूल है, जो मल्टी-थ्रेडेड अनुप्रयोगों के उपयोग का समर्थन करता है। मॉड्यूला-3 रनटाइम गारबेज कलेक्सनण जैसे आंतरिक कार्यों के लिए अलग थ्रेड का उपयोग कर सकता है। | |||
अंतर्निर्मित डेटा स्ट्रक्चर <code>[[Lock (computer science)|म्युटेक्स]]</code> इसका उपयोग विभिन्न थ्रेड्स को सिंक्रोनाइज़ करने और डेटा स्ट्रक्चरओं को संभावित भ्रष्टाचार या दौड़ की स्थिति के साथ साथ एक्सेस से बचाने के लिए किया जाता है। <code>LOCK</code> e> स्टेटमेंट ब्लॉक प्रस्तुत करता है जिसमें म्यूटेक्स लॉक है। अनलॉक करना ए <code>म्युटेक्स</code> कोड निष्पादन लोकस के ब्लॉक छोड़ने से निहित है। <code>म्युटेक्स</code> e> ऑब्जेक्ट है, और इस प्रकार, अन्य ऑब्जेक्ट इससे प्राप्त की जा सकती हैं। | |||
उदाहरण के लिए, लाइब्रेरी libm3 के इनपुट/आउटपुट (I/O) अनुभाग में, पाठक और लेखक (Rd.T, और Wr.T) म्युटेक्स से प्राप्त होते हैं, और वे किसी भी आंतरिक डेटा तक पहुंचने या संशोधित करने से पहले स्वयम को लॉक कर लेते हैं। | |||
===सारांश=== | ===सारांश=== | ||
संक्षेप में, | संक्षेप में, लैंग्वेज की विशेषताएं: | ||
*[[मॉड्यूलैरिटी (प्रोग्रामिंग)]] और [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] | *[[मॉड्यूलैरिटी (प्रोग्रामिंग)]] और [[इंटरफ़ेस (कंप्यूटर विज्ञान)]] | ||
*असुरक्षित कोड का स्पष्ट अंकन | *असुरक्षित कोड का स्पष्ट अंकन | ||
*सामान्य प्रोग्रामिंग | *सामान्य प्रोग्रामिंग | ||
*स्वचालित | *स्वचालित गारबेज कलेक्सनण (कंप्यूटर विज्ञान) | ||
*दृढ़ता से टाइप की गई प्रोग्रामिंग | *दृढ़ता से टाइप की गई प्रोग्रामिंग लैंग्वेज, प्रकारों की संरचनात्मक तुल्यता | ||
*[[वस्तु (कंप्यूटर विज्ञान)]] | *[[वस्तु (कंप्यूटर विज्ञान)|ऑब्जेक्ट (कंप्यूटर विज्ञान)]] | ||
*एक्सेप्शन हेंडलिंग | *एक्सेप्शन हेंडलिंग | ||
*थ्रेड (कंप्यूटर विज्ञान) | *थ्रेड (कंप्यूटर विज्ञान) | ||
मॉड्यूला-3 उन दुर्लभ | मॉड्यूला-3 उन दुर्लभ लैंग्वेज में से है जिनकी विशेषताओं का विकास प्रलेखित है। | ||
मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग में | मॉड्यूला-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> मानक लाइब्रेरी निम्नलिखित सुविधाएँ प्रदान करते हैं। इन्हें मानक इंटरफ़ेस कहा जाता है और ये लैंग्वेज में आवश्यक (प्रदान किए जाने चाहिए) होते हैं। | ||
मानक | * टेक्स्ट: <code>TEXT</code>एस अपरिवर्तनीय स्ट्रिंग संदर्भों पर संचालन, कहा जाता है | ||
* | * थ्रेड: थ्रेडिंग से संबंधित संचालन, जिसमें सम्मिलित हैं <code>म्युटेक्स</code>, स्थिति परिवर्तनशील, और थ्रेड का रुकना थ्रेडिंग लाइब्रेरी प्री-एम्प्टिव थ्रेड स्विचिंग प्रदान करती है | ||
* थ्रेड: थ्रेडिंग से संबंधित संचालन, जिसमें | * वर्ड: अहस्ताक्षरित पूर्णांकों (या मशीन वर्डों) पर बिटवाइज़ संचालन सामान्यतः कॉमपाईलर द्वारा सीधे कार्यान्वित किया जाता है | ||
* | |||
* फ़्लोटिंग-पॉइंट इंटरफ़ेस | * फ़्लोटिंग-पॉइंट इंटरफ़ेस | ||
कुछ अनुशंसित इंटरफ़ेस उपलब्ध कार्यान्वयन में | कुछ अनुशंसित इंटरफ़ेस उपलब्ध कार्यान्वयन में प्रयुक्त किए गए हैं किन्तु आवश्यक नहीं हैं | ||
* लेक्स: संख्या और अन्य डेटा को पार्स करने के लिए | * लेक्स: संख्या और अन्य डेटा को पार्स करने के लिए | ||
* Fmt: मुद्रण के लिए विभिन्न डेटा प्रकारों को फ़ॉर्मेट करना | * Fmt: मुद्रण के लिए विभिन्न डेटा प्रकारों को फ़ॉर्मेट करना | ||
* पीकेएल (या अचार): | * पीकेएल (या अचार): गारबेज कलेक्सनकर्ता द्वारा पहुंच योग्य किसी भी संदर्भ प्रकार का ऑब्जेक्ट क्रमांकन | ||
* | * टेबल: मानचित्र के लिए सामान्य मॉड्यूल (कंप्यूटर विज्ञान) | ||
C की तरह, I/O भी लाइब्रेरीज़ के माध्यम से प्रदान किया जाता है, जिसे | 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> [[डीईसी एसआरसी]] में स्कीम सम्मिलित है। | ||
==कार्यान्वयन== | ==कार्यान्वयन== | ||
विभिन्न कंपाइलर उपलब्ध हैं, उनमें से अधिकांश [[ओपन-सोर्स मॉडल]] हैं। | |||
* | *डीईसी-एसआरसी एम3, मूल है।<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 टूलकिट, मूल रूप से कंपाइलर, अब मॉड्यूला-3 प्रोग्रामों के सिंटैक्स, शाब्दिक और अर्थ संबंधी विश्लेषण के लिए लाइब्रेरी के रूप में उपलब्ध है।<ref>{{Cite journal | ||
| doi = 10.1145/99278.99285 | | doi = 10.1145/99278.99285 | ||
| volume = 15 | | volume = 15 | ||
Line 302: | Line 307: | ||
| doi-access = free | | doi-access = free | ||
}}</ref> | }}</ref> | ||
*क्रिटिकल मास | *क्रिटिकल मास सीएम3, डीईसी-एसआरसी एम3 का अलग उत्तराधिकारी है | ||
*पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है | *पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है | ||
*EzM3, | *EzM3, स्वतंत्र हल्का और सरलता से पोर्टेबल कार्यान्वयन, सी.वी.एस.यू.पी के संबंध में विकसित किया गया था | ||
*एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, [[एनपीटीएल]] का उपयोग करके | *एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, [[एनपीटीएल]] का उपयोग करके थ्रेडिंग के समर्थन के साथ उपयोग किया जाता है | ||
* | *सीएम3, क्रिटिकल मास सीएम3 का उत्तराधिकारी यह एकमात्र अद्यतन, अनुरक्षित और विकसित कार्यान्वयन है। रिलीज़ [http://www.opencm3.net/releng/ http://www.openसीएम3.net/releng/] पर उपलब्ध हैं। | ||
चूँकि C डेटा | चूँकि C डेटा स्ट्रक्चरओं का एकमात्र पहलू जो मॉड्यूल-3 से विलुप्त है, वह यूनियन प्रकार है, सभी वर्तमान मॉड्यूल-3 कार्यान्वयन एरे डेटा स्ट्रक्चर और [[रिकॉर्ड (कंप्यूटर विज्ञान)]] की C लैंग्वेज प्रकार की घोषणाओं के साथ अच्छी बाइनरी कोड संगतता प्रदान करने में सक्षम हैं। | ||
== | ==पुस्तकें== | ||
इनमें से कोई भी पुस्तक अभी भी प्रिंट में नहीं है, | इनमें से कोई भी पुस्तक अभी भी प्रिंट में नहीं है, चूंकि उपयोग की गई प्रतियां प्राप्य हैं और कुछ आंशिक या पूर्ण रूप से डिजिटलीकृत हैं, और उनमें से कुछ अध्यायों के पूर्व या पश्चात् के वर्जन वेब से शोध रिपोर्ट के रूप में प्राप्त किए जा सकते हैं। | ||
*ग्रेग नेल्सन, एड., मॉड्यूला-3 के साथ सिस्टम प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड सिस्टम सॉफ्टवेयर निर्माण पर | *ग्रेग नेल्सन, एड., मॉड्यूला-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 नेटवर्क ऑब्जेक्ट्स के लिए किए गए अग्रणी कार्य का उल्लेख करता है।<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 के कुछ तथ्यों का उपयोग करती है, जैसे डायनामिक एलोकेशन पॉइंटर्स है। | |||
साथ ही निम | |||
==संदर्भ== | ==संदर्भ== | ||
{{Reflist}} | {{Reflist}} | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
*{{Official website|www.modula3.org}} | *{{Official website|www.modula3.org}} | ||
*{{GitHub|modula3|Modula3}} | *{{GitHub|modula3|Modula3}} | ||
*[http://www.opencm3.net | *[http://www.opencm3.net सीएम3 Implementation Website] | ||
*[http://www.research.compaq.com/SRC/modula-3/html/home.html | *[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 | *[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 | *[news:comp.lang.modula3 मॉड्यूल-3 newsgroup], mostly deserted | ||
*[https://web.archive.org/web/20120326171529/https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3devel | *[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 | *[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 | *[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: | *[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 '' | *[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 | *[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 | *[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 में बनाई गईं]] | ||
Line 356: | Line 359: | ||
[[Category: Machine Translated Page]] | [[Category: Machine Translated Page]] | ||
[[Category:Created On 17/08/2023]] | [[Category:Created On 17/08/2023]] | ||
[[Category:Vigyan Ready]] |
Latest revision as of 09:30, 29 November 2023
Paradigms | इम्पेरेटिव, संरचित, प्रक्रियात्मक, मॉड्यूलर, समवर्ती, ऑब्जेक्ट-ओरिएंटेड, जेनेरिक |
---|---|
परिवार | विर्थ/मोडुला |
द्वारा डिज़ाइन किया गया | लुका कार्डेली, जेम्स डोनह्यू, ल्यूसिले ग्लासमैन, मिक जॉर्डन; बिल कल्सो, ग्रेग नेल्सन |
Developers | डीईसी ओलिवेटी Template:टाइपो नहीं सॉफ्टवेयर सॉल्यूशंस जीएमबीएच |
पहली प्रस्तुति | 1988 |
Stable release | 5.8.6
/ July 14, 2010 |
Preview release | 5.8.6
/ July 14, 2010 |
टाइपिंग अनुशासन | मजबूत, स्टेटिक, सुरक्षित या यदि असुरक्षित स्पष्ट रूप से सुरक्षित पृथक |
स्कोप | लेक्सिकल |
प्लेटफॉर्म | आईए-32, x86-64, पावरपीसी, स्पार्क |
ओएस | क्रॉस-प्लेटफ़ॉर्म: फ्रीबीएसडी, लिनक्स, डार्विन, सनओएस |
वेबसाइट | www |
Major implementations | |
SRC Modula-3, CM3,[1] PM3,[2] EZM3,[3] M3/PC Klagenfurt[4] | |
Influenced by | |
ऐल्गॉल, यूक्लिड, मेसा, मोडुला-2, मोडुला-2+, ओबेरॉन, पास्कल | |
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 की सरलता और शक्ति के अतिरिक्त, ऐसा प्रतीत होता है कि ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रतिबंधित कार्यान्वयन के साथ प्रक्रियात्मक कॉमपिल्ड लैंग्वेज की बहुत कम मांग थी। कुछ समय के लिए, सीएम3 नाम का वाणिज्यिक कॉमपाईलर डीईसी एसआरसी के पूर्व मुख्य कार्यान्वयनकर्ताओं में से द्वारा बनाए रखा गया था, जिसे डीईसी से पहले कार्य पर रखा गया था, कॉम्पैक को बेचा जा रहा था, रिएक्टर नामक एकीकृत विकास वातावरण (आईडीई) और एक्स्टेंसिबल जावा वर्चुअल मशीन (बाइनरी कोड में लाइसेंस प्राप्त) और स्रोत कोड प्रारूप और रिएक्टर के साथ निर्माण योग्य) क्रिटिकल मास, इंक. द्वारा प्रस्तुत किए गए थे, किन्तु उस कंपनी ने 2000 में सक्रिय संचालन बंद कर दिया और अपने उत्पादों के कुछ स्रोत कोड दे दिए। elego सॉफ्टवेयर सॉल्यूशंस जीएमबीएच मॉड्यूला-3 अब विश्वविद्यालयों में अधिकतर तुलनात्मक प्रोग्रामिंग लैंग्वेज पाठ्यक्रमों में पढ़ाया जाता है, और इसकी पाठ्यपुस्तकें प्रिंट से बाहर हैं। मूलतः मॉड्यूल-3 का एकमात्र कॉर्पोरेट समर्थक है, जिसे क्रिटिकल मास से स्रोत विरासत में मिले और तब से उसने स्रोत और बाइनरी कोड में सीएम3 सिस्टम के विभिन्न रिलीज़ किए हैं। रिएक्टर आईडीई को विभिन्न वर्षों के पश्चात् ओपन सोर्स जारी किया गया है, नए नाम सीएम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] डीईसी एसआरसी में स्कीम सम्मिलित है।
कार्यान्वयन
विभिन्न कंपाइलर उपलब्ध हैं, उनमें से अधिकांश ओपन-सोर्स मॉडल हैं।
- डीईसी-एसआरसी एम3, मूल है।[13]
- ओलिवेटी रिसर्च सेंटर (ओआरसी) मोडुला-3 टूलकिट, मूल रूप से कंपाइलर, अब मॉड्यूला-3 प्रोग्रामों के सिंटैक्स, शाब्दिक और अर्थ संबंधी विश्लेषण के लिए लाइब्रेरी के रूप में उपलब्ध है।[14]
- क्रिटिकल मास सीएम3, डीईसी-एसआरसी एम3 का अलग उत्तराधिकारी है
- पॉलिटेक्निक मॉन्ट्रियल मोडुला-3 पीएम3, डीईसी-एसआरसी एम3 का उत्तराधिकारी, वर्तमान में सीएम3 के साथ विलय कर रहा है
- EzM3, स्वतंत्र हल्का और सरलता से पोर्टेबल कार्यान्वयन, सी.वी.एस.यू.पी के संबंध में विकसित किया गया था
- एचएम3, पीएम3 के पीएम3-1.1.15 रिलीज का उत्तराधिकारी, एनपीटीएल का उपयोग करके थ्रेडिंग के समर्थन के साथ उपयोग किया जाता है
- सीएम3, क्रिटिकल मास सीएम3 का उत्तराधिकारी यह एकमात्र अद्यतन, अनुरक्षित और विकसित कार्यान्वयन है। रिलीज़ http://www.openसीएम3.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 के कुछ तथ्यों का उपयोग करती है, जैसे डायनामिक एलोकेशन पॉइंटर्स है।
संदर्भ
- ↑ "Critical Mass Modula-3 (CM3)". Critical Mass Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
- ↑ "Polytechnique Montréal Modula-3 (PM3): What is it". Polytechnique Montréal Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
- ↑ 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.
- ↑ 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.
- ↑ Picheta, Dominik; Locurcio, Hugo. "Frequently Asked Questions". Retrieved 2020-03-21.
- ↑ "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".
- ↑ van Rossum, Guido (May 1996). "Programming Python: Foreword (1st ed.)". Python.org. Retrieved 2020-03-21.
- ↑ "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.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.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)
- ↑ LM3 Archived 2016-03-03 at the Wayback Machine Kevin D. Jones. DEC Systems Research Center (SRC) Research Report 72 (June 1991)
- ↑ 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)
- ↑ SRC Modula-3 3.3[permanent dead link] Bill Kalsow and Eric Muller. Digital Equipment Corporation (January 1995)
- ↑ Jordan, Mick (1990). "An extensible programming environment for Modula-3". SIGSOFT Softw. Eng. Notes. 15 (6): 66–76. doi:10.1145/99278.99285.
- ↑ 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)
- ↑ 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)
- ↑ 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)
- ↑ Modula-3 Reference Manual Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalsow, Greg Nelson. DEC Systems Research Center (SRC) (February 1995)
- ↑ 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)
- ↑ Garbage Collection of Remote Objects, Java Remote Method Invocation Documentation for Java SE 8.
- ↑ Classes, Official Python Documentation.
बाहरी संबंध
- Official website
- Modula3 on GitHub
- सीएम3 Implementation Website
- मॉड्यूल-3 Home Page (now long dead, mirror)
- मॉड्यूल-3: Language definition
- elego Software Solutions
- मॉड्यूल-3 newsgroup, mostly deserted
- मॉड्यूल-3 Development Mailing List, active
- Notes from Caltech's CS2 class, taught in मॉड्यूल-3 in 2002 and 2003
- Caltech's CS3 class 2009 at the Wayback Machine (archived May 23, 2013)
- mirror Programming in मॉड्यूल-3: program examples
- Building Distributed OO Applications: मॉड्यूल-3 Objects at Work. Michel R. Dagenais. Draft Version (January 1997)
- मॉड्यूल-3: Language, Libraries and Tools. Presentation on मॉड्यूल-3 over 120 slides. Michael R. Dagenais[permanent dead link], dead
- Object-Oriented Data Abstraction in मॉड्यूल-3. Joseph Bergin (1997)
- Computerworld Interview with Luca Cardelli on मॉड्यूल-3