Сакате да знаете сè. Јазикот на пеколот. Јазикот на пеколот - дваесет години подоцна Програмскиот јазик на пеколот - неговото потекло

Апстракт на тема:

Ада



План:

    Вовед
  • 1 Карактеристики на јазикот
  • 2 "Здраво, свет!" на Ада
  • 3 Историја
  • 4 Пекол во СССР и Русија
  • 5 Критика
  • 6 Дистрибуција, перспективи
  • 7 Оперативни системи напишани во Ада
    • 7.1 Вградени системи
    • 7.2 Системи во развој
    • 7.3 Веќе не постојат системи
  • 8 Составувачи на пеколот
  • 9 Изведени јазици
  • 10 Интересни факти
  • Белешки
    Литература

Вовед

Ада (Ада) е програмски јазик создаден во 1979-1980 година како резултат на проект преземен од Министерството за одбрана на САД за развој на унифициран програмски јазик за вградени системи (т.е. системи за контрола на автоматизирани системи кои работат во реално време). Она што се мисли, пред сè, беа системи за контрола на одборот за воени објекти (бродови, авиони, тенкови, проектили, гранати итн.). Програмерите не беа соочени со задача да создадат универзален јазик, така што одлуките донесени од авторите на Ада треба да се преземат во контекст на карактеристиките на избраната област. Јазикот е именуван по Ада Лавлејс.


1. Карактеристики на јазикот

Во својата оригинална форма, стандардизирана во 1983 година, Ada е структуриран, модуларен програмски јазик кој содржи можности за програмирање паралелни процеси на високо ниво. Синтаксата на Ада е наследена од јазици како Алгол или Паскал, но е проширена, а исто така е построга и логична. Ada е силно пишуван јазик, ја исклучува работата со објекти кои немаат типови, а автоматските конверзии на типови се сведени на апсолутен минимум. Во стандардот од 1995 година, основните објектно-ориентирани програмски алатки беа додадени на јазикот, во стандардот од 2007 година, овие алатки беа дополнети, така што современиот Ada е објектно-ориентиран програмски јазик.

Карактеристиките на синтаксата вклучуваат:

  • Јазикот е нечувствителен на големи букви.
  • Програмите се модуларни, механизмот за контрола на увоз-извоз на описи помеѓу модулите вклучува две различни директиви: едната за поврзување на друг модул (со), другата за увоз на неговите описи (употреба). Исто така, можно е да се преименува модул при увоз (преименување) - оваа опција ви овозможува да користите повеќе идентификатори погодни за програмерите за да го означите пакетот.
  • Пакетите (еден од типовите модули) може да содржат заглавие и приватен дел - она ​​што е содржано во него не се извезува и не е достапно за други модули.
  • Поддржан е механизам на генерализирани (приспособливи) модули: пакети, процедури и функции кои ви дозволуваат да опишете генерализирани алгоритми за обработка на податоци без да наведете специфичен тип.
  • Развиен систем на типови, вградени и генерирани од програмерот. Постојат многу начини за создавање нови типови, а јазикот поддржува два различни концепти: „подтип“ и „изведен тип“. Променливите од типот и неговиот подтип се компатибилни, променливите од типот и неговиот изведен тип не се.
  • Исклучоци за ракување со капацитети.
  • Развиени средства за пристап до процедури и функции: поддржува влезни и излезни параметри, пренесување на вистинските параметри во кој било редослед со наведување на формални имиња, параметри со стандардни вредности.
  • Поддржано е редефинирање на процедури, функции и оператори - создавање на неколку варијанти на процедура, функција или оператор со исто име, но различни потписи (типови и број на параметри).
  • Паралелни структури за поддршка на програмирање вградени во јазикот: поддржани се концептите „задача“ (паралелно извршен програмски фрагмент), „внес на задача“ (средство за синхронизација и комуникација на паралелно извршување задачи), поддржан е механизмот „рандеву“ ( протокол за интеракција на паралелно трчање задачи преку внесување на една од нив ), постои оператор SELECT за организирање на условна интеракција меѓу нишки (избор на паралелна задача со која ќе комуницирате, во зависност од подготвеноста за рандеву и некои други услови ). Во принцип, алатките за паралелно програмирање достапни на јазикот се доволни за решавање на голема класа на проблеми кои бараат паралелна обработка, без прибегнување кон надворешни алатки, како што се дополнителни библиотеки или API на оперативниот систем.

За да се задоволат барањата за доверливост, јазикот е изграден на таков начин што ќе се откријат што е можно повеќе грешки во фазата на компилација. Покрај тоа, еден од барањата при развивањето на јазикот беше програмските текстови да бидат што е можно поедноставни за читање, дури и на сметка на леснотијата на пишување. Резултатот од овој пристап беше малку „тешка“ синтакса и многу ограничувања кои се отсутни во најчестите индустриски јазици (C и C++) и честопати се перцепираат од професионалните програмери како непотребни, на пример, истото строго пишување. Ова доведе до формирање на идејата за Ада како сложен, нејасен и незгоден јазик за употреба.


2. „Здраво, свето! на Ада

Неколку различни верзии на програмата „Здраво, свет!“. може да се види на Викикниги. Разликите се должат на потребата да се користи функцијата за библиотека Put_Line - овој јазик има три различни начини на организирање на оваа употреба.

Со Ada.Text_IO ; процедура Hello is use Ada.Text_IO ; start Put_Line("Здраво, свет!" ); крај Здраво;

Овде, за да се користи функцијата Put_Line, пакетот Ada.Text_IO што го содржи се увезува со употреба на конструкцијата за употреба, што овозможува да се повика функцијата по име без квалификација - наведувајќи го името на пакетот што ја содржи функцијата во повикот.


3. Историја

Развојот на јазикот беше спроведен како дел од меѓународен натпревар организиран и финансиран од Министерството за одбрана на САД. Целта на развојот беше да се добие програмски јазик кој би можел да се обедини за развој на проекти за нарачки од воениот оддел, главно за развој на вградени системи за воени цели и за големи воени компјутери (врз основа на процесорот iAPX 432 од Интел). Работата започна во 1975 година, со формирање на збир на јазични барања кои целосно ќе ги задоволат развивачите на системи од овој тип. Првичната листа на барања, со кодно име „Слама“, беше поднесена на преглед до голем број организации и фирми, и постепено беше рафинирана во текот на две години, што на крајот стана финалниот документ наречен „Челичен“.

По завршувањето на барањата, направена е анализа која покажа дека ниту еден од постоечките програмски јазици не ги задоволува доволно барањата, па затоа е донесена одлука за развој на нов јазик. Конкурс за неговото создавање беше објавен во 1977 година; од програмерите беше побарано да го засноваат на еден од трите јазици: Pascal, Algol-68 или PL/1.

Од 15 проекти доставени на конкурсот, избрани се 4 (сите врз основа на Паскал). Овие проекти беа испратени на понатамошен развој. Во следната фаза, од 4 проекти, беа избрани два, од кои по дополнително доработка беше избран еден. Овој јазик го добил името „Ада“ - групата што го развила, предводена од Французинот Жан Ишбија, му дала име на јазикот во чест на Аугуста Ада Кинг Лавлејс (1815-1852), ќерката на поетот Џ. Бајрон, кој развил програми за компјутерот на Бебиџ и се смета за прв програмер во светот.

