मॉड्यूल-3
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