Ada je obzvláště dobrý programovací jazyk. Ada (programovací jazyk) Co je ada v informatice

Abstrakt na téma:

Ada



Plán:

    Úvod
  • 1 Vlastnosti jazyka
  • 2 "Ahoj světe!" na Adu
  • 3 Historie
  • 4 Peklo v SSSR a Rusku
  • 5 Kritika
  • 6 Distribuce, vyhlídky
  • 7 Operační systémy napsané v Ada
    • 7.1 Vestavěné systémy
    • 7.2 Systémy ve vývoji
    • 7.3 Již neexistující systémy
  • 8 kompilátorů pekla
  • 9 Odvozené jazyky
  • 10 Zajímavosti
  • Poznámky
    Literatura

Úvod

Ada (Ada) je programovací jazyk vytvořený v letech 1979-1980 jako výsledek projektu Ministerstva obrany USA s cílem vyvinout jednotný programovací jazyk pro vestavěné systémy (tj. řídicí systémy pro automatizované systémy pracující v reálném čase). Především šlo o palubní řídicí systémy pro vojenské objekty (lodě, letadla, tanky, střely, granáty atd.). Vývojáři nebyli postaveni před úkol vytvořit univerzální jazyk, takže rozhodnutí učiněná autory Ady by měla být přijímána v kontextu charakteristiky zvoleného předmětu. Jazyk je pojmenován po Adě Lovelace.


1. Vlastnosti jazyka

Ve své původní podobě, standardizované v roce 1983, je Ada strukturovaný modulární programovací jazyk obsahující možnosti programování paralelních procesů na vysoké úrovni. Adina syntaxe je zděděna z jazyků jako Algol nebo Pascal, ale rozšířena a také přísnější a logičtější. Ada je silně typovaný jazyk, vylučuje práci s objekty, které nemají typy a automatické převody typů jsou omezeny na naprosté minimum. Ve standardu 1995 byly k jazyku přidány základní objektově orientované programovací nástroje ve standardu 2007 byly tyto nástroje doplněny, takže moderní Ada je objektově orientovaný programovací jazyk.

Mezi vlastnosti syntaxe patří:

  • Jazyk nerozlišuje velká a malá písmena.
  • Programy jsou modulární mechanismus pro řízení importu a exportu popisů mezi moduly obsahuje dvě různé směrnice: jednu pro připojení dalšího modulu (s), druhou pro import jeho popisů (použití). Při importu je také možné modul přejmenovat (přejmenovat) - tato volba umožňuje použít k označení balíku programátorsky přívětivější identifikátory.
  • Balíčky (jeden z typů modulů) mohou obsahovat hlavičku a privátní část – to, co je v ní obsaženo, se neexportuje a není dostupné pro ostatní moduly.
  • Je podporován mechanismus zobecněných (přizpůsobitelných) modulů: balíčky, procedury a funkce, které umožňují popisovat zobecněné algoritmy zpracování dat bez uvedení konkrétního typu.
  • Vyvinutý systém typů, vestavěný i generovaný programátorem. Existuje mnoho způsobů, jak vytvořit nové typy, a jazyk podporuje dva různé koncepty: „podtyp“ a „odvozený typ“. Proměnné typu a jeho podtypu jsou kompatibilní, proměnné typu a jeho odvozeného typu nikoli.
  • Výjimka manipulační zařízení.
  • Vyvinuté prostředky pro přístup k procedurám a funkcím: podporuje vstupní a výstupní parametry, předávání aktuálních parametrů v libovolném pořadí s uvedením formálních názvů, parametry s výchozími hodnotami.
  • Je podporováno předefinování procedur, funkcí a operátorů - vytvoření několika variant procedury, funkce nebo operátoru se stejným názvem, ale různými signaturami (typy a počtem parametrů).
  • Struktury podpory paralelního programování zabudované do jazyka: jsou podporovány koncepty „úloha“ (paralelně prováděný fragment programu), „vstup úlohy“ (prostředek synchronizace a komunikace paralelně běžících úloh), podporován je mechanismus „rendezvous“ ( protokol pro interakci paralelně běžících úloh prostřednictvím vstupu jedné z nich), existuje operátor SELECT pro organizaci podmíněné mezivláknové interakce (výběr paralelní úlohy, se kterou se má interagovat, v závislosti na připravenosti na setkání a některých dalších podmínkách ). V zásadě jsou nástroje paralelního programování dostupné v tomto jazyce dostatečné k vyřešení velké třídy problémů, které vyžadují paralelní zpracování, bez použití externích nástrojů, jako jsou další knihovny nebo rozhraní API operačního systému.

Aby byly splněny požadavky na spolehlivost, je jazyk vytvořen tak, aby bylo ve fázi kompilace detekováno co nejvíce chyb. Navíc jedním z požadavků při vývoji jazyka bylo, aby texty programů byly co nejsnáze čitelné i na úkor snadnosti psaní. Výsledkem tohoto přístupu byla poněkud „těžká“ syntaxe a mnoho omezení, která v nejběžnějších průmyslových jazycích (C a C++) chybí a jsou profesionálními programátory často vnímána jako nadbytečná, například stejně striktní typizace. To vedlo k vytvoření myšlenky Ada jako složitého, nejasného a nepohodlného jazyka k použití.


2. "Ahoj světe!" na Adu

Několik různých verzí programu „Ahoj, světe!“ lze vidět na Wikibooks. Rozdíly jsou způsobeny nutností použití funkce knihovny Put_Line – tento jazyk má tři různé způsoby organizování takového použití.

S Ada.Text_IO ; procedura Dobrý den, používám Ada.Text_IO ; begin Put_Line("Ahoj světe!" ) ; konec Dobrý den;

Zde se pro použití funkce Put_Line importuje balíček Ada.Text_IO, který ji obsahuje, pomocí konstruktu use, který umožňuje volat funkci jménem bez kvalifikace - zadáním názvu balíčku obsahujícího funkci ve volání.


3. Historie

Vývoj jazyka probíhal v rámci mezinárodní soutěže organizované a financované ministerstvem obrany USA. Cílem vývoje bylo získat programovací jazyk, který by se mohl sjednotit pro vývoj projektů pro zakázky ministerstva obrany, zejména pro vývoj vestavěných systémů pro vojenské účely a pro velké vojenské počítače (na bázi procesoru iAPX 432 z r. Intel). Práce začaly v roce 1975 vytvořením sady jazykových požadavků, které by plně uspokojily vývojáře systémů tohoto typu. Počáteční seznam požadavků s kódovým označením „Straw“ byl předložen k posouzení řadě organizací a firem a během dvou let byl postupně zpřesňován, až se nakonec stal konečným dokumentem nazvaným „Steel“.

Po splnění požadavků byla provedena analýza, která ukázala, že žádný z dostupných programovacích jazyků dostatečně nesplňuje požadavky, proto bylo rozhodnuto vyvinout nový jazyk. Soutěž na jeho vytvoření byla vyhlášena v roce 1977, vývojáři byli požádáni, aby jej založili na jednom ze tří jazyků: Pascal, Algol-68 nebo PL/1.

Z 15 projektů přihlášených do soutěže byly vybrány 4 (všechny založené na Pascalu). Tyto projekty byly zaslány k dalšímu rozvoji. V další fázi byly ze 4 projektů vybrány dva, z nichž po dalším upřesnění byl vybrán jeden. Tento jazyk dostal jméno „Ada“ – skupina, která jej vyvinula, vedená Francouzem Jeanem Ishbiou, dala tomuto jazyku jméno na počest Augusty Ady King Lovelace (1815-1852), dcery básníka J. Byrona, který vyvíjel programy pro počítač Babbage a je považován za prvního programátora na světě.

V roce 1983 byl jazyk oficiálně standardizován organizací ANSI. Jazyková norma ANSI/MIL-STD-1815-A-1983 byla schválena 17. února 1983. Americké ministerstvo obrany vytvořilo z názvu „Ada“ registrovanou ochrannou známku, která zakazuje uvolnění překladatelů jazyků, kteří neprošli oficiálním testovacím postupem pro shodu s normami. Postup spočíval ve spuštění velkého množství (více než 1000) testovacích programů (tzv. ACVC set) přes testovaný kompilátor, pro každý z nich byl jasně definován výsledek testu: buď úspěšná kompilace, nebo výroba velmi specifického chybové hlášení. Testování probíhalo podle principu „vše nebo nic“ – pokud došlo k chybě při zpracování alespoň jednoho testovacího příkladu, byl kompilátor považován za neúspěšný v testu a testování bylo platné pouze na hardwarové a softwarové platformě, na které bylo provedeno. Možnost vytvoření „verzí“ nebo „dialektů“ jazyka Ada tak byla potlačena v zárodku.

V roce 1987 byl jazyk Ada oficiálně standardizován organizací ISO. Od té chvíle ministerstvo obrany USA zpřístupnilo jazyk veřejnosti.

V roce 1990 již bylo na světě asi 200 překladačů, které splňovaly jazykový standard Ada.

V roce 1995 byl přijat nový standard Ada známý jako Ada95. Do jazyka byly zavedeny nástroje objektového programování. Jazyk byl navíc doplněn o vyvinutější nástroje pro interakci s programy napsanými v jiných jazycích.

