मॉड्यूल -3

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

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

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

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

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

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

सिंटेक्स

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> मॉड्यूल मेन; आयात आईओ; शुरू

 IO.Put( हैलो वर्ल्ड\n )

अंत मुख्य। </वाक्यविन्यास हाइलाइट>

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

MODULE Foo Exports Main

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

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

भाषा सुविधाएँ

मॉड्यूलरिटी

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> मॉड्यूल हैलोवर्ल्ड निर्यात मुख्य; आयात आईओ; शुरू

 IO.Put( हैलो वर्ल्ड\n )

अंत हैलोवर्ल्ड। </वाक्यविन्यास हाइलाइट>

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> मॉड्यूल हैलोवर्ल्ड निर्यात मुख्य; आईओ आयात पुट से; शुरू

 पुट( हैलो वर्ल्ड\n )

अंत हैलोवर्ल्ड। </वाक्यविन्यास हाइलाइट>

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

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


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

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

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

जेनरिक

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

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

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

फ़ाइल: IntegerElem.i3

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूला 3 हाइलाइट = 1> इंटरफ़ेस इंटीजर एलेम; CONST नाम = पूर्णांक; टाइप टी = पूर्णांक; प्रक्रिया प्रारूप (एक्स: टी): पाठ; प्रक्रिया स्कैन (txt: TEXT; VAR x: T): बूलियन; END इंटीजर एलेम। </वाक्यविन्यास हाइलाइट>

फ़ाइल: GenericStack.ig

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूला 3 हाइलाइट = 1> सामान्य इंटरफ़ेस जेनेरिकस्टैक (एलिमेंट); (* यहाँ Element.T जेनेरिक स्टैक में संग्रहित किया जाने वाला प्रकार है। *) प्रकार

  टी = सार्वजनिक वस्तु;
  सार्वजनिक = वस्तु
  विधि
      init (): टीस्टैक;
      प्रारूप (): पाठ;
      खाली है (): बूलियन;
      गिनती (): पूर्णांक;
      धक्का (एल्म: Element.T);
      पॉप (VAR तत्व: Element.T): बूलियन;
  अंत;

END जेनेरिकस्टैक। </वाक्यविन्यास हाइलाइट>

फ़ाइल: GenericStack.mg

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूला 3 हाइलाइट = 1> सामान्य मॉड्यूल जेनेरिकस्टैक (एलिमेंट); <... सामान्य कार्यान्वयन विवरण...> प्रक्रिया प्रारूप (स्व: टी): पाठ = वीएआर

  str: पाठ;

शुरू

  str := Element.Name & Stack{ ;
  के लिए := 0 से स्व.n -1 डीओ
      यदि k > 0 तब str := str & ; अंत;
      str := str & Element.Format(self.arr[k]);
  अंत;
  str := str & }; ;
  रिटर्न स्ट्र;

अंत प्रारूप; <... अधिक सामान्य कार्यान्वयन विवरण...> END जेनेरिकस्टैक। </वाक्यविन्यास हाइलाइट>

फ़ाइल: IntegerStack.i3

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

फ़ाइल: IntegerStack.m3

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

पता लगाने की क्षमता

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> इंटरफ़ेस ए;

प्रकार का रंग = {काला, भूरा, लाल, नारंगी, पीला, हरा, नीला, बैंगनी, ग्रे, सफेद};

अंत ए; </वाक्यविन्यास हाइलाइट> <वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> मॉड्यूल बी;

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

वीएआर

 एक रंग: एक रंग; (* मॉड्यूल नाम को उपसर्ग के रूप में उपयोग करता है *)
 रंग: रंग; (* उपसर्ग के रूप में मॉड्यूल का नाम नहीं है *)
 दूसरा रंग: ए रंग;

शुरू

 एक रंग : = एक रंग। भूरा;
 रंग := रंग। लाल;
 दूसरा रंग := रंग.नारंगी; (* केवल ऑरेंज का उपयोग नहीं कर सकते *)

अंत बी. </वाक्यविन्यास हाइलाइट>

गतिशील आवंटन

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

वस्तु-उन्मुख

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

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> इंटरफ़ेस व्यक्ति;

टाइप टी <: सार्वजनिक;

 सार्वजनिक = वस्तु
 विधि
   getAge (): पूर्णांक;
   init (नाम: पाठ; आयु: पूर्णांक): टी;
 अंत;

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

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

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

<वाक्यविन्यास प्रकाश लैंग = मॉड्यूल 3> मॉड्यूल व्यक्ति;

खुलासा टी = सार्वजनिक ब्रांडेड वस्तु

 नाम: पाठ; (* ये दो चर *)
 आयु: पूर्णांक; (* निजी हैं। *)

ओवरराइड

 getAge := आयु;
 init : = init;

अंत;

प्रक्रिया आयु (स्व: टी): पूर्णांक =

 शुरू
   रिटर्न स्व.उम्र;
 अंत आयु;

प्रक्रिया प्रारंभ (स्व: टी; नाम: पाठ; आयु: पूर्णांक): टी =

 शुरू
   स्वनाम: = नाम;
   स्व.उम्र := उम्र;
 स्वयं लौटें;
 अंत प्रारंभ;

शुरू अंत व्यक्ति। </वाक्यविन्यास हाइलाइट>

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

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

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

अपवाद

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

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

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

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

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


सारांश

संक्षेप में, भाषा विशेषताएं:

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

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

मानक पुस्तकालय सुविधाएँ

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

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

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

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

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

कार्यान्वयन

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

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

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

पुस्तकें

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

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

== मोडुला-3 == का उपयोग करने वाली परियोजनाएं सॉफ्टवेयर जो मॉड्यूला -3 प्रोग्राम किया गया है इसमें शामिल हैं:

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

अन्य प्रोग्रामिंग भाषाओं पर प्रभाव

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

संदर्भ

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


बाहरी संबंध