V rámci většího projektu, který se zaměřuje na vytvoření komplexního prostředí pro výuku programování na středních a vyšších odborných školách, jsem byl postaven před celkem nečekaný požadavek. Že bude součástí balíku nástrojů něco kolem C++, by asi čekal každý a nikoho by takový požadavek nijak výrazně nepřekvapil. V případě programovacího jazyka Ada je však situace výrazně odlišná!
Jedná se sice o „starý“ jazyk, ale jeho rozšíření mezi běžnou populací není nijak závratné a většina lidí, pokud vůbec, zná pouze jeho název. Ani já jsem na tom nebyl o mnoho lépe a snažil jsem se prosadit spíše Pascal v podobě aplikace Lazarus. Po delších diskusích jsem ale uznal, že na tomto nezvyklém požadavku něco je a nakonec jsme se dohodli na tom, že se Ada do balíku zařadí.
Vzhledem k tomu, že se nejedná o příliš známý a používaný jazyk, bylo doporučeno vypracovat stručnou „kuchařku“ pro úplné začátečníky. Její součástí bude nejenom popis základních vlastností jazyka, ale také několik příkladů terminálových i grafických aplikací. Samozřejmostí je také popis všech vývojářských nástrojů, které jsou nutné, vhodné a dostupné v linuxových distribucích i jiných OS. Nakonec se ukázalo, že kuchařka nebude zase tak úplně stručná, takže nakonec vznikl poměrně rozsáhlý materiál, který byl nazván Výukovým kurzem pro začátečníky. V rámci série článků budou čtenáři včas upozorněni, kde a kdy je možné se k tomuto kurzu dostat.
Bylo by asi vhodné už na tomto místě uvést nějaké argumenty pro volbu jazyka Ada. Celá problematika by se asi dala rozdělit na dvě oblasti:
- Výukové účely – původní záměr projektu je zcela určitě naplněn. Hlavním důvodem pro zařazení jazyka Ada je podle zadavatelů najít a ukázat zájemcům určitý „etalon“. Já bych s tím vzhledem k podobnosti kódu s Pascalem, jeho přehlednosti a čitelnosti určitě souhlasil. Tento souhlas je také podpořen silnou statickou typovou kontrolou ve fázi překladu, jasně oddělenou deklarací proměnných, procedur a funkcí. Toto vše vysloveně vyžaduje nad kódem uvažovat a volit optimální řešení. Nevýhodou je samozřejmě nepříliš strmá křivka učení a také nutnost znát docela dost prostředků jazyka k tomu, aby bylo možné napsat poměrně jednoduchou aplikaci. Další výhodou je dostupnost kompletního prostředí pro GPL projekty a akademickou sféru. Jako nevýhodu bych v tomto případě nebral příliš vážně menší penetraci užití jazyka a jeho „známost“.
- Praktické a komerční účely – v projektu není nijak řešeno. Platí samozřejmě vše, co bylo výše uvedeno ve výhodách i nevýhodách. K výhodám bych určitě přidal možnost využití v opravdu velkých projektech, kde je kritická oblast bezpečnosti, robustnosti, rychlé odezvy atd. V rámci takových projektů už vůbec není jasné, že se jedná o neznámý a nepoužívaný jazyk. Výhodou a zároveň i nevýhodou je dostupnost komerční verze pouze jako placené podpory. Výhoda je v samotné podpoře, ale také v dostupnosti dalších nástrojů pro efektivní vývoj. Naopak nevýhodou je určitě cena, která se může vyšplhat až k několika tisícům dolarů ročně. Pro velký projekt to samozřejmě není žádný zásadní problém, ale pro menší věci už to může být docela fatální. Pro zásadnější projekty je samozřejmou výhodou standardizace jazyka a možnost využít kód na mnoha platformách včetně embedded zařízení a RTOS, viz např. zde: Platformy Ada
Každopádně bych určitě doporučil se na jazyk Ada podívat, protože může být odpovědí na mnohé otázky kolem tvorby určitých typů aplikací v mnoha odvětvích.
Na základě práce na projektu pak následně vznikl také tento článek. O tom, že Ada není příliš častým tématem, svědčí i to, že se články o ní zde objevily už před drahnou dobou, asi 12 let. Článek kopíruje hlavní myšlenku základního projektu a je proto určen k základnímu seznámení s jazykem pro začátečníky a ty, kteří by si případně chtěli pouze rozšířit svůj obzor. Po svých zatímních zkušenostech mohu říci, že se jedná o rozšíření docela zajímavé a poučné.
Nyní už dosti úvodních slov a pustíme se rovnou do samotného popisu jazyka a dalších věcí kolem něj. Jako první by asi bylo vhodné zmínit, jak vznikl název tohoto programovacího jazyka. Dost lidí to asi ví, takže jenom připomenu, že se jedná o ženské jméno. Touto ženou není nikdo jiný, než Augusta Ada King, hraběnka z Lovelace, jediná legitimní dcera básníka Lorda Byrona, matematička a autorka algoritmu, který je považován za první strojově zpracovatelný algoritmus v dějinách. Více je možné najít zde: Ada Lovelace
Výše uvedený algoritmus byl součástí popisu „diferenčního stroje“ Charlese Babbage, který je považován za „otce počítače“ – viz zde: Charles Babbage
Samotný jazyk patří mezi ty „služebně starší“. Vznikl totiž v 70. letech minulého století pro potřeby amerického ministerstva obrany. To udělalo prověrku desítek až stovek stávajících programovacích jazyků, ale nakonec se rozhodlo pro variantu vytvoření jazyka úplně nového. Hlavním cílem bylo vytvořit jeden univerzální jazyk s obecnou použitelností. Výběrové řízení vyhrála firma CII-Honeywell Bull a v roce 1980 vyšel první referenční manuál. V roce 1983 pak jazyk získal ANSI standard a v roce 1987 bez dalších změn také ISO standard. Pak následovaly další standardizované verze v letech 1995, 2007 a poslední aktuální verze v roce 2012. Více zde: Programovací jazyk Ada
Ada je programovací jazyk podobný ALGOLu a inspirovaný Pascalem. Ve své době to byl první jazyk, který obsahoval zpracování výjimek, generika a paralelní zpracování vláken. Také byla prvním standardizovaným objektově orientovaným programovacím jazykem.
Jedná se o velmi silně staticky typovaný jazyk, s mechanismem modulů-balíčků, chráněnými objekty a dalšími zajímavými vlastnostmi. Původně byl určen hlavně pro embedded a real-time systémy, ale s postupem času se z něj stal univerzální vysokoúrovňový programovací jazyk. Samotný ALRM (Ada Language Reference Manual) říká asi toto: jazyk Ada byl navržen se třemi prvořadými záměry: spolehlivost a snadná údržba programu, programování jako lidská aktivita a efektivita. Revize z roku 1995 byla navržena pro větší pružnost a rozšiřitelnost, přidanou kontrolu nad správou úložiště a synchronizace, standardizované balíčky orientované na podporu důležitých aplikačních oblastí s tím, že byl zachován původní důraz na spolehlivost, udržovatelnost a efektivitu.
Jazyk Ada je navržen tak, aby maximalizoval možnosti odhalení chyb v rané fázi vývojového procesu. Toto snižuje celkové náklady na vývoj softwaru, protože je vždy levnější chyby odhalit a opravit co nejdříve. Žádný jiný jazyk jako C++, Java nebo Eiffel neposkytuje takovou úroveň podpory pro bezpečnostně-kritické aplikace jako Ada. Vývojáři mohou dělat a také dělají chyby při vývoji i v Ada, ale pravděpodobnost takových chyb je mnohem nižší, než při použití jiných programovacích jazyků. Proto se Ada využívá přednostně tam, kde nejsou chyby přijatelné a spolehlivost aplikací je prvořadým cílem.
Jak již bylo uvedeno výše, Ada není běžně používaným programovacím jazykem. Má to několik příčin, ke kterým se vrátíme později. Z předešlého popisu je ale také jistě zřejmé, že se jedná o jazyk neustále vyvíjený, rozšiřovaný a průběžně standardizovaný. Je to hlavně proto, že se používá na hodně velké a mission-critical projekty v různých oblastech. Již byla řeč o ministerstvu obrany USA, takže ho používají asi všechny složky americké armády. Běžné je i komerční využití např. NASA, velcí výrobci letadel, lodí, satelitní systémy, bankovnictví atd. Více informací o použitelnosti aplikací je uvedeno třeba zde: Projekty v jazyce Ada
Kromě již uvedených informací je možné získat spoustu dalších. Zde uvedeme zatím pouze dvě základní webové stránky. První z nich je označovaná za domovskou stránku projektu a zájemci zde naleznou novinky, popis jazyka, dokumentaci a další věci: ADAIC
Dalším je pak firemní web, kde je možné najít všechny možné vývojářské nástroje, nabídky školení a mnoho dalšího: AdaCore. Možností na internetu je samozřejmě mnohem více, takže jejich stručný přehled uvedeme na konci tohoto dílu.
To by asi zatím stačilo k seznámení s obecnými informacemi o jazyce Ada a zkusíme se pustit trochu dál k prvnímu programu. Je asi očekávané a logické, že se bude jednat o obligátní Hello World…. Dokonce uvedeme dvě varianty tohoto „veledíla“. Ve výukovém kurzu je na tomto místě stručné srovnání s podobnou aplikací v jazycích C++ a Java.
varianta a)
with Ada.Text_IO; -- 1 procedure Hello is -- 2 begin -- 3 Ada.Text_IO.Put ("Hello world from ADA!"); -- 4 Ada.Text_IO.New_Line; -- 5 end Hello; -- 6
varianta b)
with Ada.Text_IO; use Ada.Text_IO; -- 1 procedure Hello is -- 2 begin -- 3 Put_line ("Hello world from ADA!"); -- 4 end Hello; -- 5
Na očíslovaných řádcích kódu Ada trochu přiblížíme základní znaky tohoto jazyka. Zatím se vůbec nebudeme zabývat nějakým překladem, překladačem, spuštěním aplikace atd. a necháme si to na později.
Pro první variantu platí následující:
- První řádek představuje standardní modul-balíček, který budeme v našem jednoduchém programu pro jeho činnost potřebovat. Jeho název logicky napovídá o jeho funkčnosti…
- Druhý řádek obsahuje název modulu-procedury, který jsme vlastnoručně vytvořili. Je to vlastně kromě jiného náhrada za příkaz main z C++ a Javy, který v Ada nemá obdobu.
- Na třetím řádku je příkaz begin, který nahrazuje složené závorky. Většině to asi připomene kód z Pascalu a věřte, že podobnost není čistě náhodná a projevuje se ve více částech kódu.
- Čtvrtý řádek vypíše zadaný text na řádek
- Pátý řádek provede odřádkování
- Šestý řádek označuje konec modulu
Druhá varianta je trochu odlišná:
- První řádek obsahuje ještě příkaz use. Ten znamená, že se použitý externí modul „zviditelní“ pro aktuální modul a při každém jeho použití nebude nutné používat prefix Ada.ModulName.xyz
- Druhý a třetí řádek jsou stejné.
- Čtvrtý řádek pak obsahuje příkaz, který provádí najednou dvě operace: vypsání textu na řádek a odřádkování
- Konec modulu je pak také identický. Je možné zde použít i zkrácenou variantu end;, ale doporučuje se uvádět název toho, co je příkazem ukončováno. Ve složitějších strukturách to hodně zpřehledňuje kód a usnadňuje jeho čitelnost a následnou údržbu.
- Další podobnost s Pascalem je v ukončování řádků středníkem.
Krátkou ukázkou kódu jednoduché aplikace a jejím stručným popisem se dostáváme k základním pravidlům, kterými se psaní kódu v jazyce Ada řídí. Nebudeme zde samozřejmě uvádět všechny, ale jenom ty nejzákladnější a nejpoužívanější.
- názvy proměnných se mohou skládat ze znaků, číslic a podtržítek. Všechny identifikátory jsou case insenzitive, kdy nerozhodují malá či velká písmena
- správné identifikátory jsou např. with, With, WITH – stejný identifikátor
- nebo Max_cislo, Max_Cislo1
- nesprávné identifikátory: Max_Cislo_ nebo Max__cislo
- numerické výrazy se mohou zapisovat několika způsoby, jako např. 567, 123_456_789 (=123456789) nebo 2E3 pro celočíselné hodnoty
- pro různé číselné základy (2–16) je možné použít tento zápis: 2#1011#, 16#FE24# atd.
- pro desetinná čísla je možné použít zápis ve tvaru např. 3.14. 100.0, 1.123_456 nebo 1.23E-2
- neplatné jsou ale zápisy 100. nebo .0123
- pro zápis jednotlivých znaků se používá jednoduchý formát s apostrofem: ‚a‘ nebo ‚X‘, pro řetězce pak klasický zápis s uvozovkami „Ada“, „Ahoj světe“ atd.
- Ada nemá způsob zápisu komentářů přes více řádků. K podobným účelům je zde znak dvou pomlček –, které jako komentář označí vše následující do konce řádku
- Ada má také standardem omezený rozsah vyhrazených slov. Pro verzi 2012 je jich 73 a jejich celkový výčet je v příloze vyhrazena_slova.txt.
Ada využívá velké množství typů, které nemá zatím ani smysl všechny vyjmenovávat. Celkový přehled včetně příkladů pro jejich deklaraci a použití je možné najít např. zde: Přehled typů
My si zde uvedeme jenom ty nejzákladnější. Ve výukovém kurzu je rozšířená tabulka, která porovnává typy jazyka Ada s jejich ekvivalenty v C++ a Javě.
Typ Ada | Popis |
---|---|
Character | jednotlivý znak |
String | řetězec s pevnou délkou |
Integer | celé číslo (32-bit) |
Natural | nula nebo kladné celé číslo |
Positive | kladné celé číslo |
Long_Integer | velké celé číslo |
Long_Long_Integer | velké celé číslo (64-bit) |
Short_Integer | malé celé číslo (16-bit) |
Short_Short_Integer | malé celé číslo (8-bit) |
Float | reálné číslo |
Long_Float | velké reálné číslo |
Long_Long_Float | opravdu velké reálné číslo |
Short_Float | malé reálné číslo |
Fixed | reálné číslo s pevnou čárkou |
V tabulce si všimněme dvou věcí: jednak zajímavých (ale velmi názorných!) definic malých/menších a velkých/větších čísel a dále toho, že zde nejsou uvedeny číselné rozsahy číselných typů. K tomuto tématu se ještě později vrátíme a ukážeme si na něm zajímavé možnosti využití tzv. atributů.
Jako poslední ze základních vlastností jazyka si dnes ukážeme několik operací nad jednotlivými datovými typy:
- pro skalární typy jsou definované tyto operace: rovnost/nerovnost – = a /=, <, <=, > a >= a také „(ne)členství“ v definovaném rozsahu: in a not in
- pro celočíselné typy jsou definovány základní operace +,–,* a /, mocnina ** a speciální funkce abs, mod a rem
- pro reálná čísla jsou definovány základní operace stejné jako v předchozím případě s výjimkou funkcí mod a rem
- v rámci logických operátorů je také jistá odlišnost, protože jsou zde definované předpokládané operace and, or, not, xor, /= a =, ale také dva nové operátory: and then a or else
- jako poslední zmínku k typům a operacím by bylo vhodné uvést absenci operací a operátorů typu i++, ++i, a+=b atd. Je to z toho důvodu, že se tyto operace nezdají tvůrcům standardu programovacího jazyka Ada dostatečně bezpečné. Myslet si o tom můžeme cokoliv, ale to je asi tak to jediné, co s tím můžeme dělat…
- přehled operátorů Ada a jejich porovnání s Javou a C++ je možné najít zde: Porovnání operátorů
Další stránky, kde je možné hledat informace, inspiraci, příklady, možnosti atd:
- [1] – WikiBooks
- [2] -Infres
- [3] – Beru Univ Brest
- [4] – Ada 2012
- [5] – Ada Auth
- [6] – Ada Power
- [7] – Ada žurnál
Tímto přehledem první díl série ukončíme. Věnovali jsme se zde hlavně základním informacím a teorii. V příštím dílu dokončíme teorii představením nástrojů pro řízení běhu programu, definice uživatelských typů a podtypů proměnných a dalších typů, jako jsou pole atd. Hlavně si ale ukážeme, jak jednoduché aplikace nejen napsat, ale také přeložit a spustit. A pak už bude jenom krok k tomu, abychom teoretické poznatky představili na velmi jednoduchých příkladech.