V březnu 2007 byly zveřejněny změny standardu Ada. Dotkli se především možností objektově orientovaného programování: byla představena rozhraní, byla přijata syntaxe volání metody společná pro většinu hybridních jazyků a byla provedena řada dalších doplňků.


4. Ada v SSSR a Rusku

V SSSR v 80. letech byla pod Státním výborem pro vědu a techniku ​​organizována Pracovní skupina pro jazyk Ada. Skupina studovala všechna otevřená (a podle pověstí tajně získaná zpravodajskou službou) data o jazyce Ada a zkoumala možnost a proveditelnost vývoje a použití Ada v SSSR. Činnost této skupiny vedla koncem 80. let k vývoji překladačů Ada pro téměř všechny počítače používané v SSSR. Několik knih o jazyce Ada bylo vydáno v ruštině.

Moskevská státní univerzita pracovala na vytvoření vlastních balíčků pro testování překladačů Ada z hlediska souladu se standardy. Na Leningradské státní univerzitě byl k vytvoření systému Ada použit systém Pallada, dříve vyvinutý pro implementaci Algol-68, který byl převeden na Ada. Systém obsahuje integrované vývojové prostředí, kompilátor, textový editor, debugger, knihovny, systém správy verzí a interpret příkazů.

Po rozpadu SSSR byly práce na distribuci Ady prakticky přerušeny. Pravda, byly přijaty tři programy pro vývoj vývoje softwaru v Adě (na ministerstvu obrany, ministerstvu civilního letectví a ministerstvu školství a vědy), ale jejich vývoj je pomalý a nekoordinovaný. V důsledku toho je jazyk Ada v Rusku málo známý, většina moderních ruských programátorů jej považuje za „mrtvý jazyk“ a nic o něm neví. Ada je používán v Rusku a SNS jednotlivými nadšenci. Jazyk se však používá pro vývoj průmyslového softwaru. Existuje několik známých projektů vyvinutých v Ada a fungujících v Rusku. Mezi nimi:

  • Dokumentační komunikační stanice Ministerstva obrany RF. Hlavním úkolem je zajistit výměnu dokumentačních informací v datových sítích Ministerstva obrany Ruská Federace. Softwarový a hardwarový komplex byl společně vyvinut produkční organizací „Computer Technology and Automation Tools“ ( Hardware) a skupina programátorů z off-roadového sektoru severokavkazského střediska řízení letového provozu "Strela". Software komplexu je napsán v programovacím jazyce Ada pomocí kompilátoru GNAT. Podpora pro distribuované výpočty je poskytována dodatečnou komponentou GLADE.
  • Sada standardního letového, navigačního a komunikačního vybavení pro ruský obojživelný letoun Beriev Be-200. Vývoj prováděl Výzkumný ústav leteckého vybavení v Žukovském společně s americkou společností Allied Signal, Florida, USA. Byl použit vývojový komplex Ada-systems od DDC-I platforma Intel 80486.

5. Kritika

Od svého vzniku byla Ada kritizována některými uznávanými autoritami v oblasti vývoje programovacího jazyka, především pro složitost jeho syntaxe a velký objem. Zejména jazyk kritizovali Charles Hoar a Niklaus Wirth (kteří se se svým projektem této soutěže zúčastnili, ale po první fázi vypadli), stejně jako Edsger Dijkstra.

Dijkstra pochyboval, že by tak složitý jazyk jako Ada mohl být pozorovatelný a zvládnutelný.

Pokud bude Ada vydávat normu, chce, aby byla jednoznačně zdokumentována. Alespoň dvě skupiny se o to pokusily; v důsledku toho oba vyprodukovaly asi 600 stran formálního textu. To je mnohem více, než je nutné, aby bylo zajištěno, že není možné ani pevně stanovit, že oba dokumenty definují stejný jazyk. Chyba zjevné nekontrolovatelnosti těchto dvou dokumentů nespočívá ve dvou skupinách, které je sestavily, nikoli ve formalismu, který přijaly, ale pouze v jazyce samotném: bez poskytnutí formální definice mohou jejich tvůrci skrývat skutečnost, že navrhují neovladatelné monstrum. Že Ada omezí problémy s programováním a zvýší spolehlivost našich návrhů na přijatelné limity, je jen jedna z těch pohádek, kterým mohou věřit jen lidé s vojenským zázemím.

Sci-fi a vědecká realita v informatice (Edsger W. Dijkstra, EWD952)

Hoar si posteskl, že „zvonky a píšťalky mají přednost před základními požadavky na spolehlivost a bezpečnost“ a varoval před „armádou raket, která se vydala špatným směrem kvůli neodhalené chybě v kompilátoru Ada“. Niklaus Wirth mluvil zdrženlivě, ale také negativně. Řekl: „Na programátora se hází příliš mnoho. Nemyslím si, že po nastudování třetiny Ady můžete normálně pracovat. Pokud neovládáte všechny detaily jazyka, můžete o ně v budoucnu narazit, což povede k nepříjemným následkům.“ Jean Ishbia, vedoucí vývojového týmu Ada, když vyjádřil svůj „respekt a obdiv“ k Wirtovi, nesouhlasil s ním a řekl: „Wirth věří v jednoduchá řešení komplexní problémy. Nevěřím na takové zázraky. Složité problémy vyžadují komplexní řešení."

Pochybnosti vzbuzuje i postup kontroly shody překladače s jazykovou normou pomocí testování. Z obecných úvah je zřejmé, že testování může najít nesrovnalosti, ale nemůže zaručit správnost. Praktickým potvrzením toho je skutečnost, že certifikovaní kompilátoři při testování na jiné sadě testů zjistili nesoulad s normou.

Zastánci Ady tvrdí, že jedinou alternativou k velkému a složitému jazyku ve velkých projektech je použití několika kompaktních jazyků, což nevyhnutelně vede k problémům s kompatibilitou, kterých byla Ada vynalezena, aby se zbavila. Poznamenávají také, že myšlenka obtížnosti vývoje v Ada je pravdivá jen částečně: psaní jednoduchého programu v Ada zabere více času než v jiných, méně formálních jazycích, jako je C, ale ladění a údržba programů, zejména velké a složité, je značně zjednodušený. Podle Stephena Zeigera z Rational Software Corporation je vývoj software v Adě jsou celkové náklady o 60 % levnější a vyvinutý program má 9krát méně vad než při použití jazyka C.


6. Distribuce, perspektivy

V praxi se ukázalo, že Ada poté, co obsadila své zamýšlené místo ve vojenském a souvisejícím vývoji vestavěných systémů, nikdy nepřekročila toto místo, ani na Západě, ani v SSSR, ani v postsovětském prostoru. Důvodů je mnoho. Odpůrci jazyka se zaměřují na jeho složitost a nedostatky, zastánci hovoří především o objektivních okolnostech vzhledu jazyka a negativních aspektech procesu jeho implementace. Zajímavý je názor S. I. Rybina, vedoucího výzkumného pracovníka Výzkumného výpočetního centra Moskevské státní univerzity, konzultanta AdaCore EU, odborníka na jazyk Ada pracovní skupiny ISO pro jazykovou normu. Věří, že Ada vděčí za své selhání dvěma hlavním důvodům:

  • Při návrhu jazyka Pentagon předpokládal, že veškerý nový software bude vytvořen pouze v Adě. Kvůli tomu získala Ada extrémně primitivní prostředky pro interakci s programy v jiných jazycích. V praxi se ukázalo, že psát vše v Ada bylo nereálné (už jen proto, že byla potřeba interagovat s hotovými vývojovými prvky v jiných jazycích). Proto v odvětvích, kde neexistoval přísný požadavek „psát pouze v Adě“, preferovali jiné jazyky, které byly více přizpůsobeny vícejazyčnému prostředí. Norma z roku 1995 vyřešila problém interoperability s jinými jazyky, ale čas se ztratil.
  • Šíření Ady paradoxně zabránila finanční a organizační podpora Pentagonu. Programy Ada napsané pro armádu běžely na těch nejvýkonnějších počítačová technologie, který byl k dispozici, takže vývojářům kompilátorů záleželo v první řadě na absolvování testů ACVC a teprve potom na efektivitě kompilátoru a kódu, který produkuje. Na počátku 80. let začal boom mikropočítačů a překladače pro běžné jazyky (Pascal, C, BASIC) byly rychle optimalizovány pro systémy s nízkou spotřebou. Pro Adu nebyla žádná pobídka k takové modernizaci, takže osobní počítače, které se o pár let později staly převážnou částí světové výpočetní flotily, se ocitly bez kvalitního Ada překladače. Ada přirozeně tento segment trhu ztratila. Teprve relativně nedávno se objevil kompilátor GNAT, kvalitní a produktivní, ale i zde se ztratil čas.

V současné době je Ada poměrně pevně etablovaná ve vývoji velkých vestavěných systémů se zvýšenou spolehlivostí, zde prakticky nemá žádné silné konkurenty. Používání jazyka se postupně zvyšuje, i když spíše pomalu. Podle některých opatrných předpovědí [ ], s levnějším hardwarem a rozšířením vestavěných systémů se složitým softwarem může výrazně růst trh s programy Ada a poroste i používání jazyka.