Во 1983 година, јазикот беше официјално стандардизиран од ANSI. Јазичниот стандард ANSI/MIL-STD-1815-A-1983 беше одобрен на 17 февруари 1983 година. Министерството за одбрана на САД го направи името „Ада“ регистрирана трговска марка, забранувајќи ослободување на преведувачи на јазици кои не ја поминале официјалната процедура за тестирање за усогласеност со стандардите. Постапката се состоеше од извршување на голем број (повеќе од 1000) програми за тестирање (т.н. ACVC сет) преку компајлерот што се тестира, за секој од нив резултатот од тестот беше јасно дефиниран: или успешна компилација или производство на многу специфичен грешка порака. Тестирањето се вршеше според принципот „сè или ништо“ - доколку имало грешка при обработката на барем еден тест пример, се сметало дека компајлерот не успеал на тестот, а тестирањето било валидно само на хардверската и софтверската платформа на која тоа беше спроведено. Така, можноста за формирање на „верзии“ или „дијалекти“ на јазикот на Ада беше исклучена уште на почетокот.

Во 1987 година, јазикот Ада беше официјално стандардизиран од ISO. Од тој момент, Министерството за одбрана на САД го направи јазикот достапен за јавноста.

До 1990 година, веќе имаше околу 200 компајлери во светот кои го исполнуваа стандардот на јазикот Ада.

Во 1995 година, беше усвоен нов стандард на Ada познат како Ada95. Во јазикот беа воведени алатки за програмирање на објекти. Покрај тоа, јазикот беше дополнет со поразвиени алатки за интеракција со програми напишани на други јазици.

Во март 2007 година беа објавени промените на стандардот Ада. Тие главно ги допреа можностите на објектно-ориентираното програмирање: беа воведени интерфејси, беше усвоена синтаксата за повик на методот заедничка за повеќето хибридни јазици и беа направени голем број други дополнувања.


4. Ада во СССР и Русија

Во СССР во 80-тите, беше организирана Работна група за јазикот на Ада под Државниот комитет за наука и технологија. Групата ги проучуваше сите отворени (како и, според гласините, тајно добиени од разузнавањето) податоци за јазикот Ада и ја истражуваше можноста и изводливоста за развој и употреба на Ада во СССР. Активностите на оваа група доведоа до крајот на 80-тите до развој на компајлери Ада за скоро сите компјутери што се користат во СССР. На руски се објавени неколку книги за јазикот на Ада.

Московскиот државен универзитет работеше на создавање на сопствени пакети за тестирање на преведувачите на Ада за усогласеност со стандардите. На државниот универзитет во Ленинград, за создавање на системот Ада, се користеше системот Палада, претходно развиен за имплементација на Алгол-68, кој беше префрлен на Ада. Системот содржи интегрирана развојна околина, компајлер, текстуален уредувач, дебагер, библиотеки, систем за контрола на верзијата и преведувач на команди.

По распадот на СССР, работата за дистрибуција на Ада беше практично прекината. Навистина, донесени се три програми за развој на софтвер во Ада (во Министерството за одбрана, Министерството за цивилно воздухопловство и Министерството за образование и наука), но нивниот развој е бавен и некоординиран. Како резултат на тоа, јазикот Ада е малку познат во Русија; повеќето современи руски програмери го сметаат за „мртов јазик“ и не знаат ништо за него. Ада се користи во Русија и ЗНД од индивидуални ентузијасти. Сепак, јазикот се користи за развој на индустриски софтвер. Постојат неколку познати проекти развиени во Ада и работат во Русија. Меѓу нив:

  • Документарна комуникациска станица на Министерството за одбрана на РФ. Главната задача е да се обезбеди размена на документарни информации во податочните мрежи на Министерството за одбрана на Руската Федерација. Софтверско-хардверскиот комплекс е заеднички развиен од Производствената организација „Компјутерска технологија и автоматизација“ (хардвер) и група програмери од теренскиот сектор на Севернокавкаскиот центар за контрола на воздушниот сообраќај „Стрела“. Софтверот на комплексот е напишан на програмскиот јазик Ada со помош на компајлерот GNAT. Поддршка за дистрибуирани компјутери е обезбедена од дополнителната компонента GLADE.
  • Збир на стандардна опрема за летање, навигација и комуникација за руски амфибиски авион Бериев Бе-200. Развојот беше спроведен од Истражувачкиот институт за воздухопловна опрема во Жуковски, заедно со американската компанија Allied Signal, Флорида, САД. Се користеше развојниот комплекс Ada-systems од DDC-I на платформата Intel 80486.

5. Критика

Од своето појавување, Ада е критикувана од некои признати авторитети во областа на развојот на програмскиот јазик, пред се поради сложеноста на нејзината синтакса и големиот волумен. Конкретно, јазикот беше критикуван од Чарлс Хоар и Никлаус Вирт (кои учествуваа со нивниот проект на овој натпревар, но се откажаа по првата фаза), како и Едсгер Дијкстра.

Дијкстра се сомневаше дека толку сложен јазик како Ада може да биде набљудуван и податлив.

Ако Ада ќе издаде стандард, таа сака тоа да биде недвосмислено документирано. Најмалку две групи се обиделе ова; како резултат на тоа, и двајцата произведоа околу 600 страници формален текст. Ова е многу повеќе отколку што е потребно за да се осигураме дека е невозможно дури и цврсто да се утврди дека двата документи го дефинираат истиот јазик. Вината за очигледната неконтролираност на овие два документи не е во двете групи што ги составиле, не во формализмот што тие го прифатиле, туку само во самиот јазик: без да дадат формална дефиниција, нивните развивачи можат да го сокријат фактот дека предлагаат неконтролирано чудовиште. Дека Ада ќе ги намали проблемите со програмирањето и ќе ја зголеми веродостојноста на нашите дизајни до прифатливи граници е само една од оние бајки во кои можат да веруваат само луѓе со воено потекло.

Научна фантастика и научна реалност во компјутерските науки (Edsger W. Dijkstra, EWD952)

Хоар се пожали дека „ѕвоната и свирчињата имаат предност пред основните барања за доверливост и безбедност“ и предупреди дека „армада проектили оди на погрешен пат поради неоткриена грешка во компајлерот на Ada“. Никлаус Вирт зборуваше повоздржано, но и негативно. Тој рече: „Премногу се фрла на програмерот. Не мислам дека откако ќе научиш една третина од Ада, можеш да работиш нормално. Ако не ги совладате сите детали на јазикот, може да се сопнете над нив во иднина, а тоа ќе доведе до непријатни последици“. Жан Ишбија, лидерот на тимот за развој на Ада, изразувајќи ја својата „почит и восхит“ за Вирт, не се согласува, велејќи: „Вирт верува во едноставни решенија за сложени проблеми. Не верувам во такви чуда. Комплексните проблеми бараат сложени решенија“.

Сомнеж предизвикува и постапката за проверка на усогласеноста на компајлерот со јазичниот стандард преку тестирање. Како општа работа, јасно е дека тестирањето може да најде недоследности, но не може да гарантира исправност. Практична потврда за ова е фактот дека сертифицираните компајлери, кога се тестирале на различен сет на тестови, откриле неусогласеност со стандардот.

Застапниците на Ада тврдат дека единствената алтернатива на големиот и сложен јазик во големите проекти е употребата на неколку компактни јазици, што неизбежно предизвикува проблеми со компатибилноста од кои Ада била измислена да се ослободи. Тие, исто така, забележуваат дека идејата за тешкотијата на развивање во Ada е само делумно вистинита: пишувањето едноставна програма во Ada трае повеќе време отколку на други, помалку формални јазици како што е C, но дебагирањето и одржувањето на програмите, особено големи и сложени, е многу поедноставен. Според Stephen Zeiger од Rational Software Corporation, развојот на софтвер во Ada е генерално 60% поевтин, а развиената програма има 9 пати помалку дефекти отколку кога се користи јазикот C.


