मॉड्यूल-3

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

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

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

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

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

 मॉड्यूल मुख्य; आयात आईओ; शुरू IO.पुट(हैलो वर्ल्ड\n) END मुख्य. 

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

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

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

 मॉड्यूल हैलोवर्ल्ड एक्सपोर्ट्स मुख्य; आयात आईओ; शुरू IO.पुट(हैलो वर्ल्ड\n) समाप्त हैलोवर्ल्ड। 

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

 मॉड्यूल हैलोवर्ल्ड एक्सपोर्ट्स मुख्य; आईओ आयात पुट से; शुरू रखो(हैलो वर्ल्ड\n) समाप्त हैलोवर्ल्ड। 

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

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

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

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

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

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

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

फ़ाइल: IntegerElem.i3

 इंटरफ़ेस पूर्णांकElem; CONST नाम = पूर्णांक; प्रकार टी = पूर्णांक; प्रक्रिया प्रारूप(x: T): पाठ; प्रक्रिया स्कैन(txt: टेक्स्ट; VAR x: T): बूलियन; अंत पूर्णांकElem. 

फ़ाइल: GenericStack.ig

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

फ़ाइल: जेनेरिकस्टैक.एमजी

 जेनेरिक मॉड्यूल जेनेरिकस्टैक(एलिमेंट); <... सामान्य कार्यान्वयन विवरण... > प्रक्रिया प्रारूप (स्वयं: टी): पाठ = वीएआर str: पाठ; शुरू str := Element.Name & Stack{ ; k के लिए := 0 प्रति self.n -1 DO      यदि k > 0 तो str := str &, ; अंत; str := str और Element.Format(self.arr[k]); अंत; str := str & }; ; रिटर्न स्ट्र; अंत प्रारूप; <... अधिक सामान्य कार्यान्वयन विवरण... > जेनेरिकस्टैक समाप्त करें। 

फ़ाइल: IntegerStack.i3

 इंटरफ़ेस इंटीजरस्टैक = जेनेरिकस्टैक(इंटीजरएलेम) अंत इंटीजरस्टैक। 

फ़ाइल: IntegerStack.m3

 मॉड्यूल इंटीजरस्टैक = जेनेरिकस्टैक(इंटीजरएलेम) एंड इंटीजरस्टैक। 

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

 इंटरफ़ेस ए;

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

अंत ए;   मॉड्यूल बी;

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

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

शुरू aरंग := A.रंग.भूरा; रंग := रंग.लाल; अन्य रंग := रंग.नारंगी; (*केवल नारंगी रंग का उपयोग नहीं कर सकते*) अंत बी. 

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

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

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

 इंटरफ़ेस व्यक्ति;

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

अंत व्यक्ति.  यह एक इंटरफ़ेस को परिभाषित करता है  दो प्रकार के साथ, , और  , जिसे दो विधियों वाली एक वस्तु के रूप में परिभाषित किया गया है,   और. के उपप्रकार के रूप में परिभाषित किया गया है  के प्रयोग से   ऑपरेटर।

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

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

 मॉड्यूल व्यक्ति;

रिवील टी = सार्वजनिक ब्रांडेड वस्तु नाम: पाठ; (*ये दो चर*) आयु: पूर्णांक; (*निजी हैं।*) ओवरराइड getAge := आयु; init := init; अंत;

प्रक्रिया आयु (स्वयं: टी): पूर्णांक = शुरू वापसी स्व.उम्र; अंत आयु;

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

शुरू अंत व्यक्ति. 

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

बाहरी संबंध

 * CM3 Implementation Website
 * Modula-3 Home Page (now long dead, mirror)
 * Modula-3: Language definition
 * elego Software Solutions
 * [news:comp.lang.modula3 Modula-3 newsgroup], mostly deserted
 * Modula-3 Development Mailing List, active
 * Notes from Caltech's CS2 class, taught in Modula-3 in 2002 and 2003
 * mirror Programming in Modula-3: program examples
 * Building Distributed OO Applications: Modula-3 Objects at Work. Michel R. Dagenais. Draft Version (January 1997)
 * Modula-3: Language, Libraries and Tools. Presentation on Modula-3 over 120 slides. Michael R. Dagenais, dead
 * Object-Oriented Data Abstraction in Modula-3. Joseph Bergin (1997)
 * Computerworld Interview with Luca Cardelli on Modula-3
 * Modula-3: Language, Libraries and Tools. Presentation on Modula-3 over 120 slides. Michael R. Dagenais, dead
 * Object-Oriented Data Abstraction in Modula-3. Joseph Bergin (1997)
 * Computerworld Interview with Luca Cardelli on Modula-3