Ada má navíc, byť velmi omezené, uplatnění v oblasti vysokého školství. Speciální kurzy o Adě se vyučují na Moskevské státní univerzitě a Charkovské univerzitě. Nicméně, podle stejného S.I. Rybina,

... nyní se v postsovětském prostoru v oblasti softwarového průmyslu a vzdělávání rozvinul zjevný začarovaný kruh: v průmyslu o Adě prakticky nevědí, takže z průmyslu neexistuje žádný požadavek na vzdělání, aby vyškolit specialisty Ada a z univerzit přicházejí do průmyslu noví lidé, kteří o Adě nevědí prakticky nic.


7. Operační systémy napsané v Ada

7.1. Vestavěné systémy

  • MaRTE
  • RTEMS je operační systém s otevřeným zdrojovým kódem vyvinutý organizací DARPA Ministerstva obrany USA
  • Ravenskar
  • RTOS-32 - proprietární OS

7.2. Systémy ve vývoji

  • AuroraUX (projekt na přepsání jádra OpenSolaris a poté DragonFly BSD do jazyka Ada)
  • Lovelace ( operační systém na jádru L4)

7.3. Již neexistující systémy

  • BiiN™
  • Pulse™
  • AdaOS

8. Kompilátory pekla

název Společnost Verze operační systém webová stránka
AdaMagic SofCheck Ada 95 ? www.sofcheck.com
AdaMULTI Software Green Hills Ada 83, Ada 95, C, C++, Fortran Solaris SPARC, GNU/Linux x86, Windows www.ghs.com
DEC Ada Hewlett Packard Ada 83 OpenVMS h71000.www7.hp.com
KOMÁR AdaCore Ada 83, Ada 95, Ada 2005, Si Solaris SPARC, Linux x86/x86-64, Windows, další libre.adacore.com
ICC Společnost Irvine Compiler Corporation Ada 83, Ada 95 DEC VAX/VMS, HP 9000/700, Solaris SPARC, DEC Alpha OSF/1, PC Linux, SGI IRIX, Windows www.irvine.com
Janus/Ada Software RR Ada 83, Ada 95 SCO, UnixWare, Interactive, MS-DOS, Windows www.rrsoftware.com
MAXada Souběžné Ada 95 Linux/Xeon, PowerPC www.ccur.com
ObjectAda Aonix Ada 95 Solaris SPARC, HP-UX, IBM AIX, Linux, Windows www.aonix.com
PowerAda OC systémy Ada 83, Ada 95 Linux, AIX (Ada 95); IBM System 370/390 (Ada 83) www.ocsystems.com
Racionální Apex IBM Rational Ada, C, C++ Solaris SPARC, Linux www-01.ibm.com
SKÓRE DDC-I Ada 83, Ada 95, C, Fortran Solaris SPARC, Windows www.ddci.com
XD Ada SWEP-EDS Ada 83 OpenVMS Alpha/VAX www.swep-eds.com
XGC Ada Software XGC Ada 83, Ada 95, Si Solaris SPARC, PC Linux, Windows (Cygwin) www.xgc.com

S výjimkou GNAT a XGC (u některých platforem) jsou výše uvedené kompilátory placené. Některé společnosti, jako je Aonix, nabízejí bezplatné demo verze, které jsou omezeny buď dobou použití, nebo funkčností.

Vývojová prostředí NetBeans a Eclipse mají pluginy pro práci s Adou.


9. Odvozené jazyky

Syntaxe jazyka Ada se používá v jazycích, jako jsou:

  • PL/SQL

10. Zajímavosti

  • Formálně byla soutěž o vývoj jazyka, která vyústila ve vytvoření Ady, anonymní – týmy vývojářů přihlašovaly své projekty pod kódovými názvy, aby soutěžní komise nemohla při výběru vítěze brát v úvahu identitu vývojářů. Ale v praxi, jak napsal jeden z členů komise, byl vkus vývojářů natolik odlišný, že nebylo těžké určit autora projektu.
  • Všechny jazyky, které se dostaly do závěrečných kol této soutěže, byly založeny na Pascalu. Ada lze v tomto ohledu předběžně charakterizovat jako Pascal, vyvíjený s ohledem na daných pět základních požadavků. Autoři přitom šli hlavně cestou rozšiřování Pascalu o nové prvky. Výsledkem byl výrazně složitější jazyk.
  • V ruském jazyce existují vtipy související s nejednoznačností výrazu „Jazyk pekla“, včetně těch, které jsou založeny na paralelách s ruským algoritmickým jazykem, známým také jako „Jazyk NEBE“. Do programátorského folklóru vstoupil i závěr článku sovětského propagandisty Melora Sturuy (1984):

Jazyk Pentagonu je nepřítelem míru. Jazyk „Ada“ je hlasem termonukleárního pekla... V jazyce „Ada“ lze slyšet kletbu na lidskou rasu.


Poznámky

  1. Referenční příručka jazyka Ada 83. Kapitola 1.3. Cíle a zdroje rozvoje – www.ada-ru.org/arm83/ch01s03.html
  2. Vadim Stankevič. Lady Ada - www.kv.by/index2006451104.htm
  3. Aktualizovaný standard na iso.org – www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=45001
  4. Bryabrin V. M. Software pro osobní počítače. M.: Nauka, 1988.
  5. 1 2 Rozhovor se S.I. Rybinem - www.ada-ru.org/wiki/rybin
  6. , Objektově orientované programovací jazyky, programovací jazyky platformy NET, Ada, Články s příklady kódu Ada.
    Text je dostupný pod licencí Creative Commons Attribution-ShareAlike.

Zeptáte-li se domácího IT specialisty: „Co je Ada?“, většina jen překvapeně pokrčí rameny a někteří dokonce řeknou, že je to mrtvý jazyk, kdysi vynalezený Pentagonem, a dnes se prakticky nepoužívá. Ve skutečnosti je i dnes Ada zcela prosperujícím programovacím jazykem, který se aktivně používá v různých oblastech. Pravda, většina ruských programátorů o tom ví jen málo.

Asi každý, kdo musel použít čtrnáctou linku pařížského metra, byl překvapen, když poprvé uviděl vlak, ve kterém nebyla kabina strojvedoucího. Pohyb vlaku na této trati je kompletně řízen programem Ada.

Navzdory všemu je Rusko v určitých oblastech technologie stále „před ostatními“. A jedním z nich je návrh a výroba obojživelných letadel. Mezinárodně uznávaný lídr v této oblasti je TANTK pojmenovaný po. G.M. Beriev. Společnost nedávno získala nástroje pro vývoj softwaru pro avioniku založené na Ada pro použití při modernizaci svého nejnovějšího modelu Be-200.

Mezitím většina domácích IT specialistů v nejlepším případě neví nic o jazyce Ada a v nejhorším případě má zcela nesprávnou představu o Ada jako o monstr jazyku, který kdysi vynalezl Pentagon pro vývoj vojenských systémů, a nyní zcela zapomenut.

Trochu historie

Za oficiální narozeniny programovacího jazyka Ada lze považovat 17. únor 1983 – datum schválení normy ANSI/MIL-STD-1815-A-1983.

Technická a administrativní opatření ministerstva obrany v rámci projektu vytvoření a realizace Ady zcela zabránila vzniku a šíření dialektů jazyka. Od roku 1983 do současnosti všechny průmyslové implementace podporují současný standard Ada. Pokud jde o podmnožiny Ada, tyto podmnožiny nejsou určeny implementací, ale vývojovými standardy konkrétní třídy systémů.

V roce 1987 byla norma ANSI přijata bez jediné změny jako norma ISO (ISO/IEC 8652), a když se na počátku 90. let stala potřeba revize normy, byly revizní práce rovněž prováděny pod vedením a prostředky amerického ministerstva obrany. Byl zahájen nový mezinárodní projekt, který skončil schválením na konci roku 1994 a zveřejněním na začátku roku 1995 nová verze norma ISO/IEC 8652. Právě tento dokument dnes slouží jako definice programovacího jazyka Ada.

V SSSR byla na počátku 80. let vytvořena Pracovní skupina pro programovací jazyk Ada pod Státním výborem pro vědu a techniku. Všechny otevřené informace o projektu byly pečlivě shromážděny a analyzovány a utajované informace byly získány také díky úsilí speciálních služeb. Byly organizovány projekty k implementaci Ada pro téměř všechny v té době používané počítačové architektury a některé z nich se ukázaly jako velmi úspěšné. Rozpad SSSR tuto činnost ukončil. Dnes Ada používají jednotliví nadšenci v Rusku a SNS.

Co je Ada

Všechny moderní průmyslové jazyky poskytují v podstatě stejnou základní sadu schopností, které se neliší v tom, co vám umožňují, ale v tom, jak přesně vám to umožňují. Ada však minimálně ve dvou ohledech rozšiřuje standardní sadu schopností moderních jazyků. Za prvé, Ada poskytuje programovací nástroje na vysoké úrovni pro asynchronní procesy. Za druhé je to jediný jazyk, který lze bez výhrad nazvat modulární.

Takový příklad je prostě nutný, aby se vyvrátil poměrně rozšířený mýtus, že Ada je velký, složitý a „těžký“ jazyk, vhodný pouze pro psaní supervelkých a superkomplexních systémů. Ve skutečnosti lze Ada použít k vývoji malých a středně velkých programů se stejným úspěchem jako moderní klony jazyků C, Pascal, BASIC a Java. Takže klasický příklad programu „Ahoj, světe!“ vypadá takto v Ada:

Je snadné vidět, že kód Ada je podobný kódu Pascal, který byl vybrán jako jeho prototyp. První řádek popisuje vztah tohoto zkompilovaného modulu s ostatními moduly - označuje, že rutina Hello_World by měla být zkompilována společně s modulem Ada.Text_IO, který je součástí předdefinované knihovny.

Následující program definuje dva asynchronní procesy:

Část lokálních deklarací procedury Tasking_Example popisuje úlohu Outputer (řádek 6; řádky 8 až 17 obsahují tělo této úlohy). Když řízení v procesu odpovídajícím proceduře Tasking_Example dosáhne řádku 20, spustí se proces odpovídající úloze Outputter před provedením tohoto prvního příkazu a poté oba procesy žijí a provádějí se asynchronně nezávisle na sobě. Provedení příkazu delay (řádky 14 a 20) spočívá v pozastavení odpovídajícího procesu na určený počet sekund. Proces Tasking_Example je tedy pozastaven na 20 sekund, zatímco proces Outputter zahájí tisk hodnot přírůstkových čítačů a po vytištění každé hodnoty se na jednu sekundu zastaví. Po 20 sekundách proces Tasking_Example nastaví příznak Dokončeno na hodnotu true, čímž se smyčka v procesu výstupu ukončí. Specifikace Finished proměnné jako atomického datového objektu (řádek 4) znemožňuje současné čtení a změnu hodnoty této proměnné.

Níže je šablona funkce, která vám umožní přidat dvě jednorozměrná pole po komponentech. Tuto šablonu lze přizpůsobit vlastní typ, což je jednorozměrné pole, pro které jsou pro jeho složky definovány operace přiřazení a sčítání („sčítání“ nemusí být aritmetickým sčítáním).

Řádky 1-6 obsahují deklaraci vlastní funkce a řádky 8-20 obsahují její tělo. Parametr nastavení je v podstatě libovolný jednorozměrný regulární typ s nespecifikovaným rozsahem indexu (řádek 4), o kterém je známo pouze to, že jeho typ komponenty je libovolný, ale operace přiřazení je definována pro komponenty (řádek 2), typ indexu je libovolný diskrétní (řádek 4) . Protože budeme přidávat dvě pole po komponentách, potřebujeme vědět, jaká operace sčítání je pro daný typ komponenty. Protože se jedná o libovolný typ, jsme nuceni předat doplnění pro typ komponenty jako formální parametr nastavení (řádek 5).

V těle funkce nejprve zkontrolujeme, zda jsou délky operandů stejné (řádek 12), jinak nemá komponentní sčítání smysl. Shoda délek operandů nezaručuje shodu rozsahů indexů, takže ve smyčce přes rozsah indexu prvního argumentu (řádek 15) musíme pokaždé vypočítat index odpovídající komponenty druhého argumentu. U typu Index to udělat nemůžeme, protože o něm víme pouze to, že je diskrétní, takže přejdeme od hodnoty diskrétního typu k jeho ordinálnímu číslu (atributu?Pos), vypočítáme potřebný posun pro ordinální číslo a vrátit se na odpovídající hodnotu typu Index (atribut?Val).

Všimněte si, že parametry (vlastní) funkce "+" Left a Right jsou deklarovány jako typ Arr, jehož rozsah indexu není specifikován. Left a Right jsou však formální parametry, na jejichž místo se při volání (výsledku konkretizace) funkce „+“ dosadí konkrétní pole se známými rozsahy indexů. V těle funkce „+“ používáme atributy pole (?Range, ?First, ?Length) k získání informace o rozsahu jeho indexu z objektu.

Proč Ada?

Výběr jazyka pro softwarový projekt býval ryze technickou záležitostí. Dnes se to stalo záležitostí strategického významu s dalekosáhlými důsledky pro úspěch projektu. Uveďme některé z důvodů, proč byl jazyk Ada zvolen pro implementaci softwarových projektů různými společnostmi nebo byl povinně používán ve výběrových řízeních.

  • Přání zvýšit spolehlivost vyvíjeného systému, protože softwarové vady mohou mít vážné důsledky pro lidské zdraví, ekonomiku, životní prostředí atd. (Ada má vestavěné funkce spolehlivosti.)
  • Touha snížit náklady na vývoj a údržbu systému.
  • Dostupnost mezinárodních standardů a dostupnost jazykových kompilátorů pro téměř jakoukoli platformu.
  • Výhody disciplinovaného přístupu k vývoji softwaru nabývají na významu zejména s tím, jak se zvětšuje velikost a složitost softwaru.
Ada a Si

Při provádění srovnávacích analýz populárních jazyků bylo rozbito tolik kopií, že dnes je toto téma často klasifikováno jako „náboženské války“. Omezíme se proto pouze na odkaz na známý článek, který přináší řadu výmluvných závěrů.

  1. Vývoj programů v jazyce Ada stojí o 60 % méně než podobné softwarové projekty implementované v C.
  2. Program v Ada má 9krát méně vad než program v C; program C++ má ještě nižší vlastnosti než program C.
  3. je preferován před C pro zkušené i nezkušené programátory, stejně jako pro programátory s maximálním i minimálním hodnocením ve své skupině.
  4. Složitost učení jazyka Ada není vyšší než složitost učení C.
  5. Programy Ada jsou spolehlivější než programy C.

Pro ilustraci těchto závěrů uvádíme příklad vývoje palubního softwaru pro letoun C-130J v souladu s požadavky úrovně A normy DO-178B. Kvalita kódu byla přitom 10krát vyšší než průměr softwaru úrovně A. Produktivita práce se zvýšila čtyřnásobně ve srovnání se srovnatelnými softwarovými projekty.

Ada a Java

Microsoft byl nucen zahrnout licenční smlouvy pro vaše operační systémy následující odstavec ( www.microsoft.com/msdownload/ieplatform/ie/license.txt): "Poznámka k podpoře jazyka Java... Technologie Java není odolná vůči chybám a není určena... pro použití v řídicích systémech v reálném čase... ve kterých by selhání jazyka Java mohlo způsobit smrt, zranění, nebo vážné poškození infrastruktury nebo životního prostředí. Společnost Sun Microsystems, Inc. Microsoft byl požádán o zveřejnění tohoto varování."

Upozorníme také na články, které demonstrují výhody jazyka Ada oproti Javě.

"pekelné" mýty

Poměrně často je Ada spojována se sadou přetrvávajících mylných představ, které brání jak šíření jazyka, tak vědomé volbě Ady jako jazyka implementace projektu.

Ada je mrtvý jazyk, teď v něm nikdo neprogramuje. Ve skutečnosti Ada sebevědomě zaujímá výklenek velkých vestavěných systémů se zvýšenými požadavky na spolehlivost. Ve srovnání s „krabicovými“ produkty pro Windows nejsou takové systémy tak nápadné, protože buď existují v jedné kopii (k čemu slouží replikace programu, který řídí pohyb vlaků metra), nebo jsou distribuovány jako součást systému v které jsou postaveny (palubní software).

Ada je jazyk určený výhradně pro vojenské aplikace. Ada byla skutečně vyvinuta za účasti amerického ministerstva obrany, ale neexistují žádné technické, administrativní ani jiné důvody, které by bránily využití Ady pro vývoj civilních systémů. Počet „civilních“ projektů založených na tomto jazyce je dnes srovnatelný s počtem „vojenských“ projektů.

Ada je příliš velký a složitý jazyk na to, aby se dal použít v malém projektu. Objem a složitost všech moderních průmyslových jazyků jsou téměř stejné, a abychom se o tom přesvědčili, stačí jednoduše porovnat objem jejich popisů. Tento mýtus pochází z počátku 80. let, kdy byla Ada srovnávána s Pascalem, Fortranem 77 nebo BASICem.

Je jen málo programátorů, kteří znají Adu, naučit se jazyk od nuly vyžaduje nadměrné úsilí a čas. Ve skutečnosti je skutečným problémem najít specialisty, kteří rozumí specifikům vestavěných systémů a jsou schopni tvořit kvalitní programy pro ně. Například BAE, jeden z aktivních uživatelů jazyka Ada, nevyžaduje, aby kandidáti znali tento jazyk; místo toho se hledají lidé, kteří jsou obeznámeni s vestavěnými systémy a procesy pro vytváření softwaru průmyslové kvality. Po najmutí takových lidí trvá pouhé dva týdny naučit je jazyk pekla.

Náš osobní zkušenost ukazuje, že programátorům obeznámeným s nějakou příchutí Pascalu stačí pár dní na to, aby začali s vývojem jednoduché programy na Adu.

Stávající technologie Ada jsou neúčinné; Překladače i kód, který generují, se vyznačují nízkým výkonem. Tento mýtus také pochází z první poloviny 80. let, kdy se objevily první implementace Ada, které ve skutečnosti jen potvrdily „teorém o existenci překladače Ada, který odpovídá standardu“. Stačí provést řadu jednoduchých experimentů naprogramováním nějakého modelového problému v Ada, Pascalu a C/C++ a poté porovnat (se srovnatelnými parametry kompilátoru) rychlost kompilace, objem generovaného kódu a rychlost jeho provádění. jistý, že neexistují žádné specifické neefektivnosti, charakteristické pro Adu, prostě neexistuje. Lze také poznamenat, že programovací systém GNAT s objemem zdrojového textu větším než 40 MB je z 90 % implementován v Adě a jeho vybudování ze zdrojových textů (v průběhu se třikrát zkompiluje) na moderním PC zabere ne více než půl hodiny.

