एडा (प्रोग्रामिंग भाषा)

Ada पास्कल और अन्य भाषाओं से विस्तारित एक संरचित, सांख्यिकीय रूप से टाइप की गई, अनिवार्य और वस्तु-उन्मुख उच्च-स्तरीय प्रोग्रामिंग भाषा है। इसमें अनुबंध द्वारा डिज़ाइन (DbC) के लिए अंतर्निहित भाषा समर्थन, अत्यंत मजबूत प्रकारण, स्पष्ट संगामिति, कार्य, तुल्यकालिक संदेश पासिंग, संरक्षित वस्तुएँ और अनियतता है। Ada रनटाइम (प्रोग्राम जीवनचक्र चरण) त्रुटियों के पक्ष में त्रुटियों को खोजने के लिए संकलक का उपयोग करके कोड सुरक्षा और रखरखाव में सुधार करता है। Ada एक अंतर्राष्ट्रीय तकनीकी मानक है, जिसे अंतर्राष्ट्रीय मानकीकरण संगठन (ISO) और अंतर्राष्ट्रीय विद्युत तकनीकी आयोग (IEC) द्वारा संयुक्त रूप से परिभाषित किया गया है। 2020 तक, मानक, जिसे Ada 2012 अनौपचारिक रूप से कहा जाता है, ISO/IEC 8652:2012 है।

Ada को मूल रूप से 1977 से 1983 तक संयुक्त राज्य अमेरिका के रक्षा विभाग (DoD) के अनुबंध के तहत CII हनीवेल बुल के फ्रांसीसी कंप्यूटर वैज्ञानिक जीन इचबियाह के नेतृत्व में एक समूह द्वारा डिज़ाइन किया गया था, जो उस समय DoD द्वारा उपयोग की जाने वाली 450 से अधिक प्रोग्रामिंग भाषाओं को अधिक्रमण करता था।

Ada का नाम लवलेस (1815-1852) के नाम पर रखा गया था, जिन्हें पहले कंप्यूटर प्रोग्रामर के रूप में श्रेय दिया जाता है। रेफरी>

विशेषताएं
Ada मूल रूप से अन्तः स्थापित और रीयल-टाइम प्रणाली के लिए डिज़ाइन किया गया था। 1992 और 1995 के बीच इंटरमेट्रिक्स के एस. टकर टैफ़्ट द्वारा डिज़ाइन किया गया Ada 95 संशोधन, प्रणाली, संख्यात्मक, वित्तीय और वस्तु उन्मुख प्रोग्रामिंग (OOP) के लिए बेहतर समर्थन करता है।

एडीए की विशेषताओं में सम्मिलित हैं: मजबूत टाइपिंग, मॉड्यूलर प्रोग्रामिंग मैकेनिज्म (पैकेज), रन-टाइम चेकिंग, पैरलेल प्रोसेसिंग (टास्क, सिंक्रोनस मैसेज पासिंग, प्रोटेक्टेड ऑब्जेक्ट्स, और नॉनडेटर्मिनिस्टिक सेलेक्ट स्टेटमेंट्स), एक्सेप्शन हैंडलिंग और जेनरिक। Ada 95 ने गतिशील प्रेषण सहित वस्तु के उन्मुख प्रोग्रामिंग के लिए समर्थन जोड़ा।

Ada का सिंटैक्स मौलिक संचालन करने के तरीकों के विकल्पों को कम करता है, और अंग्रेजी कीवर्ड (जैसे ऑर एल्स और एण्ड देन) को प्रतीकों (जैसे || और &&) को प्राथमिकता दी। Ada मौलिक अंकगणितीय संक्रियक +, -,  *,  और /,  का उपयोग करता है, लेकिन अन्य प्रतीकों का उपयोग करने से बचता है। कोड ब्लॉक को स्पष्टता, स्टार्ट और एंड जैसे शब्दों द्वारा सीमांकित किया जाता है, जहां एंड (अधिकतम स्थितियों में) ब्लॉक के पहचानकर्ता के बाद बंद हो जाता है (जैसे, अगर ... एंड अगर, लूप ... एंड लूप). सशर्त ब्लॉक की स्थिति में यह पीछे लगने से बचता है जो या जावा जैसी अन्य भाषाओं में गलत नेस्टेड इफ-एक्सप्रेशन के साथ जुड़ सकता है।

Ada को बहुत बड़े सॉफ्टवेयर सिस्टम विकसित करने के लिए डिज़ाइन किया गया है। Ada पैकेज को अलग से संकलित किया जा सकता है। Ada पैकेज विनिर्देशों (पैकेज इंटरफ़ेस) को भी कार्यान्वयन के बिना स्थिरता की जांच के लिए अलग से संकलित किया जा सकता है। इससे कार्यान्वयन प्रारंभ होने से पहले, डिजाइन चरण के समय समस्याओं का जल्द पता लगाना संभव हो जाता है।

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

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

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

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

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