6. Дистрибуција, перспективи

Во пракса, се покажа дека Ада, откако ја окупираше својата наменета ниша во воените и сродните случувања на вградените системи, никогаш не ја надмина оваа ниша, ниту на Запад, ниту во СССР, ниту во постсоветскиот простор. Постојат многу причини за ова. Противниците на јазикот се фокусираат на неговата сложеност и недостатоци; поддржувачите зборуваат, пред сè, за објективните околности на појавата на јазикот и негативните аспекти на процесот на неговото спроведување. Интересно е мислењето на S.I.Rybin, постар истражувач во Истражувачкиот компјутерски центар на Московскиот државен универзитет, консултант на AdaCore EU, експерт за јазикот Ада на работната група ISO за јазичниот стандард. Тој верува дека Ада своите неуспеси ги должи на две главни причини:

  • За време на дизајнот на јазикот, Пентагон претпоставуваше дека целиот нов софтвер ќе биде создаден само во Ада. Поради ова, Ада добила исклучително примитивни средства за интеракција со програми на други јазици. Во пракса, се покажа дека пишувањето сè на Ада е нереално (ако само затоа што имало потреба да се комуницира со готови случувања на други јазици). Затоа, во индустриите каде што немаше строго барање да се „пишува само на Ада“, тие претпочитаа други јазици кои беа поприлагодени на повеќејазична средина. Стандардот од 1995 година го реши проблемот со интероперабилноста со другите јазици, но времето беше изгубено.
  • Парадоксално, ширењето на Ада беше спречено со финансиска и организациска поддршка на Пентагон. Програмите на Ada напишани за војската работеа на најмоќниот компјутерски хардвер што беше достапен, па програмерите на компајлерите првенствено се занимаваа со полагање на ACVC тестовите, а дури потоа со ефикасноста на компајлерот и кодот што тој го произведува. Во раните 1980-ти, започна бум на микрокомпјутери, а преведувачите за заеднички јазици (Pascal, C, BASIC) беа брзо оптимизирани за системи со ниска моќност. За Ада, немаше поттик за таква модернизација; како резултат на тоа, персоналните компјутери, кои неколку години подоцна станаа најголемиот дел од светската компјутерска флота, се најдоа без висококвалитетен преведувач на Ада. Секако, Ада го загуби овој пазарен сегмент. Релативно неодамна се појави компајлерот GNAT, висококвалитетен и продуктивен, но и тука се изгуби времето.

Во моментов, Ада е доста цврсто воспоставена во развојот на големи вградени системи со зголемена доверливост; овде практично нема силни конкуренти. Употребата на јазикот постепено се зголемува, иако прилично бавно. Според некои претпазливи прогнози [ ], со поевтин хардвер и ширење на вградени системи со комплексен софтвер, пазарот на програмите на Ада може значително да порасне, а ќе се зголеми и употребата на јазикот.

Покрај тоа, Ада има, иако многу ограничена, примена во високото образование. Специјални курсеви за Ада се изучуваат на Московскиот државен универзитет и универзитетот Харков. Сепак, според истиот С.И.Рибин,

... сега во постсоветскиот простор во областа на софтверската индустрија и образованието, се разви очигледен маѓепсан круг: во индустријата тие практично не знаат за Ада, соодветно, од индустријата нема барање за образование за тренирајте специјалисти за Ада, а од универзитетите во индустријата доаѓаат нови луѓе, кои практично ништо не знаат за Ада.


7. Оперативни системи напишани во Ада

7.1. Вградени системи

  • MaRTE
  • RTEMS е оперативен систем со отворен код развиен од DARPA на Министерството за одбрана на САД
  • Равенскар
  • RTOS-32 - комерцијален ОС

7.2. Системи во развој

  • AuroraUX (проект за препишување на кернелот OpenSolaris, а потоа и DragonFly BSD на јазикот Ada)
  • Lovelace (оперативен систем со јадро L4)

7.3. Веќе не постојат системи

  • BiiN™
  • Пулс™
  • AdaOS

8. Составувачи на пеколот

Име Компанијата Верзија операционен систем Веб-страница
AdaMagic SofCheck Ада 95 ? www.sofcheck.com
АдаМУЛТИ Софтвер Green Hills Ada 83, Ada 95, C, C++, Fortran Solaris SPARC, GNU/Linux x86, Windows www.ghs.com
ДЕК Ада Хјулит Пакард Ада 83 OpenVMS h71000.www7.hp.com
GNAT AdaCore Ада 83, Ада 95, Ада 2005, Си Solaris SPARC, Linux x86/x86-64, Windows, други libre.adacore.com
МКС Компајлер корпорација Ирвин Ада 83, Ада 95 DEC VAX/VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF/1, PC Linux, SGI IRIX, Windows www.irvine.com
Јанус/Ада RR софтвер Ада 83, Ада 95 SCO, UnixWare, Interactive, MS-DOS, Windows www.rrsoftware.com
MAXada Истовремено Ада 95 Linux/Xeon, PowerPC www.ccur.com
Објект Ада Аоникс Ада 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda OC системи Ада 83, Ада 95 Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) www.ocsystems.com
Рационален Апекс IBM Rational Ада, Ц, Ц++ Соларис SPARC, Linux www-01.ibm.com
СОРТИ DDC-I Ада 83, Ада 95, Ц, Фортран Соларис SPARC, Windows www.ddci.com
XD Ада SWEP-EDS Ада 83 OpenVMS Алфа/VAX www.swep-eds.com
XGC Ада Софтвер XGC Ада 83, Ада 95, Си Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

Со исклучок на GNAT и XGC (за некои платформи), горенаведените компајлери се платени. Некои компании, како што е Aonix, нудат бесплатни демо верзии кои се ограничени или во време на употреба или во функционалност.

Развојните средини на NetBeans и Eclipse имаат приклучоци за работа со Ada.


9. Изведени јазици

Синтаксата на јазикот Ада се користи на јазици како што се:

  • PL/SQL

10. Интересни факти

  • Формално, натпреварот за развој на јазици што резултираше со создавање на Ada беше анонимен - развојните тимови ги доставија своите проекти под кодни имиња, така што комисијата за натпреварување не можеше да ги земе предвид идентитетите на програмерите при изборот на победникот. Но, во пракса, како што напиша еден од членовите на комисијата, вкусовите на програмерите беа толку различни што не беше тешко да се одреди авторот на проектот.
  • Сите јазици кои стигнаа до последните кругови на овој натпревар беа базирани на Паскал. Во овој поглед, Ада може привремено да се карактеризира како Паскал, развиен земајќи ги предвид дадените пет основни барања. Во исто време, авторите главно го следеа патот на проширување на Паскал со нови елементи. Резултатот беше значително покомплексен јазик.
  • На рускиот јазик, постојат шеги поврзани со двосмисленоста на изразот „Јазик на пеколот“, вклучувајќи ги и оние засновани на паралели со рускиот алгоритамски јазик, познат и како „Јазик на рајот“. Заклучокот од статијата на советскиот пропагандист Мелор Стуруа (1984) исто така влезе во програмскиот фолклор:

Јазикот на Пентагон е непријател на мирот. Јазикот на „Ада“ е гласот на термонуклеарниот пекол... На јазикот на „Ада“ може да се слушне проклетство врз човечкиот род.