Stávající implementace Ada jsou extrémně drahé. To je pravda, ale mějte na paměti, že existuje veřejně dostupná verze programovacího systému GNAT, kterou lze volně a legálně získat ze softwarového úložiště NYU ( ftp://cs.nyu.edu/pub/gnat) spolu se zdrojovými texty

Sýr zdarma a jak se vyhnout pasti na myši

GNAT (GNu Ada Translator) je multiplatformní implementace jazyka Ada, která existuje téměř na všech moderních průmyslových platformách a podporuje generování kódu pro populární vestavěné architektury. GNAT ( www.gnat.com) plně implementuje standard Ada, včetně těch knihoven, které jsou standardem klasifikovány jako volitelné. Kromě samotného překladače Ada obsahuje GNAT nástroje, které zahrnují vyvinuté integrované vývojářské prostředí a vícejazyčný grafický debugger, který umožňuje mimo jiné zkoumat chování programů s asynchronními procesy. Překladač a související nástroje lze používat jednotlivě a volat je z příkazový řádek a v rámci integrovaného grafického vývojového prostředí pro programy Ada. Všechny komponenty GNAT, včetně vývojového prostředí, mají stejné rozhraní na všech platformách. Kromě plné implementace nástrojů popsaných standardem nabízí GNAT bohatou sadu rozšíření povolených standardem. GNAT je implementace Ada ve vícejazyčném programovacím systému gcc, který se skládá ze sady front-end kompilátorů pro různé vstupní jazyky se společným generátorem kódu, což výrazně zjednodušuje vývoj programů obsahujících komponenty implementované v různých programovacích jazycích.

GNAT byl od samého počátku vyvíjen a distribuován pod licencí GPL. S GPL se bohužel pojí také spousta mýtů. Mnozí se tedy domnívají, že programy pod licencí GPL jsou vyvíjeny neorganizovanými skupinami nadšenců a distribuovány zcela zdarma; Výsledkem je, že jak spolehlivost, tak funkčnost těchto programů zanechávají mnoho přání a neumožňují jejich použití v žádných seriózních projektech. V případě GNAT to zdaleka není pravda. Chcete-li si to ověřit, stačí se podívat na seznam společností, které uzavřely smlouvy o technické podpoře s jejich vývojáři: Boeing, British Aerospace, Lockheed, Ericsson, SAAB, Avionics atd.

Volné poskytování demoverzí je běžnou praxí mnoha softwarových vývojářů. GNAT je jiný v tom, že volně dostupná veřejná verze je absolutně plná verze technologie, bez jakýchkoli právních nebo technických omezení jejího použití. Na základě veřejných verzí GNAT byla úspěšně realizována řada seriózních projektů. Software přistávacího modulu Beagle 2 evropské automatické stanice Mars Express, který právě míří na Mars ( www.beagle2.com/index.htm), automatizovaná dokumentační komunikační stanice Ministerstva obrany Ruské federace ( www.ada-ru.org/prj_doc.html). Jedinou nevýhodou veřejných verzí je, že pro ně vývojář neposkytuje technickou podporu.

Závěr

Abychom to shrnuli, jazyk Ada poskytuje vývojářům ideální kombinaci integrity, konzistence, spolehlivosti a efektivity. Jazyk podporuje kreativní kreativitu a inovace a zároveň poskytuje disciplínu a průmyslovou úroveň vývoje softwaru potřebnou k implementaci softwarových systémů velkého významu.

Literatura
  1. Benjamin Brosgol, Úvod do Ady 95. www.embedded.com/story/OEG20021211S0034
  2. Stephen Zeigler, Porovnání nákladů na vývoj C a Ada. www.adaic.com/whyada/ada-vs-c/cada_art.html www.ada-ru.org. Na webových stránkách lze nalézt komentovanou bibliografii knih o jazyce Ada vydaných v ruštině

(Ada 2005), Eiffel (Ada 2012)

C++, kaple, "Drago". , Eiffel, "Griffin". , Java , Nim , padák za člunem , PL / SQL , PL / PgSQL , ruby ​​​​, Seed7 , "SPARforte" . , Sparkel , SQL / PSM , VHDL

Mezi vlastnosti Ada patří: silné psaní, modulární mechanismy (balíčky), kontrola za běhu, paralelní zpracování (úlohy, synchronní předávání zpráv, chráněné objekty a nedeterministické výběrové příkazy), zpracování výjimek a generika. Ada 95 přidala podporu pro objektově orientované programování, včetně dynamického odesílání.

Adina syntaxe minimalizuje volbu způsobu provádění základních operací a upřednostňuje anglická klíčová slova (jako „nebo“ a „a potom“) před symboly (jako jsou „||“ a „&&“). Ada používá základní aritmetické operátory "+", "-", "*" a "/", ale vyhýbá se použití jiných symbolů. Bloky kódu jsou odděleny slovy jako „deklarovat“, „začátek“ a „konec“, kde za „koncem“ (ve většině případů) následuje identifikátor bloku, který uzavírá (např. jestli je to konec, jestli... , smyčka... konec cyklu). V případě podmíněných bloků se tomu vyhnete stále roztrhaný, které se mohou spárovat s nesprávně vnořenými příkazy if v jiných jazycích, jako je C nebo Java.

Ada je navržena pro vývoj velmi rozsáhlých softwarových systémů. Balíčky Ada lze sestavit samostatně. Specifikace balíčku Ada (rozhraní balíčku) lze také zkompilovat samostatně bez kontroly shody. To umožňuje odhalit problémy brzy během fáze návrhu, ještě před zahájením implementace.

Je podporováno velké množství kontrol během kompilace, aby se předešlo chybám, které nebudou zjištěny až za běhu v některých jiných jazycích nebo které vyžadují přidání explicitních kontrol do zdrojového kódu. Syntaxe například vyžaduje explicitní název bloku, aby se zabránilo chybám v důsledku neshodných koncových značek. Následné silné psaní vám umožňuje detekovat přítomnost standardních softwarových chyb (špatné parametry, narušení rozsahu, neplatné odkazy, neshodné typy atd.) buď v době kompilace, nebo jinak za běhu. Vzhledem k tomu, že souběžnost je součástí specifikace jazyka, kompilátor může v některých případech detekovat potenciální uváznutí. Kompilátory také obvykle kontrolují překlepy v identifikátorech, viditelnost balíku, nadbytečné deklarace atd. a mohou poskytovat varování a Užitečné tipy o tom, jak opravit chybu.

Ada také podporuje runtime kontroly k ochraně proti nepřidělenému přístupu do paměti, chybám přetečení vyrovnávací paměti, narušení rozsahu, chybám mimo sekvenci, chybám přístupu k poli a dalším detekovatelným chybám. Tyto kontroly lze v zájmu efektivity provádění deaktivovat, ale často je lze efektivně sestavit. Obsahuje také nástroje, které pomáhají ověřit program. Z těchto důvodů je Ada široce používán v kritických systémech, kde jakákoli anomálie může vést k velmi vážným následkům, jako je náhodná smrt, zranění nebo vážné finanční ztráty. Příklady systémů, které používají Ada, zahrnují avioniku, řízení letového provozu, železnice, bankovnictví, vojenské a vesmírné technologie.

Dynamická správa paměti Ada je na vysoké úrovni a typově bezpečná. Ada nemá obecné nebo netypizované ukazatele; a implicitně nedeklarujte žádný typ ukazatele. Místo toho musí veškerá dynamická alokace a dealokace paměti probíhat prostřednictvím explicitně deklarované typy přístupu. Každý typ přístupu má odpovídající skladovací bazén, který zpracovává nízkoúrovňové detaily správy paměti; programátor může použít buď výchozí úložiště, nebo definovat nové (to platí zejména pro nejednotný přístup k paměti). Můžete dokonce deklarovat několik různé typy přístupy, které všechny označují stejný typ, ale používají různé fondy úložiště. Kromě toho poskytuje jazyk dostupnost šeků, a to jak v době kompilace, tak v době běhu, což to zajišťuje náklady na přístup nemůže vymazat typ objektu, který určuje.

Přestože sémantika jazyka umožňuje automatické shromažďování odpadků nepřístupných objektů, většina implementací jej ve výchozím nastavení nepodporuje, protože to povede k nepředvídatelnému chování na systémech v reálném čase. Ada podporuje omezenou formu regionu založenou na správě paměti; Kreativní využití fondů úložiště navíc může poskytnout omezenou formu automatického shromažďování odpadu, protože zničení fondu úložiště také zničí všechny objekty ve fondu.

příběh

Pokračuje práce na vylepšování a aktualizaci technického obsahu programovacího jazyka Ada. Technická oprava k Ada 95 byla zveřejněna v říjnu 2001 a hlavní dodatek, ISO/IEC 8652:1995/Amd 1:2007 byl zveřejněn 9. března 2007. Na konferenci Ada-Europe 2012 ve Stockholmu, Ada Resource Association (ARA) a Ada -Europe oznámily dokončení návrhu Nejnovější verze Programovací jazyk Ada a prezentace Referenční příručku Mezinárodní organizaci pro normalizaci (ISO) ke schválení. ISO/IEC 8652:2012 byla zveřejněna v prosinci 2012.

Mezi další relevantní normy patří ISO 8651-3:1988 systémy zpracování informací, počítačová grafika, Vazby jazyka Graphics Kernel System (GKS) - Část 3: Ada .

Jazykové konstrukce

"Ahoj světe!" v Ada

Typickým příkladem takového jazyka v syntaxi je program Hello world: (hello.adb)

s Ada.Text_IO ; použijte Ada.Text_IO ; procedura Hello is begin Put_Line ("Ahoj, světe!" ); konec Ahoj ;

Tento program lze zkompilovat pomocí bezplatného a otevřeného kompilátoru GNAT spuštěním

gnatmake hello.adb

Typy dat

Typový systém Ady není založen na sadě předdefinovaných primitivních typů, ale umožňuje uživatelům deklarovat své vlastní typy. Toto tvrzení zase není založeno na vnitřní reprezentaci typu, ale na popisu cíle, kterého má být dosaženo. To umožňuje kompilátoru určit vhodnou velikost paměti pro daný typ a zkontrolovat přítomnost narušení definice typu v době kompilace a běhu (tj. narušení rozsahu, přetečení vyrovnávací paměti, konzistence typu atd.). Ada podporuje číselné typy definované v rozsahu, modulo typy, agregační typy (záznamy a pole) a typy výčtů. Typy přístupu definují odkaz na instanci zadaného typu; netypované ukazatele nejsou povoleny. Speciální typy poskytované v jazyce typu úlohy a chráněné typy.

Datum může být například reprezentováno jako:

typ Typ_den je rozsah 1 .. 31 ; typ Typ_měsíce je rozsah 1 .. 12 ; typ Typ_roku je rozsah 1800 .. 2100 ; typ Hodiny je mod 24 ; typ Den v týdnu je (pondělí, úterý, středa, čtvrtek, pátek, sobota, neděle); typ Datum je záznam Den : Typ_dne ; Měsíc: Typ_měsíce; Rok: Typ_roku; konec záznamu;

Typy lze dále upřesnit deklarováním podtypů:

podtyp Working_Hours je Rozsah hodin 0 .. 12 ; -- maximálně 12 hodin práce denně podtyp Working_Day je rozsah pracovních dnů pondělí .. pátek ; -- Dny do práce Work_Load : konstantní pole (Working_Day ) of Working_Hours -- implicitní deklarace typu := (pátek => 6, pondělí => 4, ostatní => 10); -- vyhledávací tabulka pro pracovní dobu s inicializací

Typy mohou mít modifikátory jako např omezené, abstraktní, soukromé atd. K soukromým typům lze přistupovat a omezené typy lze upravovat nebo kopírovat pouze v rámci balíčku, který je pouze definuje. Ada 95 dodává další funkce pro objektově orientované rozšíření typu.

Kontrolní struktury

Ada také nabízí chráněné objekty pro vzájemné vyloučení. Chráněné objekty jsou navrženy jako monitor, ale místo stavových proměnných pro signalizaci používají stráže (podobně jako podmíněné kritické oblasti). Hlídané objekty kombinují zapouzdření dat a bezpečné vzájemné vyloučení z monitorů, stejně jako hlídání vstupu z podmíněně kritických oblastí. Hlavní výhodou oproti klasickým monitorům je to, že pro předávání signálů nejsou vyžadovány podmínkové proměnné, což zabraňuje potenciálnímu uváznutí kvůli nesprávné sémantice zamykání. Stejně jako úkoly je securable vestavěný omezený typ a má také deklarační část a tělo.

Chráněný objekt se skládá ze zapouzdřených osobních údajů (k nimž lze přistupovat pouze v rámci chráněného objektu), jakož i postupů, funkcí a záznamů, u nichž je zaručeno, že se vzájemně vylučují (s jedinou výjimkou funkcí, které musí být postranní). bez efektu, a může pracovat současně s jinými funkcemi). Úloha volající chráněný objekt je zablokována, pokud na stejném chráněném objektu aktuálně běží jiná úloha, a uvolněna, když tato jiná úloha opustí chráněný objekt. Blokované úlohy jsou zařazeny do fronty v chráněném objektu v objednaném čase příjezdu.

