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

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 क्षेत्र-आधारित स्मृति प्रबंधन के सीमित रूप का समर्थन करता है; इसके अतिरिक्त, भंडारण पूल का रचनात्मक उपयोग स्वत: अपशिष्ट संग्रह का एक सीमित रूप प्रदान कर सकता है, क्योंकि भंडारण पूल को नष्ट करने से पूल में सभी वस्तुओं को भी नष्ट कर दिया जाता है।

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

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

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

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

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

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

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

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

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

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

मानकीकरण
प्रारंभिक अदायगी 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। भाषा के इस संस्करण को सामान्यतः एएनएसआई द्वारा अपनाए जाने की तारीख से एडीए 83 के रूप में जाना जाता है, लेकिन कभी-कभी आईएसओ द्वारा इसे अपनाने की तारीख से इसे एडीए 87 भी कहा जाता है। यह Ada 83 संदर्भ मैनुअल है। एक फ्रेंच अनुवाद भी है; DIN ने 1988 में DIN 66268 के रूप में इसका जर्मन में अनुवाद किया।

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

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 रिसोर्स एसोसिएशन (एआरए) और Ada-यूरोप ने Ada भाषा के नवीनतम संस्करण के डिजाइन को पूरा करने और आईएसओ/आईईसी जेटीसी 1/ को संदर्भ मैनुअल जमा करने की विवरण की। मानकीकरण के लिए अंतर्राष्ट्रीय संगठन (आईएसओ) के एससी 22/डब्ल्यूजी 9 और अनुमोदन के लिए अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन (आईईसी)। 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 में सम्मिलित नहीं थे, जैसे कि प्रकार प्रणाली, रिकॉर्ड (कंप्यूटर साइंस), पॉइंटर (कंप्यूटर प्रोग्रामिंग), प्रगणित प्रकार इस तरह के निर्माण आंशिक रूप से पास्कल (प्रोग्रामिंग भाषा) से विरासत में मिले या उससे प्रेरित थे।

हैलो, दुनिया! अदा
में किसी भाषा के सिंटैक्स (प्रोग्रामिंग भाषा) का एक सामान्य उदाहरण हैलो वर्ल्ड प्रोग्राम है: (हैलो। एडीबी) <सिंटेक्स लैंग = एडीए लाइन> Ada.Text_IO के साथ; प्रक्रिया हैलो है प्रारंभ करना Ada.Text_IO.Put_Line (हैलो, दुनिया!);with Ada.Text_IO;

procedure Hello is begin Ada.Text_IO.Put_Line ("Hello, world!"); end Hello; इस प्रोग्राम को निष्पादित करके मुक्त रूप से उपलब्ध ओपन सोर्स कंपाइलर GNAT का उपयोग करके संकलित किया जा सकता है

डेटा प्रकार
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; Important to note: Day_type, Month_type, Year_type, Hours are incompatible types, meaning that for instance the following expression is illegal: Today: Day_type := 4; Current_Month: Month_type := 10; ... Today + Current_Month ... -- illegal The predefined plus-operator can only add values of the same type, so the expression is illegal.

Types can be refined by declaring subtypes: 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) ); j := Next (j); end Print_and_Increment;

begin

Ada.Text_IO.Put_Line ( "The total is: " & Number'Image(j) ); j := 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 में समवर्ती प्रोग्रामिंग की कुछ अवधारणाओं को दिखाता है।

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: Boolean := 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 Clear := False; Put_Line (Airplane_ID'Image (ID) & " on runway "); end;

entry Cleared_Runway (ID: Airplane_ID)

when not Clear is      begin Clear := 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 प्रोजेक्ट रिपोर्ट, तकनीकी रिपोर्ट, वर्किंग पेपर, न्यूज़लेटर सहित अमेरिकी सरकार के प्रकाशन; और उपयोगकर्ता समूह की जानकारी।