Белешки

  1. Референтен водич за јазик Ада 83. Поглавје 1.3. Цели и извори на развој - www.ada-ru.org/arm83/ch01s03.html
  2. Вадим Станкевич. Лејди Ада - www.kv.by/index2006451104.htm
  3. Ажуриран стандард на iso.org - www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Bryabrin V. M. Софтвер за персонални компјутери. М.: Наука, 1988 година.
  5. 1 2 Интервју со S.I.Rybin - www.ada-ru.org/wiki/rybin
  6. , Објектно-ориентирани програмски јазици, програмски јазици на платформата NET, Ada, написи со примери за кодови на Ада.
    Текстот е достапен под лиценца Creative Commons Attribution-ShareAlike.

(Ада 2005), Ајфел (Ада 2012)

C++, капела, „Драго“. , Ајфел, „Грифин“. , Јава , Ним , падобран зад чамец , PL / SQL , PL / PgSQL , рубин , Seed7 , "SPARforte". , Sparkel , SQL / PSM , VHDL

Карактеристиките на Ada вклучуваат: силно пишување, механизми за модуларност (пакети), проверка на време на извршување, паралелна обработка (задачи, синхроно пренесување пораки, заштитени објекти и недетерминистички изјави за избор), ракување со исклучоци и генерики. Ada 95 додаде поддршка за објектно-ориентирано програмирање, вклучително и динамичко испраќање.

Синтаксата на Ада го минимизира изборот како да се извршуваат основните операции и ги фаворизира англиските клучни зборови (како што се „или“ и „и потоа“) пред симболите (како што се „||“ и „&&“). Ада ги користи основните аритметички оператори „+“, „-“, „*“ и „/“, но избегнува употреба на други симболи. Блоковите на кодот се разграничени со зборови како што се „изјави“, „почеток“ и „крај“, каде што „крај“ (во повеќето случаи) е проследен со идентификаторот на блокот што го затвора (на пр. ако е крај, ако... , јамка... крај на јамката). Во случај на условни блокови, ова се избегнува уште растргнат, што може да се спари со неправилно вгнездени ако изјави на други јазици како што се C или Java.

Ada е дизајнирана за развој на многу големи софтверски системи. Ада пакетите може да се градат посебно. Спецификациите на пакетот Ada (интерфејс на пакетот) исто така може да се состават одделно без проверка на усогласеноста. Ова овозможува проблемите да се откријат рано во фазата на дизајнирање, пред да започне имплементацијата.

Поддржани се голем број проверки за време на компајлирање за да се избегнат грешки кои нема да се откријат до времето на извршување на некои други јазици или кои бараат експлицитни проверки да се додадат во изворниот код. На пример, синтаксата бара експлицитно име на блок за да се спречат грешки поради неусогласени крајни маркери. Следењето силно пишување ви овозможува да откриете присуство на стандардни софтверски грешки (лоши параметри, прекршување на опсегот, невалидни референци, неусогласени типови, итн.) или при компајлирање или на друг начин при извршување. Бидејќи истовременоста е дел од спецификацијата на јазикот, компајлерот во некои случаи може да открие потенцијални ќор-сокак. Составувачите, исто така, обично проверуваат за погрешно правопис на идентификатори, видливост на пакети, непотребни декларации итн., и може да дадат предупредувања и корисни совети за тоа како да се поправи грешката.

Ada исто така поддржува проверки на траење за да се заштити од нераспределен пристап до меморијата, грешки во прелевање на баферот, прекршување на опсегот, грешки во низа, грешки во пристапот во низа и други грешки што може да се забележат. Овие проверки може да се оневозможат во интерес на ефикасноста на извршувањето, но често може да се состават ефикасно. Исто така, вклучува алатки кои ќе помогнат да се потврди програмата. Поради овие причини, Ada е широко користен во критичните системи каде што секоја аномалија може да доведе до многу сериозни последици, како што се случајна смрт, повреда или тешка финансиска загуба. Примери на системи кои користат Ada вклучуваат авионика, контрола на летање, железници, банкарство, војска и воздушна.

Динамичкото управување со меморијата на Ada е на високо ниво и е безбедно. Ада нема генерички или нетипизирани покажувачи; и немојте имплицитно да декларирате никаков тип на покажувач. Наместо тоа, целата динамичка распределба на меморијата и распоредувањето мора да се појават преку експлицитно декларирани типови на пристап. Секој тип на пристап има соодветен базен за складирање, кој се справува со деталите за управување со меморијата на ниско ниво; програмерот може да го користи или стандардниот базен за складирање или да дефинира нови (ова особено важи за неуниформен пристап до меморија). Можете дури и да декларирате неколку различни типови на пристап кои сите означуваат ист тип, но користат различни базени за складирање. Покрај тоа, јазикот обезбедува достапност на проверки, и во времето на компајлирање и во времето на извршување, што го обезбедува тоа цена за пристапне може да го избрише типот на објектот што го одредува.

Иако семантиката на јазикот дозволува автоматско собирање ѓубре на недостапни објекти, повеќето имплементации не го поддржуваат стандардно, бидејќи тоа ќе доведе до непредвидливо однесување на системите во реално време. Ada поддржува ограничена форма на опсег заснован на управување со меморијата; Дополнително, креативното користење на базените за складирање може да обезбеди ограничена форма на автоматско собирање ѓубре, бидејќи уништувањето на базенот ги уништува и сите предмети во базенот.

приказна

Продолжува работата за подобрување и ажурирање на техничката содржина на програмскиот јазик Ада. Во октомври 2001 година беше објавен технички коригендум на Ada 95, а главниот амандман, ISO/IEC 8652:1995/Amd 1:2007 беше објавен на 9 март 2007 година. (ARA) и Ada -Europe објавија дека го завршиле дизајнот на најновата верзија на програмскиот јазик Ada и го доставиле својот референтен прирачник до Меѓународната организација за стандардизација (ISO) за одобрување. ISO/IEC 8652:2012 беше објавен во декември 2012 година.

Други релевантни стандарди вклучуваат ISO 8651-3:1988 Системи за обработка на информации, компјутерска графика, графички јадро систем (GKS) јазик на врски - Дел 3: Ада .

Јазични конструкции

"Здраво свету!" во Ада

Типичен пример за таков јазик во синтаксата е програмата Hello world: (hello.adb)

со Ada.Text_IO ; користете Ada.Text_IO ; процедура Hello is start Put_Line ("Здраво, свет!" ); крај Здраво;

Оваа програма може да се компајлира со користење на бесплатниот и со отворен код компајлер GNAT со извршување

gnatmake здраво.adb

Типови на податоци

Системот за типови на Ада не се заснова на множество од предефинирани примитивни типови, туку им овозможува на корисниците да декларираат свои типови. Оваа изјава, пак, не се заснова на внатрешно претставување на типот, туку на опис на целта што треба да се постигне. Ова му овозможува на компајлерот да ја одреди соодветната големина на меморија за даден тип и да провери дали има повреда на дефиницијата на типот во времето на компајлирање и времето на извршување (т.е. прекршување на опсегот, прелевање на баферот, конзистентност на типот итн.). Ada поддржува нумерички типови дефинирани во опсег, типови модули, збирни типови (записи и низи) и типови на набројување. Типовите на пристап дефинираат референца за пример од одреден тип; нетипизирани покажувачи не се дозволени. Специјални типови обезбедени во јазикот на типот задача и заштитените типови.

На пример, датумот може да се претстави како:

тип Ден_тип е опсег 1 .. 31 ; тип Month_type е опсег 1 .. 12 ; тип Year_type е опсег 1800 .. 2100 ; тип Часови е мод 24 ; тип Работен ден е (понеделник, вторник, среда, четврток, петок, сабота, недела); тип Датум е рекорд Ден: Day_type; Месец: Месец_тип; Година: Година_тип; крајниот запис;

