Кіріспе

Жоғары деңгейдегі бағдарламалау тілі алғаш рет 1980 жылы жарық көрді.

Ada – Паскаль және басқа тілдерден шабыттанған, құрылымдық, статикалық типтеуге ие, императивті және объектіге бағытталған жоғары деңгейдегі бағдарламалау тілі. Ол келісімшарт бойынша жобалау (DbC), өте күшті типтеу, нақты бір мезгілдестік, тапсырмалар, синхронды хабар алмасу, қорғалған нысандар және белгісіздік үшін тілдік қолдауды қамтиды. Ada кодтың қауіпсіздігі мен қолдауға оңай болуын арттыру үшін қателерді анықтау үшін компиляторды пайдаланады, осылайша жұмыс істеу кезінде туындайтын қателердің алдын алады. Ada – Халықаралық стандарттау ұйымы (ISO) және Халықаралық электротехникалық комиссия (IEC) бірлесіп анықтаған халықаралық техникалық стандарт. 2023 жылдың мамыр айынан бастап, бұл стандарт, жай ғана Ada 2022 деп аталатын, ISO/IEC 8652:2023 болып табылады. Ada бастапқыда 1977-1983 жылдары АҚШ Қорғаныс министрлігімен жасалған келісімшарт бойынша Honeywell компаниясының француз компьютер ғалымы Жан Ичбиах басқаратын командасымен әзірленген. Ол сол кезде Қорғаныс министрлігі қолданған 450-ден астам бағдарламалау тілін алмастыру мақсатымен жасалған. Ada алғашқы компьютерлік бағдарламашы деп саналатын Ада Лавлейс (1815–1852) құрметіне аталған.

Ерекшеліктері