एक डबल-डैश (--), एक em डैश जैसा दिखता है, टिप्पणी टेक्स्ट को दर्शाता है। स्रोत कोड के पूरे अनुभागों को गलती से शून्य करने से खुले हुए टिप्पणियों को रोकने के लिए टिप्पणियां पंक्ति के अंत में रुकती हैं। कोड के एक पूरे ब्लॉक को अक्षम करने के लिए अब प्रत्येक पंक्ति (या स्तंभ) को अलग-अलग "--" के साथ उपसर्ग करने की आवश्यकता है। पृष्ठ के नीचे दोहराए गए "--" कॉलम के साथ अक्षम कोड को स्पष्ट रूप से इंगित करते हुए यह बड़े ब्लॉकों के प्रयोगात्मक अक्षम/पुन: सक्षम करने को एक अधिक खींची गई प्रक्रिया प्रदान करता है।

अर्धविराम एक विवरण समापक है, और अशक्त या आसंचालन विवरण अशक्त है; एक भी; विवरण के बिना समाप्त करने की अनुमति नहीं है।

अधिकांश ISO मानकों के विपरीत, Ada भाषा की परिभाषा (Ada संदर्भ मैनुअल या ARM, या कभी-कभी भाषा संदर्भ नियम या LRM के रूप में जानी जाती है) मुफ्त सामग्री है। इस प्रकार, यह Ada प्रोग्रामर के लिए एक सामान्य संदर्भ है, न कि केवल Ada संकलक को लागू करने वाले प्रोग्रामर। संदर्भ नियम के अतिरिक्त, एक व्यापक औचित्य दस्तावेज भी है जो भाषा के डिजाइन और विभिन्न भाषा निर्माणों के उपयोग की व्याख्या करता है। यह दस्तावेज़ प्रोग्रामर द्वारा भी व्यापक रूप से उपयोग किया जाता है। जब भाषा को संशोधित किया गया, तो एक नया औचित्य दस्तावेज़ लिखा गया।

GNAT प्रोग्रामिंग प्रसार-कक्ष, और GNAT जो कि GNU संकलक संग्रह का भाग है, एक उल्लेखनीय मुफ़्त सॉफ़्टवेयर उपकरण है जिसका उपयोग कई Ada प्रोग्रामर उन्हें Ada स्रोत कोड लिखने में सहायता करने के लिए करते हैं।

इतिहास
1970 के दशक में यूनाइटेड स्टेट्स डिपार्टमेंट ऑफ डिफेंस (DoD) अपने अन्तः स्थापित कंप्यूटर सिस्टम प्रोजेक्ट्स के लिए उपयोग की जा रही विभिन्न प्रोग्रामिंग भाषाओं की संख्या से सम्बद्ध हो गया, जिनमें से कई अप्रचलित या हार्डवेयर-निर्भर थे, और इनमें से कोई भी सुरक्षित मॉड्यूलर प्रोग्रामिंग का समर्थन नहीं करता था। 1975 में, एक कार्यकारी समूह, हाई ऑर्डर लैंग्वेज वर्किंग ग्रुप (HOLWG) का गठन किया गया था, जो इस संख्या को कम करने के विचार से विभाग और रक्षा मंत्रालय (यूनाइटेड किंगडम) की आवश्यकताओं के लिए सामान्यतः उपयुक्त प्रोग्रामिंग भाषा खोज या निर्माण कर रहा था। मूल स्ट्रॉ मैन प्रस्ताव से प्रारंभ होने वाले कई पुनरावृत्तियों के बाद अंततः प्रोग्रामिंग भाषा का नाम Ada रखा गया। ऐसी परियोजनाओं के लिए उपयोग की जाने वाली उच्च-स्तरीय प्रोग्रामिंग भाषाओं की कुल संख्या 1983 में 450 से गिरकर 1996 तक 37 हो गई।

HOLWG ने स्टीलमैन भाषा की आवश्यकताओं को तैयार किया, दस्तावेजों की एक श्रृंखला जिसमें उन आवश्यकताओं को बताया गया है जो उन्हें लगा कि एक प्रोग्रामिंग भाषा को स्वीकृत करना चाहिए। कई सम्मिलित भाषाओं की औपचारिक रूप से समीक्षा की गई, लेकिन समूह ने 1977 में निष्कर्ष निकाला कि कोई भी सम्मिलित भाषा विनिर्देशों को पूरा नहीं करती है।