Типовите може дополнително да се усовршат со декларирање на подтипови:

подтип Работни_часови е Опсег на часови 0.. 12; -- најмногу 12 часа за работа на денподтип Working_Day е опсег на работни денови понеделник.. петок; -- Денови за работа Work_Load : постојана низа (Работен_Ден ) од Работни_Часови -- имплицитна декларација на типот := (петок => 6 , понеделник => 4 , други => 10 ); -- табела за пребарување за работно време со иницијализација

Типовите можат да имаат модификатори како на пр ограничен, апстрактен, приватенитн. Може да се пристапи до приватни типови, а ограничените типови може да се менуваат или копираат само во пакетот што ги дефинира само нив. Ada 95 додава дополнителни функции за објектно-ориентиран тип екстензија.

Контролни структури

Ада исто така нуди заштитени објектиза меѓусебно исклучување. Заштитените објекти по дизајн се слични на монитор, но користат штитници наместо променливи на состојбата за сигнализација (слично на условните критични области). Заштитените објекти комбинираат енкапсулација на податоци и безбедно меѓусебно исклучување од мониторите, како и чувар на влез од условно критични области. Главната предност во однос на класичните монитори е тоа што променливите на состојбата не се потребни за пренесување сигнали, избегнувајќи потенцијални ќор-сокак поради неправилна семантика на заклучување. Како задачи, заштитното средство е вграден ограничен тип, а има и дел и тело за декларација.

Заштитениот објект се состои од инкапсулирани лични податоци (до кои може да се пристапи само во рамките на заштитениот објект), како и процедури, функции и записи за кои се гарантира дека меѓусебно се исклучуваат (со единствен исклучок на функциите за кои се бара да бидат странични без ефект Така, и може да работи истовремено со други функции). Задачата што повикува заштитен објект е блокирана ако друга задача моментално работи на истиот заштитен објект и се ослободува кога таа друга задача ќе го напушти заштитениот објект. Блокираните задачи се редат на заштитениот објект на нарачаното време на пристигнување.

Податоците за заштитени објекти се слични на процедурите, но дополнително имаат безбедност. Ако чуварот оцени на неточно, задачата за повикување е блокирана и се додава во редот на тој запис; Сега може да се дозволи друга задача во заштитливиот објект, бидејќи во моментот ниту една задача не се извршува во заштитливиот објект. Стражарите се преценети секогаш кога некоја задача го напушта чуваниот објект, бидејќи ова е единствениот пат кога може да се промени рејтингот на чуварот.

Снимањето повици може да биде побараноза други записи со ист потпис. Задачата што се бара е блокирана и додадена во целната реда за влез; тоа значи дека заштитениот објект се ослободува и дозволува да се прифати друга задача.

Изберетеоператорот во Ada може да се користи за имплементација на неблокирачки повици за најавување и прифаќа, недетерминистички избирачки записи (исто така заштитени), тајм-аут и прекини.

Следниот пример илустрира некои од концептите на паралелно програмирање во Ada.