Ada бастапқыда кіріктірілген және нақты уақыт жүйелері үшін жасалған. 1992 және 1995 жылдар аралығында Intermetrics компаниясының S. Tucker Taft жасаған Ada 95 нұсқасы жүйелерді, сандық, қаржылық және объектіге бағытталған бағдарламалауды (OOP) қолдауды жақсартты. Ada-ның ерекшеліктері: күшті типтеу, модульдік бағдарламалау механизмдері (пакеттер), орындалу уақытын тексеру, параллель өңдеу (тапсырмалар, синхронды хабар алмасу, қорғалған объектілер және детерминистік емес таңдау операторлары), ерекше жағдайларды өңдеу және жалпыламалар. Ada 95 объектіге бағытталған бағдарламалауды, соның ішінде динамикалық жіберуді қолдайды. Ada синтаксисі негізгі операцияларды орындау тәсілдерін таңдауды азайтады және символдарға ("||" және "&&" сияқты) қарағанда ағылшын тіліндегі кілт сөздерді ("немесе", "және") пайдалануға басымдық береді. Ada негізгі арифметикалық операторларды "+", "-", "*", және "/" пайдаланады, бірақ басқа символдарды қолданудан аулақ болады. Код блоктары "декларациялау", "бастау" және "соңы" сияқты сөздермен шектеледі, мұнда "соңы" (көбінесе) жабатын блоктың идентификаторымен (мысалы, if end if, loop end loop) ілеседі. Шартты блоктарда бұл C немесе Java сияқты басқа тілдерде дұрыс емес ұялы if өрнегімен жұптасатын "else" бөлігінің қате орналасуын болдырмайды. Ada өте үлкен бағдарламалық жүйелерді әзірлеу үшін жасалған. Ada пакеттерін бөлек компиляциялауға болады. Ada пакетінің спецификациялары (пакет интерфейсі) іске асырылмай-ақ, сәйкестігін тексеру үшін бөлек компиляциялануы мүмкін. Бұл жобалау кезеңінде, іске асыру басталғанға дейін проблемаларды ертерек анықтауға мүмкіндік береді. Басқа тілдерде орындалу уақытына дейін анықталмайтын немесе бастапқы кодқа нақты тексерулерді қосуды талап ететін қателерді болдырмау үшін компиляция уақытын тексерудің үлкен саны қолдайды. Мысалы, синтаксис сәйкес келмейтін "end" белгілеріне байланысты қателерді болдырмау үшін блоктарды жабуды нақты атауды талап етеді. Күшті типтеуді сақтау көптеген жалпы бағдарламалық қателерді (бұрыс параметрлер, ауқым бұзушылықтар, жарамсыз сілтемелер, сәйкес келмейтін типтер және т.б.) компиляция кезінде немесе орындалу кезінде анықтауға мүмкіндік береді. Бір мезгілделік тілдің ерекшеліктерінің бір бөлігі болғандықтан, компилятор кейбір жағдайларда ықтимал тұйықталуларды байқай алады. Компиляторлар сонымен қатар қате жазуды, пакеттердің көрінуін, артық декларацияларды және т.б. тексеруді жиі жүргізеді және қателерді түзету туралы ескертулер мен пайдалы ұсыныстар береді. Ada сонымен қатар бөлінбеген жадқа қол жеткізуден, буфердің асығуын, ауқым бұзушылықтардан, бір қатеден, массивке қол жеткізу қателерінен және басқа да анықталатын қателерден қорғау үшін орындалу уақытын тексеруді қолдайды. Бұл тексерулерді орындау уақытының тиімділігі үшін өшіруге болады, бірақ оларды жиі тиімді компиляциялауға болады. Сондай-ақ, бағдарламаны тексеруге көмектесетін құралдар да бар. Осы себептерге байланысты Ada кейде аса маңызды жүйелерде қолданылады, онда кез келген аномалия өте ауыр зардаптарға әкелуі мүмкін, мысалы, кездейсоқ өлім, жарақат алу немесе ауыр қаржылық шығын. Ada қолданылатын жүйелердің мысалдары: авиация, әуе қозғалысын басқару, темір жол, банк, әскери және ғарыш технологиясы. Ada-ның динамикалық жады басқаруы жоғары деңгейде және қауіпсіз. Ada-да жалпы немесе типтелмеген сілтемелер жоқ; ол ешқандай сілтемелер түрін де жасырын түрде жарияламайды. Оның орнына барлық динамикалық жадының бөлінуі және босатылуы нақты жарияланған қол жеткізу типтері арқылы жүзеге асырылуы тиіс. Әрбір қол жеткізу типі жад басқарудың төменгі деңгейлік ерекшеліктерін басқаратын сақтау жинағымен байланыстырылған; бағдарламашы орталық сақтау жинағын пайдалана алады немесе жаңаларын анықтай алады (бұл әсіресе Біркелкі емес жадқа қол жеткізу үшін маңызды). Бір типтің барлығын белгілейтін бірнеше әртүрлі қол жеткізу типтерін жариялауға болады, бірақ әртүрлі сақтау жинақтарын пайдалануға болады. Сондай-ақ, тіл компиляция және орындалу уақытында қол жеткізу мәні көрсеткіш объектінің типінен асып кетпеуін қамтамасыз ететін қол жеткізуді тексеруді ұсынады. Тілдің семантикасы қол жеткімейтін объектілердің автоматты түрде жинақталуына мүмкіндік берсе де, көптеген іске асырулар оны әдепкі бойынша қолдамайды, өйткені ол нақты уақыт жүйелерінде болжамас емес мінез-құлыққа әкелер еді. Ada аймаққа негізделген жад басқаруының шектеулі түрін қолдайды; сонымен қатар, сақтау жинақтарын креативті пайдалану автоматты түрде жинақтаудың шектеулі түрін қамтамасыз ете алады, өйткені сақтау жинағын жою оның құрамындағы барлық объектілерді де жояды. Ем тиресіне ұқсайтын қос тире ("--") түсіндірілген мәтінді белгілейді. Түсіндірмелер жолдың соңында тоқталады; кодтың бүкіл бөлімдерін кездейсоқ жоюдан сақтау үшін көпжолды түсіндірме жасауға қасақана мүмкіндік жоқ. Сондықтан кодтың бүкіл блогын өшіру үшін әрбір жолдың (немесе бағананың) басына жеке " -- " қою қажет. Бұл әрине өшірілген кодты " -- " бағанасы арқылы көрсетсе де, блокты комментирлеуді қолдамайтын редакторларда үлкен блоктарды қайта қосу процесін ұзартуға әкеледі. Нүктелі үтір (";") оператордың аяқталуын білдіреді, ал бос немесе операциясыз оператор null; болып табылады. Операторды аяқтау үшін жалғыз ";" рұқсат етілмейді. Көптеген ISO стандарттарынан айырмашылығы, Ada тілінің анықтамасы (Ada анықтамалық нұсқаулығы немесе ARM деп белгілі, кейде Тіл анықтамалық нұсқаулығы немесе LRM) ақысыз мазмұн болып табылады. Осылайша, ол Ada бағдарламашылары үшін, соның ішінде Ada компиляторларын іске асыратын бағдарламашылар үшін әдеттегі анықтама болып табылады. Анықтамалық нұсқаулықтан басқа, тілдің дизайнын және әртүрлі тіл құрылымдарын пайдалануын түсіндіретін кеңейтілген негіздеме құжаты да бар. Бұл құжатты бағдарламашылар да кеңінен пайдаланады. Тіл қайта қарастырылғанда, жаңа негіздеме құжаты жазылды. Көптеген Ada бағдарламашыларына Ada бастапқы кодын жазуға көмектесетін танымал ақысыз құрал - GNAT Programming Studio және GNU Compiler Collection құрамындағы GNAT.