एक नई प्रोग्रामिंग भाषा के प्रस्तावों के लिए अनुरोध जारी किए गए थे और चार संकुचक रेड (बेंजामिन ब्रोसगोल के नेतृत्व में इंटरमेट्रिक्स), ग्रीन (जीन इचिबिया के नेतृत्व में CII हनीवेल बुल), ब्लू (सोफटेक, जॉन गुडइनफ के नेतृत्व में) और येलो (SRI अंतरराष्ट्रीय, जे स्पिट्जन के नेतृत्व में) के नामों के तहत अपने प्रस्तावों को विकसित करने के लिए काम पर रखा गया था। अप्रैल 1978 में, सार्वजनिक जांच के बाद, रेड और ग्रीन प्रस्ताव अगले चरण में पारित हो गए। मई 1979 में, CII हनीवेल बुल में जीन इचिबियाह द्वारा डिजाइन किए गए ग्रीन प्रस्ताव को चुना गया और Ada लवलेस के बाद Ada नाम दिया गया। यह प्रस्ताव LIS भाषा से प्रभावित था जिसे इचिबियाह और उनके समूह ने 1970 के दशक में विकसित किया था। प्रारंभिक Ada संदर्भ नियम जून 1979 में ACM SIGPLAN विज्ञापन में प्रकाशित हुआ था। सैन्य मानक संदर्भ नियम को 10 दिसंबर, 1980 (Ada लवलेस का जन्मदिन) पर अनुमोदित किया गया था, और Ada लवलेस के जन्म वर्ष के सम्मान में नंबर MIL-STD-1815 दिया गया था। 1981 में, C. A. R. होरे ने अपने ट्यूरिंग अवार्ड भाषण का लाभ उठाते हुए Ada की अत्यधिक जटिल होने और इसलिए अविश्वसनीय होने की आलोचना की, लेकिन बाद में ऐसा लगा जैसे उसने Ada पाठ्यपुस्तक के लिए लिखी गई प्रस्तावना में फिर से लिखा हो। Ada ने अपने प्रारम्भिक दिनों में प्रोग्रामिंग समुदाय का बहुत ध्यान आकर्षित किया। इसके समर्थकों और अन्य लोगों ने पूर्व सूचना दी कि यह सामान्य प्रयोजन प्रोग्रामिंग के लिए एक प्रमुख भाषा बन सकती है, न कि केवल रक्षा संबंधी कार्य। इचबिया ने सार्वजनिक रूप से कहा कि दस वर्षों के अंदर, केवल दो प्रोग्रामिंग भाषाएं रह जाएंगी: Ada और Lisp (प्रोग्रामिंग भाषा)। प्रारंभिक Ada संकलक बड़ी, जटिल भाषा को लागू करने के लिए संघर्ष करते थे, और संकलन-समय और रन-टाइम प्रदर्शन दोनों ही धीमे और उपकरण प्राचीन थे। संकलक विक्रेताओं ने अपने अधिकांश प्रयासों को बड़े पैमाने पर, भाषा-अनुरूपता-परीक्षण, सरकार द्वारा आवश्यक ACVC सत्यापन क्षमता को पारित करने में खर्च किया, जो कि Ada भाषा के प्रयास की एक और नए महत्वपूर्ण लेख में आवश्यक था। 1975-1983 में प्रारंभ हुई कंप्यूटर हैकर स्लैंग की शब्दकोश, शब्दजाल फाइल, on Ada में टिप्पणी करती है कि "यह वही है जो fiat द्वारा उस तरह के समर्थन को देखते हुए उम्मीद कर सकता है;; समिति द्वारा डिज़ाइन किया गया ... उपयोग करने में मुश्किल, और समग्र रूप से विनाशकारी, बहु-अरब-डॉलर का बूनडॉगल ... Ada लवलेस ... लगभग निश्चित रूप से उसके नाम का उपयोग करने पर विवर्ण हो जाएगा; इसके बारे में जो सबसे अच्छी बात कही गई है, कि संभव्यता एक उपयुक्त छोटी भाषा है जो अपने व्यापक हाथी जैसे स्थूलता के अंदर से बाहर निकलने के लिए अनपेक्षित है।