со Ada.Text_IO ; користете Ada.Text_IO ; постапка Сообраќајот е од типот Airplane_ID е опсегот 1. . 10 ; -- Тип на задача за 10 авиони Авион (ID: Airplane_ID); -- задача што претставува авиони, со ID како параметар за иницијализацијатип Airplane_Access е пристап Авион ; -- Тип на референца на типот на писта заштитена со авион е -- заедничката писта (заштитена за да овозможи истовремен пристап)влез Assign_Aircraft (ID : Airplane_ID ); -- сите записи се загарантирани меѓусебно исклучуваатвлез Cleared_Runway (ID: Airplane_ID); влез Wait_For_Clear ; приватно Чистење: Булова:= Точно; -- заштитени приватни податоци - генерално повеќе од само знаменце...крајна писта ; тип Runway_Access е пристап до сите писти; -- задачата на контролорот на летање прифаќа барања за полетување и слетувањетип на задача Контролер (My_Runway : Runway_Access ) е -- записи за задачи за синхроно пренесување поракивлез Request_Takeoff (ID : во Airplane_ID ; Takeoff : Out Runway_Access ); влез Request_Approach (ID : во Airplane_ID ; Approach : out Runway_Access ); крај контролер ; -- распределба на примероци Runway1: псевдоним Runway; -- инстанцира писта Controller1: Controller (Runway1 " Access); -- и контролор кој ќе управува со него ------ имплементациите од горенаведените типови ------заштитено тело Писта е влез Assign_Aircraft (ID : Airplane_ID ) кога Clear е -- чуварот за влез - задачите за повикување се блокирани додека условот не биде точензапочне Чисто := Неточно ; Put_Line (Airplane_ID "Слика (ID ) & " на пистата"); крај; влез Cleared_Runway (ID : Airplane_ID) кога не Clear започнува Clear := True; Put_Line (Airplane_ID "Слика (ID) & "исчистена писта" ); крај ; записот Wait_For_Clear кога Clear е почнува нула ; -- Нема потреба да правите ништо овде - задачата може да се внесе само ако „Clear“ е точнокрај ; крајна писта ; Тело на задачи Контролорот е start loop My_Runway. Wait_For_Clear ; -- почекајте додека пистата не е достапна (блокирање на повикот)изберете -- почекајте два вида барања (кое и да е прво активирано)кога Request_Approach " count = 0 => -- чуварска изјава - прифати само ако нема задачи во редица на Request_Approachприфати Request_Takeoff (ID: во Airplane_ID; Takeoff: Out Runway_Access) направи - почеток на синхронизираниот дел My_Runway. Assign_Aircraft (ID); -- Резервирајте писта (потенцијално блокирање на повикот ако заштитениот објект е зафатен или штитникот за влез е лажен)Полетување := Мојата_писта; -- додели вредност на параметарот „out“ за да му каже на авионот која пистакрај Request_Takeoff ; -- крај на синхронизираниот делили прифатете Request_Approach (ID : in Airplane_ID ; Approach : out Runway_Access ) направете My_Runway . Assign_Aircraft (ID); Пристап := Мојата_писта; крај Барање_Пристап ; или -- прекинете ако не останат задачи кој би можел да се јавипрекине ; крај изберете ; крајна јамка ; крај ; задача тело Авионот е Rwy: Runway_Access; започнете контролер1. Request_Takeoff (ID, Rwy); -- Овој повик се блокира додека задачата на контролорот не го прифати и комплетира блокот за прифаќање Put_Line (Airplane_ID "Слика (ID ) & " полетување..."); доцнење 2.0 ; Rwy. Cleared_Runway (ID ); -- повикот нема да блокира бидејќи „Clear“ во Rwy сега е неточно и не треба да има други задачи во заштитениот објектзадоцнување 5.0; -- полетајте малку наоколу... изберете јамка -- обидете се да побарате контролор на писта1 . Request_Approach (ID, Rwy); -- ова е блокирачки повик - ќе се извршува кога контролорот ќе достигне прифатен блок и ќе се врати по завршувањетоизлез ; -- ако се врати повикот, ние сме слободни за слетување - оставете го изберете блок и продолжете...или одложување 3.0; -- тајмаут - ако нема одговор за 3 секунди, направете нешто друго (сè во следниот блок) Put_Line (Airplane_ID "Слика (ID ) & " во шаблон за задржување"); -- едноставно отпечатете ја пораката крај изберете ; крајна јамка ; одложување 4.0 ; -- пријде на слетување... Put_Line (Airplane_ID " Image (ID ) & " допре долу!"); Рај. Cleared_Runway (ID); -- извести пистата дека завршивме тука.крај ; Нов_авион: Авион_Пристап; започнете за јас во Airplane_ID " Јамка на опсег -- креирајте неколку задачи во авионотНов_авион := нов авион (I ); -- ќе почне да работи директно по креирањетозадоцнување 4.0; крајна јамка ; крај на сообраќајот ;

Прагми

Прагма е директива за компајлерот која пренесува информации до компајлерот за да овозможи специфична манипулација со компајлерниот излез. Некои псевдокоментари се вградени во јазикот, додека други се имплементирани.

Примери за вообичаени употреби на прагми од компајлерот би биле да се оневозможат одредени функции како што се проверка на типот на време на извршување или проверка на врзани индекси на низа, или да му се наложи на компајлерот да вметне објект код наместо да повикува функција (во C/C++ прави со вградени функции).

  • APSE - Спецификација за програмска средина за поддршка на развој на софтвер во Ada
  • Профилот Ravenscar е подгрупа на функции за повеќе задачи на Ada дизајнирани да обезбедат тешко компјутерско пресметување во реално време кое е критично за безбедноста
  • SPARK (програмски јазик) - програмски јазик кој се состои од многу ограничено подмножество на Ada, означено со мета информации што го опишуваат саканото однесување на компонентата и индивидуалните барања за време на траење

Јазикот на пеколот горе-долу отсекогаш постоел. На училиште се смеевме на неговото име, во наставната програма на универзитетот беше суво споменат како јазик развиен на барање на Министерството за одбрана на САД, но само ретките програмери всушност можеа да ја изучуваат синтаксата или апликацијата. Ова доведе до погрешно мислење дека јазикот Ада функционира само на вековна опрема, а потребата за него ќе исчезне заедно со природната модернизација.

И ова е многу далеку од вистината.

Изглед

Во 70-тите години на 20 век, во екот на Студената војна, Министерството за одбрана на САД организираше меѓународен натпревар, врз основа на чии резултати беше неопходно да се избере програмски јазик за употреба за воени цели. Но, ниту еден од постојните јазици не ги задоволи членовите на комисијата, па преку долг избор и неколку модификации се роди јазикот Ада, именуван по Ада Лавлејс. Потоа започна долгогодишната бирократија со стандардизација, регистрација на трговска марка, забрани за сопствени преведувачи и други дејствија што ја обесхрабруваа масовната публика да работи со Ада.

Резултатот беше прилично лажен јазик наменет за сложени компјутерски системи со зголемени безбедносни барања. Повторно, поради барањата на Пентагон и строгите стандарди, интеракцијата со другите програмски јазици е исклучително тешка, па до неодамна Ада практично немаше шанси да се пресели на масовниот пазар. Но, како што опремата станува поевтина и користените технологии стануваат посложени, се појавува таква шанса.

Синтакса

Првично, Ada е модуларен програмски јазик со силно пишување, наследувајќи ја синтаксата од Паскал и Алгол. Ако го научивте првото на училиште или на колеџ, тогаш погледнете го „Здраво, свето!“ треба да се чувствувате носталгично:

со Ada.Text_IO;

Постапка Здраво е
користете Ada.Text_IO;
започне
Put_Line ("Здраво, свет!");
крај Здраво;

Еден од главните барања за јазикот беше веродостојноста на неговата употреба. Според тоа, ова повлекуваше строги ограничувања на структурата, видовите, правописот и многу повеќе. Покрај тоа, скоро сите грешки овде се фатени во фазата на компилација.

Друг услов беше максималната читливост на кодот во печатена форма, што резултираше со тежина на добиениот јазик и мала флексибилност.

Подоцнежните стандарди делумно ги решија овие проблеми, но од очигледни причини, тие не направија втор Пајтон од пеколот.

Ада денес

Спротивно на мислењето на широката публика, јазикот на пеколот сè уште активно се користи, не само во САД и не само во воената индустрија. На пример, дел од софтверот на амфибискиот авион Бериев Бе-200 е напишан во Ада. Возовите на подземната железница без возачи кои сообраќаат во многу поголеми градови (Париз, Лондон, Њујорк итн.) исто така користат воена јазична опрема на САД.

И да, се разбира, меѓу „клиентите“ беа воената и цивилната авијација (особено Боинг 777), ракети, шатлови, сателити - воопшто, скоро целата листа на бескрајно скапи американски производи кои бараат највисок степен на безбедност .

Изгледите

Јазикот на пеколот беше критикуван и во времето на неговото појавување и кога стана јасно дека грандиозните планови на Пентагон не се вклопуваат баш со реалноста, а уште повеќе сега. Причината за тоа е неповолниот јазик, сложеноста на стандардите напишани во 1983 и 1995 година, како и кратковидоста на програмерите кои го лишиле јазикот на Ада од масовна публика.

Сепак, речиси 40 години активна употреба потврдуваат дека јазикот Ада можеби се справи со својата главна задача - со негова помош сè уште е можно да се создаде сигурен код за системи со зголемени безбедносни барања. Во исто време, ако ги погледнете актуелните трендови, бројот на такви производи постојано расте: автомобили со автопилот и хибридни мотори, приватни вселенски летала и мали авиони, возови со голема брзина, како и огромен број вградени системи. Сето тоа е потенцијално поле за активност на јазикот на пеколот. Додадете го фактот дека стандардот беше сериозно ревидиран и модернизиран во 2012 година, алатките за работата исто така се објавуваат и ажурираат.

Така, јазикот на пеколот е и фрагмент од не многу пријатно минато, и едно од алатките за градење на светла иднина. И дефинитивно не планира да се пензионира.

Ако прашате домашен ИТ специјалист: „Што е Ада?“, повеќето само ќе ги кренат рамениците од изненадување, а некои дури и ќе речат дека тоа е мртов јазик, некогаш измислен од Пентагон, а сега практично не се користи. Всушност, и денес Ada е целосно просперитетен програмски јазик кој активно се користи во различни области. Точно, повеќето руски програмери знаат малку за тоа.

Веројатно сите што мораа да ја користат четиринаесеттата линија на париското метро беа изненадени кога првпат видоа воз во кој немаше кабина на возачот. Движењето на возот на оваа линија е целосно контролирано од програмата Ада.

И покрај сè, во одредени области на технологијата Русија сè уште е „пред останатите“. А еден од нив е дизајнот и производството на амфибиски авиони. Меѓународно признат лидер во оваа област е наречен ТАНТК. Г.М. Бериев. Компанијата неодамна купи алатки за развој на софтвер за авионика базирана на Ada за употреба при надградба на нејзиниот најнов модел Be-200.

Во меѓувреме, поголемиот дел од домашните ИТ специјалисти, во најдобар случај, не знаат ништо за јазикот Ада, а во најлош случај, имаат сосема неточна идеја за Ада како чудовишен јазик, некогаш измислен од Пентагон за развој на воени системи, и сега целосно заборавен.

Малку историја

Официјален роденден на програмскиот јазик Ада може да се смета на 17 февруари 1983 година - датумот на одобрување на стандардот ANSI/MIL-STD-1815-A-1983.

Техничките и административните мерки преземени од Министерството за одбрана како дел од проектот за создавање и имплементација на Ада целосно го спречија појавувањето и ширењето на дијалектите на јазикот. Од 1983 година до денес, сите индустриски имплементации го поддржуваат сегашниот стандард Ada. Кога станува збор за подмножества на Ada, овие подмножества не се одредуваат според имплементацијата, туку според развојните стандарди на одредена класа системи.

Во 1987 година, стандардот ANSI беше усвоен без ниту една промена како ISO стандард (ISO/IEC 8652), а кога потребата за ревизија на стандардот стана неопходна во раните 1990-ти, работата на ревизија беше исто така спроведена под раководство и средства на Министерството за одбрана на САД. Беше започнат нов меѓународен проект, кој заврши со одобрување на крајот на 1994 година и објавување на почетокот на 1995 година на нова верзија на стандардот ISO/IEC 8652. Токму овој документ денес служи како дефиниција на Ада програмски јазик.

Во СССР, во раните 80-ти, беше формирана Работна група за програмскиот јазик Ада под Државниот комитет за наука и технологија. Сите отворени информации за проектот беа внимателно собрани и анализирани, а со напорите на специјалните служби беа добиени и доверливи информации. Беа организирани проекти за имплементација на Ada за речиси сите компјутерски архитектури што се користеа во тоа време, а некои од нив се покажаа како многу успешни. Колапсот на СССР стави крај на оваа активност. Денес Ада се користи во Русија и ЗНД од индивидуални ентузијасти.

Што е Ада

Сите современи индустриски јазици го обезбедуваат суштински истиот основен сет на способности, кои не се разликуваат во тоа што ви дозволуваат да го правите, туку во тоа како точно ви дозволуваат да го направите тоа. Сепак, Ада, во најмалку два аспекта, го проширува стандардниот сет на способности за современите јазици. Прво, Ada обезбедува програмски алатки на високо ниво за асинхрони процеси. Второ, тоа е единствениот јазик што може да се нарече модуларен без никакви резерви.

Таков пример е едноставно неопходен за да се побие прилично раширениот мит дека Ада е голем, сложен и „тежок“ јазик, погоден само за пишување супер-големи и суперкомплексни системи. Всушност, Ada може да се користи за развој на мали и средни програми со ист успех како модерните клонови на C, Pascal, BASIC и Java. Значи, класичен пример на програмата „Здраво, свет! Во Ада изгледа вака:

Лесно е да се види дека кодот Ада е сличен на кодот Паскал кој беше избран како негов прототип. Првата линија ја опишува врската на овој компајлиран модул со другите модули - покажува дека рутината Hello_World треба да се компајлира заедно со модулот Ada.Text_IO, кој е компонента на претходно дефинираната библиотека.

Следната програма дефинира два асинхрони процеси:

Делот за локални декларации од процедурата Tasking_Example ја опишува задачата Outputter (линија 6; линиите 8 до 17 го содржат телото на оваа задача). Кога контролата во процесот што одговара на процедурата Tasking_Example ќе достигне линија 20, процесот што одговара на задачата Outputter се започнува пред да се изврши оваа прва изјава, а потоа двата процеси живеат и се извршуваат асинхроно независно еден од друг. Извршувањето на изјавата за одложување (линии 14 и 20) се состои од суспендирање на соодветниот процес за наведениот број секунди. Така, процесот Tasking_Example е суспендиран за 20 секунди, додека процесот Outputter започнува со печатење на поединечни вредности на бројачот, паузирајќи една секунда откако ќе се испечати секоја вредност. По 20 секунди, процесот Tasking_Example го поставува ознаката Finished на true, завршувајќи ја јамката во процесот Outputter. Спецификацијата на Finished променливата како објект за атомски податоци (линија 4) го оневозможува истовременото читање и менување на вредноста на оваа променлива.

Подолу е шаблон за функции што ви овозможува да додадете две еднодимензионални низи во насока на компонентите. Овој шаблон може да се постави на произволен тип кој е еднодимензионална низа чии компоненти имаат дефинирани операции за доделување и собирање (собирањето не мора да биде аритметичко собирање).

Линиите 1-6 ја содржат декларацијата на прилагодената функција, а линиите 8-20 го содржат нејзиното тело. Во суштина, параметарот за поставување е произволен еднодимензионален редовен тип со неодреден опсег на индекси (линија 4), за кој е познато само дека неговиот тип на компонента е произволен, но операцијата за доделување е дефинирана за компоненти (линија 2). типот на индекс е произволен дискретен (линија 4) . Бидејќи ќе додадеме две низи во насока на компонентите, треба да знаеме каква е операцијата за собирање за типот на компонентата. Бидејќи ова е произволен тип, ние сме принудени да го пренесеме додатокот за типот на компонентата како формален параметар за поставување (линија 5).

Во телото на функцијата, прво проверуваме дали должините на операндите се исти (линија 12), инаку компонентно собирање нема смисла. Усогласувањето на должините на операндот не гарантира совпаѓање на опсегот на индексот, така што во јамка над индексниот опсег на првиот аргумент (линија 15), треба секој пат да го пресметуваме индексот на соодветната компонента на вториот аргумент. Не можеме да го направиме ова за типот Index, бидејќи за него знаеме само дека е дискретно, па одиме од вредноста на дискретниот тип до неговиот реден број (атрибут?Pos), го пресметуваме потребното поместување за редниот број и вратете се на соодветната вредност од типот Index (атрибут?Val).

Забележете дека параметрите на (прилагодената) функција „+“ Лево и Десно се декларирани како од типот Arr, чијшто опсег на индекс е неодреден. Меѓутоа, Лево и Десно се формални параметри, на чие место, при повикување (резултат од конкретизација) функцијата „+“, ќе се заменат специфични низи со познати индексни опсези. Во телото на функцијата „+“, користиме атрибути на низа (?Опсег, ?Прво, ?Должина) за да добиеме информации за неговиот индексен опсег од објектот.

Зошто Ада?

Изборот на јазик за софтверски проект порано беше чисто техничка работа. Денес ова стана прашање од стратешко значење, со далекусежни последици за успехот на проектот. Дозволете ни да наведеме некои од причините зошто јазикот Ада е избран за имплементација на софтверски проекти од различни компании или е задолжителен за употреба во рамките на тендерите.

  • Желбата да се зголеми доверливоста на системот што се развива, бидејќи дефектите на софтверот можат да имаат сериозни последици за здравјето на луѓето, економијата, животната средина итн. (Ада има вградени карактеристики на доверливост.)
  • Желбата да се намалат трошоците за развој и одржување на системот.
  • Достапност на меѓународни стандарди и достапност на јазични компајлери за речиси секоја платформа.
  • Придобивките од дисциплинираниот пристап кон развојот на софтвер стануваат особено значајни со зголемувањето на големината и сложеноста на софтверот.
Ада и Си

При спроведување на компаративни анализи на популарни јазици, толку многу копии се скршени што денес оваа тема често се класифицира како „верски војни“. Затоа, ќе се ограничиме само на упатување на една добро позната статија, која носи голем број елоквентни заклучоци.

  1. Развивањето програми на јазикот Ада чини 60% помалку од слични софтверски проекти имплементирани во C.
  2. Програма во Ada има 9 пати помалку дефекти од програма во C; C++ програма има дури и пониски карактеристики од програмата C.
  3. се претпочита од C за искусни и неискусни програмери, како и за програмери со максимален и минимален рејтинг во нивната група.
  4. Комплексноста на учењето на јазикот Ада не е поголема од сложеноста на учењето В.
  5. Ada програмите се посигурни од програмите C.

За да ги илустрираме овие заклучоци, даваме пример за развој на софтвер во авионот за авионот C-130J во согласност со барањата на Ниво А на стандардот DO-178B. Во исто време, квалитетот на кодот беше 10 пати повисок од просекот за софтверот на ниво А. Продуктивноста на трудот се зголеми четирикратно во споредба со споредливите софтверски проекти.

Ада и Јава

Мајкрософт беше принуден да ја вклучи следната клаузула во договорите за лиценца за своите оперативни системи ( www.microsoft.com/msdownload/ieplatform/ie/license.txt): „Забелешка во врска со поддршката на Јава јазикот... Јава технологијата не е толерантна за грешки и не е наменета... за употреба во системи за контрола во реално време... во кои неуспехот на јазикот Јава може да резултира со смрт, повреда, или голема штета на инфраструктурата или животната средина. Sun Microsystems, Inc. Од Мајкрософт се бараше да го објави ова предупредување“.

Ќе посочиме и написи кои ги покажуваат предностите на јазикот Ада во однос на Јава.

„Пеколни“ митови

Доста често, Ада се поврзува со збир на постојани заблуди кои го попречуваат и ширењето на јазикот и свесниот избор на Ада како јазик за спроведување на проектот.

Ада е мртов јазик, никој не програмира на него сега.Всушност, Ада самоуверено ја зазема нишата на големи вградени системи со зголемени барања за доверливост. Во споредба со „боксирани“ производи за Windows, таквите системи не се толку забележливи, бидејќи тие или постојат во една копија (која е поентата да се реплицира програма што го контролира движењето на возовите во метрото), или се дистрибуираат како дел од системот во кои се изградени (вграден софтвер).

Ada е јазик наменет исклучиво за воени апликации. Ada навистина беше развиена со учество на Министерството за одбрана на САД, но не постојат технички, административни или други причини кои ја спречуваат употребата на Ada за развој на цивилни системи. Бројот на „цивилни“ проекти базирани на овој јазик денес е споредлив со бројот на „воени“ проекти.

Ада е преголем и сложен јазик за да се користи во мал проект.Обемот и сложеноста на сите современи индустриски јазици се речиси исти, а за да се увериме во тоа, доволно е едноставно да се спореди обемот на нивните описи. Овој мит датира од раните 80-ти, кога Ада беше споредувана со Паскал, Фортран 77 или БАСИК.

Има малку програмери кои ја познаваат Ада; учењето на јазикот од нула бара прекумерен труд и време.Всушност, вистинската тешкотија е да се најдат специјалисти кои ги разбираат спецификите на вградените системи и се способни да креираат висококвалитетни програми за нив. На пример, BAE, еден од активните корисници на јазикот Ада, не бара кандидатите да го знаат овој јазик; наместо тоа, се бараат луѓе кои се запознаени со вградените системи и процеси за создавање софтвер со индустриски квалитет. Откако ќе вработат такви луѓе, потребни се само две недели за да ги научите на јазикот на пеколот.

Нашето лично искуство покажува дека на програмерите запознаени со еден или друг вкус на Pascal им требаат само неколку дена за да започнат да развиваат едноставни програми во Ada.

Постојните технологии на Ада се неефикасни; И преведувачите и кодот што тие го генерираат се карактеризираат со ниски перформанси. Овој мит, исто така, датира од првата половина на 80-тите, кога се појавија првите имплементации на Ада, што всушност само ја докажа „теоремата за постоење на преведувач на Ада што одговара на стандардот“. Доволно е да се спроведат низа едноставни експерименти со програмирање на некој проблем со моделот во Ada, Pascal и C/C++, а потоа да се споредат (со споредливи параметри на компајлерот) брзината на компилација, обемот на генерираниот код и брзината на неговото извршување за да се направи сигурен дека нема специфични неефикасности, карактеристични за Ада, едноставно не постои. Исто така, може да се забележи дека програмскиот систем GNAT, со волумен на изворниот текст од повеќе од 40 MB, е 90% имплементиран во Ada, а неговото градење од изворни текстови (во текот на својот тек се компајлира три пати) на модерен компјутер е потребно не повеќе од половина час.

Постојните имплементации на Ada се исклучително скапи.Ова е точно, но имајте на ум дека постои јавно достапна верзија на програмскиот систем GNAT што може слободно и легално да се добие од складиштето на софтверот на NYU ( ftp://cs.nyu.edu/pub/gnat) заедно со изворните текстови

Бесплатно сирење и како да ја избегнете стапицата за глувци

GNAT (GNu Ada Translator) е мултиплатформска имплементација на јазикот Ада што постои на скоро сите модерни индустриски платформи и поддржува генерирање код за популарни вградени архитектури. GNAT ( www.gnat.com) целосно го имплементира стандардот Ada, вклучувајќи ги и оние библиотеки кои се класифицирани како опционални според стандардот. Покрај самиот преведувач на Ada, GNAT вклучува алатки кои вклучуваат развиена интегрирана околина за развивачи и повеќејазичен графички дебагер, кој, меѓу другото, овозможува да се испита однесувањето на програмите со асинхрони процеси. Преведувачот и сродните алатки може да се користат или поединечно, повикувајќи ги од командната линија или како дел од интегрираното графичко развојно опкружување за програмите Ada. Сите компоненти на GNAT, вклучително и развојната средина, имаат ист интерфејс на сите платформи. Покрај целосната имплементација на алатките опишани со стандардот, GNAT нуди богат сет на екстензии дозволени со стандардот. GNAT е имплементација на Ada во повеќејазичниот систем за програмирање gcc, кој се состои од збир на предни компајлери за различни влезни јазици со заеднички генератор на код, што во голема мера го поедноставува развојот на програми што содржат компоненти имплементирани во различни програмски јазици.

GNAT е развиен и дистрибуиран под лиценцата GPL од самиот почеток. За жал, има и многу митови поврзани со GPL. Така, многумина веруваат дека програмите според GPL се развиваат од неорганизирани групи ентузијасти и се дистрибуираат апсолутно бесплатно; Како резултат на тоа, и сигурноста и функционалноста на ваквите програми оставаат многу да се посакуваат и не дозволуваат нивна употреба во какви било сериозни проекти. Во случајот со GNAT ова е далеку од точно. За да го потврдите ова, само погледнете го списокот на компании кои склучиле договори за техничка поддршка со неговите развивачи: Боинг, British Aerospace, Lockheed, Ericsson, SAAB, Avionics итн.

Слободното обезбедување на демо верзии е вообичаена практика на многу развивачи на софтвер. GNAT се разликува по тоа што слободно достапната јавна верзија е апсолутно комплетна верзија на технологијата, без никакви правни или технички ограничувања за нејзината употреба. Голем број сериозни проекти се успешно спроведени врз основа на јавните верзии на GNAT. Софтвер на лендерот Бигл 2 на европската автоматска станица Марс Експрес, кој моментално се движи кон Марс ( www.beagle2.com/index.htm), автоматизирана документарна комуникациска станица на Министерството за одбрана на Руската Федерација ( www.ada-ru.org/prj_doc.html). Единствениот недостаток на јавните верзии е тоа што развивачот не обезбедува техничка поддршка за нив.

Заклучок

Да резимираме, јазикот Ada им овозможува на програмерите идеална комбинација на интегритет, конзистентност, доверливост и ефикасност. Јазикот поддржува креативна креативност и иновативност додека обезбедува дисциплина и индустриско ниво на развој на софтвер потребни за имплементација на софтверски системи од големо значење.

Литература
  1. Бенџамин Бросгол, Вовед во Ада 95. www.embedded.com/story/OEG20021211S0034
  2. Стивен Цајглер, Споредување на трошоците за развој на C и Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org. На веб-страницата може да се најде нотирана библиографија на книги за јазикот Ада објавени на руски јазик