Тарих

1970 жылдары АҚШ Қорғаныс министрлігі (DoD) өз кіріктірілген компьютерлік жүйе жобаларында қолданылатын түрлі бағдарламалау тілдерінің санынан алаңдады, олардың көпшілігі ескірген немесе аппараттық құралға тәуелді болды, ал ешқайсысы қауіпсіз модульдік бағдарламалауды қолдамады. 1975 жылы Жоғары деңгейдегі тілдер жұмыс тобы (HOLWG) құрылды, мақсаты – департамент пен Ұлыбритания Қорғаныс министрлігінің талаптарына сай бағдарламалау тілін табу немесе жасау арқылы осы санды азайту. Көптеген итерациялардан кейін, бастапқы «сабаннан жасалған» ұсыныстан бастап, аталған бағдарламалау тілі Ада деп аталды. Мұндай жобалар үшін қолданылатын жоғары деңгейдегі бағдарламалау тілдерінің саны 1983 жылы 450-ден 1996 жылы 37-ге дейін төмендеді. HOLWG бағдарламалау тілінің қанағаттандыруы тиіс талаптарды баяндайтын Steelman тілінің талаптарын жасады. Көптеген тілдер ресми түрде қарастырылды, бірақ 1977 жылы команда ешбір тілдің талаптарға сай келмейтініне келісім білдірді. Жаңа бағдарламалау тіліне ұсыныстарды беру туралы сұраныстар жарияланды және төрт подрядшы өз ұсыныстарын әзірлеу үшін шақырылды: Қызыл (Бенджамин Бросгол басқаратын Intermetrics), Жасыл (Жан Ичбиах басқаратын Honeywell), Көк (Джон Гуденоф басқаратын SofTech) және Сары (Джей Спитцен басқаратын SRI International). 1978 жылдың сәуірінде, қоғамдық талқыдан кейін, Қызыл және Жасыл ұсыныстары келесі кезеңге өтті. 1979 жылдың мамырында Honeywell-де Жан Ичбиах жасаған Жасыл ұсынысы таңдалды және оған Ада деген ат берілді – Августа Ада Кинг, Лавлейс графинясының құрметіне (көбінесе Ада Лавлейс деп танылады). Бұл ұсынысқа Ичбиах пен оның тобы 1970 жылдары жасаған LIS тілі әсер еткен. Аданың алдын ала анықтамалық нұсқаулығы 1979 жылдың маусымында ACM SIGPLAN хабарламаларында жарияланды. Әскери стандарттың анықтамалық нұсқаулығы 1980 жылдың 10 желтоқсанында (Ада Лавлейстің туған күні) бекітілді және Ада Лавлейстің туған жылының құрметіне MIL STD 1815 нөмірі берілді. 1981 жылы Тони Хоэр Тьюринг сыйлығын алу сөйлеуінде Аданың тым күрделі және сондықтан сенімсіз екенін сынға алды, бірақ кейіннен Ада оқулығына жазған алғы сөзінде өз пікірін қайта қарағандай болды. Ада бағдарламалау қауымдастығының назарын өзіне аударды. Оның жақтастары және басқалар оның жалпы мақсаттағы бағдарламалау үшін де, қорғанысқа қатысты жұмыстар үшін де басым тілге айналуы мүмкін екенін болжады. Алғашқы Ada компиляторлары үлкен, күрделі тілді іске асыруда қиындықтарға тап болды, компиляция және орындалу уақыты баяу болды және құралдар қарапайым болды. Аданың алғашқы расталған іске асырылуы 1983 жылдың 11 сәуірінде сертификатталған NYU Ada/Ed аудармашысы болды. NYU Ada/Ed жоғары деңгейдегі SETL тілінде іске асырылған. Бірнеше коммерциялық компаниялар Ada компиляторларын және оған байланысты әзірлеу құралдарын ұсына бастады, соның ішінде Alsys, TeleSoft, DDC I, Advanced Computer Techniques, Tartan Laboratories, Irvine Compiler, TLD Systems және Verdix. Қорғаныс, аэроғарыш немесе осы салалардағы ірі бизнеске ие компьютер өндірушілері өз платформаларында Ada компиляторларын және құралдарын ұсынды; оларға Concurrent Computer Corporation, Cray Research, Inc., Digital Equipment Corporation, Harris Computer Systems және Siemens Nixdorf Informationssysteme AG кірді. Бірақ мұндай ережеден жиі ерекшеліктер жасалатын. Басқа НАТО елдерінде де ұқсас талаптар болды: Ада командалық-бақылау және басқа да функцияларды қамтитын НАТО жүйелері үшін қажет болды, ал Ада Швеция, Германия және Канада сияқты елдерде қорғанысқа қатысты қолданбалар үшін міндетті немесе артықшылықты тіл болды. 1980 жылдардың соңы мен 1990 жылдардың басында Ada компиляторларының өнімділігі жақсарды, бірақ Аданың мүмкіндіктерін толық пайдалануға кедергі келтіретін факторлар әлі де болды, соның ішінде көптеген нақты уақыт бағдарламалаушыларына беймәлім тапсырмалар моделі. Saab Gripen, Lockheed Martin F 22 Raptor және Grumman F 14 Tomcat ұшағы үшін DFCS ұшуды басқару жүйесінің жаңа нұсқасы. Канаданың автоматтандырылған әуе қозғалысын басқару жүйесі 1 миллион жолдан тұратын Ада тілінде (SLOC санағы) жазылған. Ол озық үлестірілген өңдеуді, үлестірілген Ada деректер базасын және объектіге бағытталған дизайнды ұсынады. Ада басқа әуе қозғалысын басқару жүйелерінде де қолданылады, мысалы, Ұлыбританияның келесі буындағы аралық болашақ аймақтық басқару құралдары қолдау әуе қозғалысын басқару жүйесі SPARK Ada-ны қолдана отырып жобаланған және іске асырылған. Ол сондай-ақ француздық TVM кабина сигнализация жүйесінде, TGV жоғары жылдамдықты теміржол жүйесінде, Париж, Лондон, Гонконг және Нью-Йорктегі метро қала маңы пойыздарында қолданылады.

Прагма

Прагма – компиляторға жинақталған нәтижені өзгертуге мүмкіндік беретін ақпаратты жеткізетін компилятор директивасы. Кейбір прагмалар тілдің өзіне кіріктірілген, ал қалғандары компилятордың ерекшеліктеріне байланысты. Компилятор прагмаларын қолданудың жиі кездесетін мысалдары – қысқарту немесе орындалу кезіндегі типтік тексеру, массив индексін тексеру сияқты белгілі бір мүмкіндіктерді өшіру, немесе компиляторға функцияны шақырудың орнына объектілік кодты қосуды (C/C++ тіліндегі сызықтық функциялар сияқты) бұйыру.

Негізгі себептері

Бұл құжаттар әртүрлі форматтарда, соның ішінде қағаз түрінде жарияланды. Сондай-ақ қосымшалар да қолжетімді. dtic.mil, pdf