पहला मान्य Ada कार्यान्वयन NYU Ada/Ed अनुवादक था, 11 अप्रैल, 1983 को प्रमाणित हुआ था। NYU Ada/Ed उच्च-स्तरीय सेट भाषा SETL में लागू किया गया है। कई वाणिज्यिक कंपनियों ने Ada कम्पाइलर और संबद्ध विकास उपकरणों की पेशकश प्रारंभ की, जिसमें अलसिस, टेलीसॉफ्ट, DDC-I, उन्नत कंप्यूटर तकनीक, टार्टन प्रयोगशालाएं, इरविन संकलक, TLD सिस्टम और वर्डिक्स सम्मिलित हैं। कंप्यूटर निर्माता जिनका रक्षा, एयरोस्पेस, या संबंधित उद्योगों में महत्वपूर्ण व्यवसाय था, उन्होंने भी अपने प्लेटफॉर्म पर Ada संकलक और उपकरण की पेशकश की; इनमें कोंकरंट कंप्यूटर कॉर्पोरेशन, क्रे रिसर्च, Inc., हैरिस कंप्यूटर सिस्टम्स, और सीमेंस निक्सडॉर्फ इंफॉर्मेशनसिस्टम AG सम्मिलित हैं।

1991 में, अमेरिकी रक्षा विभाग ने सभी सॉफ्टवेयर के लिए Ada ( Ada अधिदेश) के उपयोग की आवश्यकता प्रारंभ की, हालांकि इस नियम के अपवाद प्रायः दिए गए थे। 1997 में रक्षा विभाग के Ada अधिदेश को प्रभावी ढंग से हटा दिया गया था, क्योंकि DoD ने कमर्शियल ऑफ-द-शेल्फ (COTS) तकनीक को अपनाना प्रारंभ कर दिया था। अन्य NATO देशों में भी इसी तरह की आवश्यकताएं मौजूद थीं: कमांड और नियंत्रण और अन्य कार्यों से जुड़े NATO प्रणाली के लिए Ada की आवश्यकता थी, और Ada स्वीडन, जर्मनी और कनाडा जैसे देशों में रक्षा संबंधी अनुप्रयोगों के लिए अनिवार्य या पसंदीदा भाषा थी।

1980 के दशक के अंत और 1990 के दशक के प्रारंभ तक, Ada कंपाइलर्स के प्रदर्शन में सुधार हुआ था, लेकिन Ada की क्षमताओं का पूरी तरह से दोहन करने में अभी भी बाधाएं थीं, जिसमें एक टास्किंग मॉडल भी सम्मिलित था, जो कि वास्तविक समय के प्रोग्रामरों के लिए उपयोग किए जाने वाले मॉडल से अलग था।