Data chráněného objektu jsou podobná procedurám, ale navíc mají bezpečnostní. Pokud se strážce vyhodnotí jako nepravda, volající úloha je zablokována a přidána do fronty daného záznamu; Nyní lze do zabezpečeného objektu povolit další úlohu, protože v zabezpečeném objektu aktuálně neběží žádná úloha. Strážci jsou přeceňováni vždy, když úkol opustí hlídané zařízení, protože je to jediný případ, kdy lze změnit hodnocení stráží.

Nahrávání hovorů může být vyžádáno pro další záznamy se stejným podpisem. Úloha, která je znovu zařazena do fronty, je zablokována a přidána do cílové vstupní fronty; to znamená, že chráněný objekt je uvolněn a umožňuje přijetí dalšího úkolu.

Vybrat operátor v Ada může být použit k implementaci neblokujících přihlašovacích volání a přijímá, nedeterministicky vybírající záznamy (také hlídané), timeouty a přeruší.

Následující příklad ilustruje některé koncepty paralelního programování v Ada.

s Ada.Text_IO ; použijte Ada.Text_IO ; postup Provoz je typu Airplane_ID je rozsah 1. . 10; -- 10 letadel typ úlohy Letadlo (ID: Airplane_ID); -- úloha představující letadla, s ID jako inicializačním parametrem typ Airplane_Access je přístupový letoun ; -- referenční typ na typ chráněný letounem Dráha je – sdílená ranvej (chráněná pro umožnění souběžného přístupu) záznam Assign_Aircraft (ID : Airplane_ID ); -- všechny záznamy se vzájemně vylučují záznam Cleared_Runway(ID: Airplane_ID); záznam Wait_For_Clear ; private Clear : Boolean := True ; -- chráněná soukromá data - obecně více než jen vlajka... konec dráhy; typ Runway_Access je přístup ke všem Runway ; -- úkol řídícího letového provozu přijímá požadavky na vzlet a přistání typ úlohy Controller (My_Runway : Runway_Access ) je -- položky úkolů pro synchronní předávání zpráv záznam Požadavek_vzlet (ID : in Airplane_ID ; Vzlet : mimo Runway_Access ); záznam Request_Approach (ID : v Airplane_ID ; Approach : out Runway_Access ); endController; -- přidělení instancí Runway1: aliased Runway; -- vytvořit instanci dráhy Controller1: Controller (Runway1 " Access); -- a ovladač pro jeho správu ------ten implementace výše uvedených typů ------ chráněné těleso Dráha je vstup Assign_Aircraft (ID : Airplane_ID ), když je Clear -- strážce vstupu - úkoly volání jsou blokovány, dokud není podmínka splněna begin Clear := False ; Put_Line (ID letadla "Obrázek (ID) & "na dráze"); konec; záznam Vyčištěná_dráha (ID: ID_letadla), když není Vymazáno, začíná Vymazat := True; Put_Line (ID letadla "Obrázek (ID) & "uvolněná dráha"); konec ; záznam Wait_For_Clear when Clear je begin null ; -- zde není třeba nic dělat - úkol lze zadat pouze v případě, že platí "Vymazat". konec ; konec dráhy; tělo úlohy Řadič je začátek smyčky My_Runway . Wait_For_Clear ; - počkejte, až bude dráha k dispozici (blokování) vybrat - počkejte na dva typy požadavků (podle toho, který je spustitelný jako první) když Request_Approach " count = 0 => -- příkaz guard - přijmout pouze v případě, že na Request_Approach nejsou ve frontě žádné úlohy accept Request_Takeoff (ID: in Airplane_ID; Takeoff: out Runway_Access) do – začátek synchronizované části My_Runway. Přiřadit_Letadlo(ID); - rezervní dráha (potenciálně blokující hovor, pokud je chráněný objekt obsazen nebo je strážce vstupu nepravdivý) Vzlet := My_Runway ; -- přiřaďte hodnotu parametru "out", aby bylo letadlu sděleno, která dráha end Požadavek_Vzlet ; -- konec synchronizované části nebo přijměte Request_Approach (ID: v Airplane_ID; Approach: out Runway_Access) do My_Runway. Přiřadit_Letadlo(ID); Approach := My_Runway ; end Request_Approach ; nebo -- ukončit, pokud nezbývají žádné úkoly, kdo mohl volat vypovědět ; konec vybrat ; koncová smyčka; konec ; úkolové tělo Letadlo je Rwy : Runway_Access ; začít Controller1 . Požadavek_vzlet(ID, Rwy); -- Toto volání blokuje, dokud úloha Controller nepřijme a nedokončí blok přijetí Put_Line (ID letadla " Obrázek (ID ) & "vzlétající..." ); zpoždění 2.0 ; Rwy . Cleared_Runway (ID ); -- volání nebude blokováno, protože "Clear" v Rwy je nyní nepravdivé a v chráněném objektu by neměly být žádné další úkoly zpoždění 5,0 ; -- trochu proletět... loop select -- zkuste požádat o dráhu Controller1 . Request_Approach(ID, Rwy); -- toto je blokovací volání - poběží na ovladači, který dosáhne bloku přijetí a vrátí se po dokončení výstup ; -- pokud se hovor vrátí, máme volno pro přistání - opusťte vybraný blok a pokračujte... nebo zpoždění 3.0 ; -- timeout - pokud žádná odpověď do 3 sekund, udělejte něco jiného (vše v následujícím bloku) Put_Line (ID letadla "Obrázek (ID) & "ve vzoru držení"); -- jednoduše vytiskněte zprávu end select ; konec smyčky ; zpoždění 4.0 ; -- proveďte přiblížení na přistání... Put_Line (ID letadla " Obrázek (ID) & " se dotklo dolů!"); Rwy. Cleared_Runway(ID); -- oznamte dráze, že jsme zde skončili. konec ; New_Airplane : Airplane_Access ; začít pro I v Airplane_ID " Smyčka vzdálenosti -- vytvořit několik úkolů v letadle Nove_letadlo := nove letadlo (I ); -- spustí se ihned po vytvoření zpoždění 4,0 ; koncová smyčka; konec provozu ;

Pragmata

Pragma je direktiva kompilátoru, která předává informace kompilátoru, aby umožnila specifickou manipulaci s kompilovaným výstupem. Některé pseudokomentáře jsou zabudovány do jazyka, zatímco jiné jsou implementovány.

Příklady obecné použití Pragmas kompilátoru zakáže určité funkce, jako je kontrola typu za běhu nebo kontrola vázaná na index pole, nebo dá kompilátoru pokyn, aby místo volání funkce vložil kód objektu (v C/C++ to dělá s inline funkcemi).

  • APSE - Specifikace pro programovací prostředí pro podporu vývoje softwaru v Ada
  • Profil Ravenscar je podmnožinou multitaskingových funkcí Ada navržených tak, aby poskytovaly kritické zabezpečení kritických počítačů v reálném čase.
  • SPARK (programming language) - programovací jazyk sestávající z velmi omezené podmnožiny Ada, anotovaných metainformacemi popisujícími požadované chování komponenty a individuální požadavky na běh programu

Sergej Bobrovskij

Historie tohoto jazyka nezačíná v roce 1975, kdy se americké ministerstvo obrany (DoD) rozhodlo začít vyvíjet jednotný programovací jazyk pro americké ozbrojené síly a následně pro celé NATO. Jeho historie začíná jménem, ​​neboť Ada se jmenuje Augusta Ada Lovelace, považovaná za první programátorku, dceru anglického básníka Byrona a jisté Anabelly Milbank, se kterou se její manžel měsíc po narození dcery navždy rozešel, který se narodil 10. prosince 1815. Obecně je historie kybernetiky zahalena temným tajemstvím a jen z útržkovitých faktů lze soudit, že zakladateli této vědy byli v posledních dvou stech letech různí mystikové a okultisté, počínaje Augustem de Morganem, jedním z Adiných učitelů. , a konče spolupracovníky Norberta Wienera, který studoval metody utváření veřejného mínění a jeho manipulace.

Poté, co Charles Babbage postavil svůj mechanický počítač, Ada napsal první program pro výpočet Bernoulliho koeficientů. Následně rozvinula skutečnou teorii programování, představila koncept cyklu a několik dalších klíčových pojmů, které dnes studenti kybernetických fakult studují téměř doslovně! Dnes je Ada každému známá jako první programátor - a to je vše, ale jeden by se divil, kde má mladá dívka takové jedinečné schopnosti? Sama na tuto otázku otevřeně odpověděla: „Přísahám ďáblu, že do 10 let budu vysávat určité množství životní krve ze záhad Vesmíru, a to způsobem, který obyčejná smrtelná mysl a rty nezná jaká děsivá energie a síla leží stále nevyužita v mém malém pružném stvoření...“. Na počítačový projekt však nebyli žádní sponzoři - ještě nebyly žádné jaderné střely a Ada, která ztratila všechno své jmění na závodech a dostala se do špinavého příběhu, zemřela ve věku 37 let, stejně jako její slavný otec.

Zda tedy měli Američané Adu tolik chválit, když její jméno použili jako název pro tak ambiciózní projekt, je vysoce kontroverzní otázkou.

Vraťme se ale k historii jazyka samotného. Pět let po zahájení projektu vybraly stovky odborníků ze 17 možností jediný jazyk, který splňoval požadavky ML, vyvinutý malým týmem pod vedením talentovaného vědce Jeana Ishbii. Konečná verze mezinárodní normy ISO 8652:1987 byla zveřejněna v roce 1987. Podle oficiálních zpráv se na tvorbě a zdokonalování tohoto jazyka podíleli všichni nejlepší programátorští specialisté na světě, což ovšem vyvolává pochybnosti. Potvrzuje to například absence konceptu objektu v původní verzi Ady a neúčast sovětských programátorů z pochopitelných důvodů na tomto projektu.

Do rozvoje infrastruktury Ada po celém světě byly investovány desítky miliard dolarů. To vedlo ke vzniku ambiciózních výroků jako „20. století projde znamením Ady“, ale jak už to bývá, život dal vše na své místo.

Bohužel pro americké ministerstvo obrany (a tedy naštěstí pro americké „potenciální protivníky“) byl vývoj jasného standardu pro tento jazyk a vytvoření efektivních kompilátorů dokončeno přesně v době (začátek 80. let), kdy softwarový průmysl se začal na obzoru objevovat nový jazyk C++ s objektovou ideologií. Nyní je těžké říci, co cítil vývojový výbor Ady, když viděl, jak rostla popularita C++ a starého, dobře zapomenutého paradigmatu myšlení založeného na objektech. Ale přidělené prostředky už byly vyčerpány, standard byl vytvořen a nebylo cesty zpět.

Struktura Ady je velmi podobná Pascalu a přesněji Module. Syntaxe většiny výroků a popisů je téměř totožná se syntaxí Moduly, i když se objevila téměř ve stejnou dobu jako Ada a těžko říci, kdo koho ovlivnil, pokud vůbec. Konkrétně v Adě přibylo poměrně hodně různých rozšíření, takže tento jazyk nelze ve srovnání s Pascalem označit za kompaktní. Co do počtu možností se spíše podobá PL/1. Ale protože tvůrci Ady kladli hlavní důraz na splnění přání amerických „prvních oddělení“, byly prostředky pro uzavírání dat (viditelnost) a možnost vytvářet samostatné bloky pouze pomocí specifikací (rozhraní popisů modulů) jiných vývojářů. na svou dobu nejpokročilejší. Například programátor, který skutečně napsal kód pro výpočet dráhy letu řízené střely, neměl ponětí, kde a pro jaké účely bude jeho modul použit, ačkoli měl přístup k požadovaným specifikacím ostatních zaměstnanců a mohl odladit svou sekci kód bez problémů. Vzhledem k přísné diferenciaci přístupu k různým úrovním specifikací je někdy dokonce nemožné určit, proč a jakými prostředky bude daná procedura volána. Tato touha po nezávislém vývoji programu však vedla k velmi složitému systému vztahů mezi specifikacemi modulů a výskytem jakýchsi „děr“, které by mohly způsobovat vedlejší efekty, jejichž přítomnost však považovalo za užitečnou i Ministerstvo obrany USA. .

Prvky typování dat byly výrazně posíleny a samotné typy byly více formalizovány. Všechny I/O funkce byly odstraněny ze standardní syntaxe a zpracování výjimek se stalo nedílnou součástí jazyka. Síla řídicích struktur byla navíc přivedena na maximum, což z Ady udělalo nejpokročilejší mezi ostatními jazyky podobnými Pascalu.

Borland brzy vydal svůj Turbo Pascal, ve kterém byl zabudován koncept modulu, a přiblížil svou verzi Pascal ve schopnostech Adě, ale naštěstí nebyly provedeny žádné další pokusy o vytvoření neobjektivních programovacích jazyků 3. určené pro rozvoj velmi velkých projektů. Proto Ada znamenala konec dlouhé řady jednoduchých procedurálních jazyků, počínaje Fortranem a Algolem. V Pekle bylo totiž ztělesněno vše, co si bylo možné v rámci ideologie strukturovaného programování představit. Pak explodovalo objektové programování a Ada zmizela v pozadí.

Tento jazyk však stále zaujímá jedno místo, ve kterém zatím nemá obdoby. Kromě samostatné kompilace modulů a zajištění hierarchického utajení specifikací tento jazyk implementoval takovou vlastnost, jako je podpora paralelního programování. Provedeno na víceméně vysoké úrovni v ALGOL-68, poté vyvinuto v Modulu-2, bylo začleněno do velmi výkonných nástrojů Ada, takzvaných úloh, které lze provádět nezávisle na sobě na paralelních počítačích. To vedlo ke zrodu celé programovací ideologie založené na úkolech, které bylo možné provádět „pseudoparalelně“ – na počítači s jedním procesorem. Řešený problém byl zároveň rozdělen do souboru současně pracujících postupů, které na sebe nezávisle navazovaly. Trochu to připomínalo způsob řešení problému v Prologu: prostě se popíše určitý virtuální svět, ten se pak jakoby „uvede“ do provozu a řešení se najde samo.

O to překvapivější je, že americké ministerstvo obrany z toho či onoho důvodu opustilo objektivní ideologii, která byla dokonale ztělesněna v

60. let v Simula-67 a pravděpodobně toho nejednou litoval. Pravda, do jazyka Ada byla zavedena určitá žalostná náhrada za řadu možností, které poskytuje objektově orientované programování - tzv. šablony, tedy procedury s parametry nedefinovaných typů. Ale přesto byly hlavními výhodami Ady, které jí dnes umožňují odolat náporu rozvinutějších jazyků, kromě výkonného financování vestavěná podpora pro paralelní provádění úkolů a výkonné prostředky pro koordinaci jejich interakce. Je třeba poznamenat, že hlavním zaměřením Ady nejsou účetní automatizační systémy na americkém ministerstvu obrany, ale čistě bojové mise, jako je například mikroprocesorová navigace naváděcí střely v reálném čase, kdy je nutné současně zpracovávat průběžně přijímané informace. z řady různých senzorů. Dříve byly takové úlohy napsány v assembleru, což vedlo k mnoha chybám a potížím s údržbou. Pro takové úkoly se Ada samozřejmě dokonale hodí.

Ada si však nadále udržuje pozici dobrého nástroje pro vývoj velkých softwarových systémů. Je pravda, že nyní hlasy na podporu tohoto jazyka znějí tišeji, asi takto: "Ada alespoň není o nic horší než C." Americké ministerstvo obrany, s přihlédnutím ke své hlavní chybě – nedostatku objektů, v souladu s moderními požadavky na technologii vývoje programů vyvinulo novou jazykovou normu ISO/IEC 8652:1985(E). Popisuje verzi jazyka Ada95 (nebo Ada9X). Nejzajímavější na tom je, že tato verze je prvním objektově orientovaným programovacím systémem na světě, pro který byl zřejmě na objednávku zaveden mezinárodní standard (s C++ to zatím nefunguje). Kromě toho jazyk zlepšil systém pro koordinaci viditelnosti dat ve specifikacích modulů a přidal nástroje pro zlepšení efektivity paralelních úloh.

Americké ministerstvo obrany na svůj drahý nápad docela závidí a dokonce si zaregistrovalo slovo „Ada“ jako svou ochrannou známku. Později se však Moskevská oblast rozhodla místo ochranné známky používat „Ada“ jako svou interní certifikovanou značku. Americké ministerstvo obrany není se vzhledem nijak zvlášť spokojeno komerční verze tohoto jazyka. Nikdo samozřejmě nemá právo zakazovat vám napsat si vlastní kompilátor, ale aby získal komerční uznání, musí splňovat vojenský standard a testování provádí pouze výbor AJPO Ministerstva obrany USA , který velmi přísně kontroluje shodu kompilátoru s mnoha požadavky, včetně, samozřejmě, čistě politických.

Přesto lze různé verze Ady získat, jak už to u programovacích jazyků bývá, zdarma, tedy za nic, ale ne pirátsky, ale prostě freewarové verze a samozřejmě za peníze.

Z volně distribuovaných verzí je nejprve nutné vyzdvihnout kompilátor GNAT - GNU Ada95. Je k dispozici ve zdrojovém kódu z projektu GNU (free software). Může fungovat i na počítači s jedním procesorem, ale operační systém musí podporovat multitasking. Může to být například některá verze UNIX nebo OS/2. Co se týče MS DOS - hádejte sami. Pokud však opravdu chcete na svém osobním počítači provozovat sto nebo dva paralelní procesy pod MS DOS 6.x, pak můžete zkusit Ada/Ed - překladač a interpret pro verzi jazyka 1987, který je však zcela nekompatibilní s normou a nemá řadu podstatných prvků .

Pokud máte peníze, pak je situace samozřejmě jednodušší. V rámci měsíční mzdy průměrného ruského programátora si můžete pořídit například FirstAda a napsat řídicí systém ledničky. Dražší systémy pro Windows, OS/2 nebo UNIX certifikované americkým ministerstvem obrany můžete zkusit zakoupit přímo od vývojářských společností, kterých je zhruba desítka.

Zajímavé je, že nejen samotný jazyk byl standardizován, což umožnilo vytvářet snadno přenosné programy, ale také sada vývojářských nástrojů – různé input-output knihovny a organizace GUI, preprocesory, verifikátory, generátory kódu, analyzátory logické struktury zdrojový kód, programy pro testování kompilátorů atd. Samozřejmě existují velké balíčky, které obsahují všechny standardizované vývojové nástroje, ale zdají se být velmi drahé.

Bylo by velmi zajímavé vědět, zda SSSR pracoval na jazycích určených k řešení podobných vojenských problémů. Nebo naši specialisté psali pouze v Assembly?

Jazyk pekla tu byl víceméně vždy. Ve škole jsme se jeho názvu smáli, v univerzitních osnovách se suše zmiňoval jako jazyk vyvinutý na žádost amerického ministerstva obrany, ale ke studiu syntaxe či aplikace se skutečně dostali jen vzácní programátoři. To vedlo k mylnému názoru, že jazyk Ada funguje pouze na staletém vybavení a jeho potřeba zmizí spolu s přirozenou modernizací.

A to je velmi daleko od pravdy.

Vzhled

V 70. letech 20. století, v době vrcholící studené války, uspořádalo ministerstvo obrany USA mezinárodní soutěž, na základě jejíchž výsledků bylo nutné vybrat programovací jazyk pro použití pro vojenské účely. Žádný ze stávajících jazyků však členy komise neuspokojil, a tak se dlouhým výběrem a několika úpravami zrodil jazyk Ada, pojmenovaný po Adě Lovelace. Pak začalo mnoho let byrokracie se standardizací, registrací ochranných známek, zákazy překladatelů na zakázku a dalšími akcemi, které odradily masové publikum od spolupráce s Adou.

Výsledkem je poměrně specializovaný jazyk určený pro složité výpočetní systémy se zvýšenými požadavky na bezpečnost. Opět platí, že kvůli požadavkům Pentagonu a přísným standardům je interakce s jinými programovacími jazyky extrémně obtížná, takže až donedávna neměla Ada prakticky žádnou šanci přejít na masový trh. Ale jak se zařízení zlevňuje a používané technologie jsou složitější, taková šance se objevuje.

Syntax

Zpočátku je Ada modulární programovací jazyk se silným psaním, který zdědil syntaxi od Pascalu a Algolu. Pokud jste se první naučili ve škole nebo na vysoké škole, podívejte se na „Hello, World!“ měl by cítit nostalgii:

s Ada.Text_IO;

Postup Dobrý den, je
použijte Ada.Text_IO;
začít
Put_Line("Ahoj světe!");
konec Dobrý den;

Jedním z hlavních požadavků na jazyk byla spolehlivost jeho používání. V souladu s tím to znamenalo přísná omezení struktury, typů, pravopisu a mnohem více. Kromě toho jsou zde téměř všechny chyby zachyceny ve fázi kompilace.

Dalším požadavkem byla maximální čitelnost kódu v tištěné podobě, což mělo za následek těžkost výsledného jazyka a nízkou flexibilitu.

Pozdější standardy tyto problémy částečně vyřešily, ale ze zřejmých důvodů nevytvořily z pekla druhý Python.

Dnes Ada

Na rozdíl od mínění širokého publika se jazyk pekla stále aktivně používá, a to nejen ve Spojených státech a nejen ve vojenském průmyslu. Například část softwaru obojživelného letounu Beriev Be-200 je napsána v jazyce Ada. Vlaky metra bez strojvedoucího, které fungují v mnoha velkých městech (Paříž, Londýn, New York atd.), také používají vybavení americké armády.

A ano, samozřejmě, mezi „klienty“ bylo vojenské a civilní letectví (zejména Boeing 777), rakety, raketoplány, satelity - obecně téměř celý seznam nekonečně drahých amerických produktů, které vyžadují nejvyšší stupeň bezpečnosti .

Vyhlídky

Jazyk pekel byl kritizován jak v době svého vzniku, tak i tehdy, když se ukázalo, že velkolepé plány Pentagonu zcela neodpovídají realitě, a tím spíše nyní. Důvodem je nepohodlný jazyk, složitost standardů napsaných v letech 1983 a 1995 a také krátkozrakost vývojářů, kteří jazyk Ada připravili o masové publikum.

Nicméně téměř 40 let aktivní používání potvrdit, že jazyk Ada snad splnil svůj hlavní úkol – s jeho pomocí lze stále vytvářet spolehlivý kód pro systémy se zvýšenými bezpečnostními požadavky. Zároveň, když se podíváte na současné trendy, počet takových produktů neustále roste: auta s autopilotem a hybridními motory, soukromé kosmické lodě a malá letadla, vysokorychlostní vlaky a také obrovské množství vestavěných systémů. To vše je potenciální pole pro činnost jazyka Pekla. Přidejte k tomu skutečnost, že standard byl v roce 2012 vážně revidován a modernizován, jsou také vydávány a aktualizovány nástroje pro tuto práci.

Jazyk Pekla je tedy jak fragmentem z nepříliš příjemné minulosti, tak jedním z nástrojů k budování světlé budoucnosti. A odchod do důchodu rozhodně neplánuje.