Ada की सुरक्षा-महत्वपूर्ण समर्थन सुविधाओं के कारण, अब इसका उपयोग न केवल सैन्य अनुप्रयोगों के लिए किया जाता है, बल्कि व्यावसायिक परियोजनाओं में भी किया जाता है, जहां एक सॉफ्टवेयर बग के गंभीर परिणाम हो सकते हैं, जैसे, एवियोनिक्स और हवाई यातायात नियंत्रण, व्यावसायिक रॉकेट जैसे एरियन 4 और 5, उपग्रह और अन्य अंतरिक्ष प्रणालियाँ, रेलवे परिवहन और बैंकिंग। दाहरण के लिए, एयरप्लेन इंफॉर्मेशन मैनेजमेंट सिस्टम, बोइंग 777 में फ्लाई-बाय-वायर सिस्टम सॉफ्टवेयर, Ada में लिखा गया था।  DDC-I के सलाहकारों के सहयोग से हनीवेल एयरोस्पेस द्वारा विकसित, यह विवादास्पद रूप से किसी भी Ada परियोजना, नागरिक या सेना के लिए सबसे प्रसिद्ध बन गया।  कैनेडियन ऑटोमेटेड एयर ट्रैफिक सिस्टम को Ada ((SLOC गणना) की 1 मिलियन लाइनों में लिखा गया था। इसमें उन्नत वितरित प्रसंस्करण, एक वितरित Ada डेटाबेस और वस्तु उन्मुख डिज़ाइन सम्मिलित हैं।Ada का उपयोग अन्य हवाई यातायात प्रणालियों में भी किया जाता है, उदाहरण के लिए, यूके की अगली पीढ़ी के अंतरिम भविष्य क्षेत्र नियंत्रण उपकरण समर्थन (iFACTS) हवाई यातायात नियंत्रण प्रणाली को SPARK Ada का उपयोग करके डिज़ाइन और कार्यान्वित किया गया है। इसका उपयोग TGV हाई-स्पीड रेल सिस्टम पर फ्रेंच TVM इन-कैब सिग्नलिंग सिस्टम और पेरिस, लंदन, हांगकांग और न्यूयॉर्क शहर में मेट्रो उपनगरीय ट्रेनों में भी किया जाता है।

मानकीकरण
प्रारंभिक Ada ACM Sigplan Notes Vol 14, No 6, June 1979 में देखी जा सकती है।

Ada को पहली बार 1980 में एक अमेरिकी राष्ट्रीय मानक संस्थान मानक ANSI/MIL-STD 1815 के रूप में प्रकाशित किया गया था। चूंकि इस पहले संस्करण में कई त्रुटियां और विसंगतियां थीं (देखें Ada Language Changes का सारांश), संशोधित संस्करण 1983 में ANSI/MIL-STD 1815A के रूप में प्रकाशित हुआ था। बिना किसी और परिवर्तन के, यह 1987 में एक ISO मानक बन गया, ISO 8652:1987। भाषा के इस संस्करण को सामान्यतः ANSI द्वारा अपनाए जाने की तारीख से Ada 83 के रूप में जाना जाता है, लेकिन कभी-कभी ISO द्वारा इसे अपनाये जाने की तारीख से Ada 87 भी कहा जाता है। यह Ada 83 संदर्भ मैनुअल है। एक फ्रेंच अनुवाद भी है; DIN ने 1988 में DIN 66268 के रूप में इसका जर्मन में अनुवाद किया।

Ada 95, संयुक्त ISO/IEC/ANSI मानक ISO/IEC 8652:1995 (देखें /मानक/ADA-95-दस्तावेज़/lrm-मूल/Ada 95 RM) फरवरी 1995 में प्रकाशित हुआ था, जिससे यह पहली ISO मानक वस्तु-उन्मुख प्रोग्रामिंग भाषा बन गई। मानक संशोधन और भविष्य की स्वीकृति में मदद करने के लिए, अमेरिकी वायु सेना ने GNAT संकलक के विकास को निधिबद्ध किया। वर्तमान में, GNAT संकलक GNU संकलक संग्रह का भाग है।

Ada भाषा की तकनीकी सामग्री में सुधार और अद्यतन करने पर काम जारी है। Ada 95 के लिए एक तकनीकी शुद्धिपत्र अक्टूबर 2001 में प्रकाशित हुआ था, ISO/IEC 8652:1995/Corr 1:2001 (देखें .org/standards/95lrm/html/RM-TTL.html Ada 95 RM with TC 1), और एक प्रमुख संशोधन, ISO/IEC 8652:1995 /अमद 1:2007 (देखें Ada 2005 RM) 9 मार्च, 2007 को प्रकाशित हुआ था, जिसे सामान्यतः Ada 2005 के रूप में जाना जाता है क्योंकि उस वर्ष नए मानक पर टास्कसमाप्त हो गया था।

स्टॉकहोम में Ada-यूरोप 2012 सम्मेलन में, Ada रिसोर्स एसोसिएशन (ARA) और Ada-यूरोप ने Ada भाषा के नवीनतम संस्करण के डिजाइन को पूरा करने और ISO/IEC JTC 1/ को संदर्भ नियम जमा करने की घोषणा की। मानकीकरण के लिए अंतर्राष्ट्रीय संगठन ISO/IEC JTC 1/SC 22/WG 9 और अनुमोदन के लिए अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन (IEC)। ISO/IEC 8652:2012 (देखें html Ada 2012 RM) दिसंबर 2012 में प्रकाशित हुआ था, जिसे Ada 2012 के नाम से जाना जाता है। एक तकनीकी शुद्धिपत्र प्रकाशित किया गया था ISO/IEC 8652:2012/COR 1:2016 (देखें TC 1 के साथ RM 2012)।

Ada 83, 95 आदि नामों के होते हुए भी, कानूनी रूप से केवल एक Ada मानक है, अंतिम ISO/IEC मानक में से एक: एक नए मानक संस्करण की स्वीकृति के साथ, पिछला वाला वापस ले लिया जाता है। अन्य नाम केवल एक निश्चित संस्करण को संदर्भित करने वाले अनौपचारिक हैं।

अन्य संबंधित मानकों में ISO 8651|ISO/IEC 8651-3:1988 इन्फॉर्मेशन प्रोसेसिंग सिस्टम-कंप्यूटर ग्राफिक्स-ग्राफिकल कर्नेल सिस्टम (GKS) लैंग्वेज बाइंडिंग-पार्ट 3: Ada सम्मिलित हैं।

भाषा निर्माण
Ada एक ALGOL जैसी प्रोग्रामिंग भाषा है, जिसमें आरक्षित शब्दों के साथ नियंत्रण संरचना होती है, जैसे कि if, then, else, while, for, इत्यादि। हालाँकि, Ada के पास कई डेटा संरचना सुविधाएँ और अन्य सार हैं जो मूल ALGOL 60 में सम्मिलित नहीं थे, जैसे कि प्रकार की परिभाषाएँ, रिकॉर्ड, संकेत, गणना। इस तरह के निर्माण आंशिक रूप से पास्कल से विरासत में मिले या प्रेरित थे।

"Hello, world!" in Ada
किसी भाषा के सिंटैक्स का एक सामान्य उदाहरण हैलो वर्ल्ड प्रोग्राम है: (hello.adb) with Ada.Text_IO; procedure Hello is begin Ada.Text_IO.Put_Line ("Hello, world!"); end Hello; इस प्रोग्राम को निष्पादित करके मुक्त रूप से उपलब्ध मुक्त स्त्रोत संकलक GNAT का उपयोग करके संकलित किया जा सकता है

gnatmake hello.adb

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

उदाहरण के लिए, दिनांक को इस प्रकार दर्शाया जा सकता है:

type Day_type is range 1 .. 31; type Month_type is range 1 .. 12; type Year_type is range 1800 .. 2100; type Hours is mod 24; type Weekday is (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); type Date is record Day : Day_type; Month : Month_type; Year : Year_type; end record; नोट करने के लिए महत्वपूर्ण: Day_type, Month_type, Year_type, hour असंगत प्रकार हैं, जिसका अर्थ है कि उदाहरण के लिए निम्न अभिव्यक्ति अवैध है: Today: Day_type := 4; Current_Month: Month_typee:= 10; ... Today + Current_Month ... -- illegal पूर्वनिर्धारित प्लस-संक्रियक केवल उसी प्रकार के मान जोड़ सकता है, इसलिए अभिव्यक्ति अवैध है।

उपप्रकार घोषित करके प्रकारों को परिष्कृत किया जा सकता है: subtype Working_Hours is Hours range 0 .. 12; -- at most 12 Hours to work a day subtype Working_Day is Weekday range Monday .. Friday; -- Days to work Work_Load: constant array(Working_Day) of Working_Hours -- implicit type declaration := (Friday => 6, Monday => 4, others => 10); -- lookup table for working hours with initialization

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

-- while a is not equal to b, loop.

while a /= b loop

Ada.Text_IO.Put_Line ("Waiting");

end loop;

if a > b then

Ada.Text_IO.Put_Line ("Condition met"); else Ada.Text_IO.Put_Line ("Condition not met"); end if;

for i in 1 .. 10 loop

Ada.Text_IO.Put ("Iteration: ");

Ada.Text_IO.Put (i);

Ada.Text_IO.Put_Line;

end loop;

loop

a := a + 1;

exit when a = 10;

end loop;

case i is

when 0 => Ada.Text_IO.Put ("zero");

when 1 => Ada.Text_IO.Put ("one");

when 2 => Ada.Text_IO.Put ("two");

-- case statements have to cover all possible cases:

when others => Ada.Text_IO.Put ("none of the above");

end case;

for aWeekday in Weekday'Range loop -- loop over an enumeration

Put_Line ( Weekday'Image(aWeekday) ); -- output string representation of an enumeration

if aWeekday in Working_Day then -- check of a subtype of an enumeration

Put_Line ( " to work for " &

Working_Hours'Image (Work_Load(aWeekday)) ); -- access into a lookup table

end if;

end loop;

पैकेज, प्रक्रियाएं और कार्य
Ada प्रोग्राम के कुछ भागों में पैकेज, प्रक्रियाएँ और टास्कसम्मिलित हैं।

उदाहरण: पैकेज विनिर्देश (example.ads) package Example is

type Number is range 1 .. 11; procedure Print_and_Increment (j: in out Number); end Example; with Ada.Text_IO; package body Example is

i : Number := Number'First;

procedure Print_and_Increment (j: in out Number) is

function Next (k: in Number) return Number is begin return k + 1; end Next;

begin

Ada.Text_IO.Put_Line ( "The total is: " & Number'Image(j) ); jj:= Next (j); end Print_and_Increment;

begin

Ada.Text_IO.Put_Line ( "The total is: " & Number'Image(j) ); jj:= Next (j); end Print_and_Increment; -- package initialization executed when the package is elaborated

begin

while i < Number'Last loop

Print_and_Increment (i);

end loop;

end Example;

इस प्रोग्राम को संकलित किया जा सकता है, उदाहरण के लिए, स्वतंत्र रूप से उपलब्ध मुक्त स्रोत संकलक GNAT का उपयोग करके, निष्पादित करके

पैकेज, प्रक्रियाएं और टास्क किसी भी गहराई तक समूह बना सकते हैं, और प्रत्येक तार्किक बाह्यतम ब्लॉक भी हो सकता है।

प्रत्येक पैकेज, प्रक्रिया या फ़ंक्शन में स्थिरांक, प्रकार, चर और अन्य प्रक्रियाओं, कार्यों और पैकेजों की अपनी घोषणाएँ हो सकती हैं, जिन्हें किसी भी रन-टाइम में घोषित किया जा सकता है।

समवर्ती
Ada के पास कार्य-आधारित संगामिति के लिए भाषा समर्थन है। Ada में मौलिक समवर्ती इकाई एक टास्क है, जो एक अंतर्निहित सीमित प्रकार है। टास्क दो भागों में निर्दिष्ट हैं - टास्क विवरण टास्क इंटरफ़ेस को परिभाषित करती है (एक प्रकार की विवरण के समान), टास्क निकाय टास्क के कार्यान्वयन को निर्दिष्ट करता है। कार्यान्वयन के आधार पर, Ada कार्यों को या तो ऑपरेटिंग सिस्टम थ्रेड्स या प्रक्रियाओं में मैप किया जाता है, या Ada रनटाइम द्वारा आंतरिक रूप से शेड्यूल किया जाता है।

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

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

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

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

प्रविष्टियों के लिए कॉल को उसी हस्ताक्षर के साथ अन्य प्रविष्टियों के लिए आवश्यक किया जा सकता है। जिस टास्क की आवश्यकता होती है उसे अवरुद्ध कर दिया जाता है और लक्ष्य प्रविष्टि की पंक्ति में जोड़ दिया जाता है; इसका तात्पर्य है कि संरक्षित वस्तु जारी की जाती है और किसी अन्य टास्क के प्रवेश की अनुमति देती है।

Ada में चयन कथन का उपयोग गैर-अवरुद्ध प्रविष्टि कॉलों को लागू करने के लिए किया जा सकता है और प्रविष्टियों के गैर-नियतात्मक चयन (गार्ड के साथ भी), समय-समाप्त और समापन को स्वीकार करता है।

निम्नलिखित उदाहरण Ada में समवर्ती प्रोग्रामिंग की कुछ अवधारणाओं को दिखाता है।

with Ada.Text_IO; use Ada.Text_IO;

procedure Traffic is

type Airplane_ID is range 1..10; -- 10 airplanes

task type Airplane (ID: Airplane_ID); -- task representing airplanes, with ID as initialisation parameter

type Airplane_Access is access Airplane; -- reference type to Airplane

protected type Runway is -- the shared runway (protected to allow concurrent access)

entry Assign_Aircraft (ID: Airplane_ID); -- all entries are guaranteed mutually exclusive entry Cleared_Runway (ID: Airplane_ID); entry Wait_For_Clear; private Clear: Booleanl:= True; -- protected private data - generally more than only a flag... end Runway; type Runway_Access is access all Runway;

-- the air traffic controller task takes requests for takeoff and landing

task type Controller (My_Runway: Runway_Access) is -- task entries for synchronous message passing entry Request_Takeoff (ID: in Airplane_ID; Takeoff: out Runway_Access); entry Request_Approach(ID: in Airplane_ID; Approach: out Runway_Access); end Controller;

-- allocation of instances

Runway1 : aliased Runway; -- instantiate a runway Controller1: Controller (Runway1'Access); -- and a controller to manage it

-- the implementations of the above types --

protected body Runway is entry Assign_Aircraft (ID: Airplane_ID) when Clear is -- the entry guard - calling tasks are blocked until the condition is true begin Clearl:= False; Put_Line (Airplane_ID'Image (ID) & " on runway "); end;

entry Cleared_Runway (ID: Airplane_ID)

when not Clear is begin Cleara:= True; Put_Line (Airplane_ID'Image (ID) & " cleared runway "); end; entry Wait_For_Clear when Clear is begin null; -- no need to do anything here - a task can only enter if "Clear" is true end; end Runway;

entry Wait_For_Clear

when Clear is begin null; -- no need to do anything here - a task can only enter if "Clear" is true end; end Runway;

task body Controller is

begin loop My_Runway.Wait_For_Clear; -- wait until runway is available (blocking call) select -- wait for two types of requests (whichever is runnable first) when Request_Approach'count = 0 => -- guard statement - only accept if there are no tasks queuing on Request_Approach accept Request_Takeoff (ID: in Airplane_ID; Takeoff: out Runway_Access) do -- start of synchronized part My_Runway.Assign_Aircraft (ID); -- reserve runway (potentially blocking call if protected object busy or entry guard false) Takeoff := My_Runway; -- assign "out" parameter value to tell airplane which runway end Request_Takeoff; -- end of the synchronised part or accept Request_Approach (ID: in Airplane_ID; Approach: out Runway_Access) do  My_Runway.Assign_Aircraft (ID); Approach := My_Runway; end Request_Approach; or -- terminate if no tasks left who could call terminate; end select; end loop; end;

task body Airplane is

Rwy : Runway_Access; begin Controller1.Request_Takeoff (ID, Rwy); -- This call blocks until Controller task accepts and completes the accept block Put_Line (Airplane_ID'Image (ID) & " taking off..."); delay 2.0; Rwy.Cleared_Runway (ID); -- call will not block as "Clear" in Rwy is now false and no other tasks should be inside protected object delay 5.0; -- fly around a bit... loop select -- try to request a runway Controller1.Request_Approach (ID, Rwy); -- this is a blocking call - will run on controller reaching accept block and return on completion exit; -- if call returned we're clear for landing - leave select block and proceed... or delay 3.0; -- timeout - if no answer in 3 seconds, do something else (everything in following block) Put_Line (Airplane_ID'Image (ID) & " in holding pattern"); -- simply print a message end select; end loop; delay 4.0; -- do landing approach... Put_Line (Airplane_ID'Image (ID) & " touched down!"); Rwy.Cleared_Runway (ID); -- notify runway that we're done here. end; task body Airplane is

New_Airplane: Airplane_Access; begin

for I in Airplane_ID'Range loop -- create a few airplane tasks New_Airplane := new Airplane (I); -- will start running directly after creation delay 4.0; end loop; end Traffic;

प्रागमा
एक प्रागमा एक संकलक निर्देश है जो संकलित आउटपुट के विशिष्ट परिवर्तन की अनुमति देने के लिए संकलक को जानकारी देता है। कुछ प्रागमा भाषा में निर्मित हैं, जबकि अन्य कार्यान्वयन-विशिष्ट हैं।

संकलक प्रागमा के सामान्य उपयोग के उदाहरण कुछ सुविधाओं को अक्षम करना होगा, जैसे रन-टाइम प्रकार जांच या सरणी अधोलिखित सीमा जांच, या संकलक को फ़ंक्शन निर्देश के अतिरिक्त वस्तु कोड डालने का निर्देश देना (जैसा कि C/C ++ पंक्‍तिबद्धता फ़ंक्शन के साथ करता है) )

जेनरिक
यह अनुभाग Ada में जेनेरिक प्रोग्रामिंग § जेनरिक का एक अंश है।

1977-1980 में पहली बार डिजाइन किए जाने के बाद से Ada के पास जेनरिक हैं। मानक पुस्तकालय कई सेवाएं प्रदान करने के लिए जेनरिक का उपयोग करता है। Ada 2005 मानक पुस्तकालय में एक व्यापक जेनेरिक कंटेनर पुस्तकालय जोड़ता है, जो C++ के मानक आदर्श पुस्तकालय से प्रेरित था। एक जेनरिक इकाई एक पैकेज या उपप्रोग्राम है जो एक या अधिक जेनरिक रूपात्मक पैरामीटर लेता है।

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

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

यह भी देखें

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

अंतर्राष्ट्रीय मानक

 * ISO 8652|ISO/IEC 8652: सूचना प्रौद्योगिकी—प्रोग्रामिंग भाषाएं—Ada
 * ISO 15291|ISO/IEC 15291: सूचना प्रौद्योगिकी—प्रोग्रामिंग भाषाएँ—Ada सिमेंटिक इंटरफ़ेस विशिष्टता (विकट:ASIS)
 * ISO 18009|ISO/IEC 18009: सूचना प्रौद्योगिकी—प्रोग्रामिंग भाषाएं—एडीए: एक भाषा संसाधक का अनुरूपता आकलन (विकट:एसीएटीएस)
 * IEEE 1003|IEEE मानक 1003.5b-1996, POSIX Ada बाइंडिंग
 * Ada Language Mapping विशिष्टता, CORBA इंटरफ़ेस विवरण भाषा (IDL) से Ada मैपिंग

औचित्य
इन दस्तावेजों को प्रिंट सहित विभिन्न रूपों में प्रकाशित किया गया है।
 * apps.dtic.mil, pdf भी उपलब्ध है

किताबें

 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।
 * 795 पृष्ठ।

अभिलेखागार

 * एडीए प्रोग्रामिंग भाषा सामग्री, 1981-1990। चार्ल्स बैबेज संस्थान, मिनेसोटा विश्वविद्यालय। Ada भाषा के लिए डिज़ाइन किए गए सॉफ़्टवेयर उत्पादों पर साहित्य सम्मिलित है; Ada 9X प्रोजेक्ट रिपोर्ट, तकनीकी रिपोर्ट, वर्किंग पेपर, न्यूज़लेटर सहित अमेरिकी सरकार के प्रकाशन; और उपयोगकर्ता समूह की जानकारी।