Programovací jazyk Ada: GNAT a GPS

11. 6. 2015
Doba čtení: 13 minut

Sdílet

Minulým dílem jsme ukončili část seriálu, která se věnuje základním prvkům jazyka Ada, které jsou nutné pro vytváření jednoduchých úloh. V dnešním dílu se posuneme o kousek dál a ukážeme si instalaci nejnovější verze překladače Ada včetně pomocných aplikací a zajímavého vývojového prostředí.

Za tímto účelem můžeme přejít na již dříve uvedenou webovou adresu: Libre AdaCore – stažení. Na prvním obrázku v první galerii vidíme, že jsou zde k dispozici dvě verze GNAT: GPL a Pro. Pro naše účely je samozřejmě relevantní verze GPL, kde popis říká, že je určena pro vývojáře svobodného softwaru a studenty. Verze Pro je určena pro komerční aplikace a je možné k ní získat placenou podporu. Pokud by někdo chtěl získat více informací o ní, je lepší navštívit stránku AdaCore (odkaz na ní je nad bannerem s popisem verzí).

V dalším kroku klikneme na zelený kroužek se šipkou dolů (DOWNLOAD) a dostaneme se na další stránku – viz druhý obrázek. Zde je jako první v pořadí možnost přejít na stránku s tabulkou porovnání jednotlivých verzí. Také se zde poprvé objevuje výraz SPARK – pro zájemce podrobnosti zde: Spark 2014. Pokud se na tabulku podíváme, zjistíme existenci dokonce tří verzí – Pro, Academic a GPL. Podrobnosti jsou buď na dalším obrázku první galerie nebo na stránce Srovnání verzí Ada.

My se ale vrátíme na předchozí stranu a ze dvou možností stažení si vybereme první – Free Software or Academic Development. Po označení této varianty se na stránce objeví dva nové prvky – pole na zadání emailové adresy pro zasílání informací a novinek a zelené tlačítko pro sestavení balíčků ke stažení – viz čtvrtý obrázek v galerii. Klikneme tedy na toto tlačítko a dostaneme se na další stránku. Zde jsou odkazy na znění licence GPL a znovu na tabulku porovnání verzí. Pro nás jsou ale důležité dva rozbalovací seznamy asi v polovině stránky. Zajímavá část celé strany je na dalším obrázku první galerie.

První seznam obsahuje přehled platforem, pro které je možné balíčky stáhnout a použít. Jak ukazuje šestý obrázek v galerii, je jich k dispozici poměrně velké množství. Asi očekávané jsou verze pro Linux, Windows a Mac. Pak jsou zde ale i verze pro Solaris a dokonce dvě běhová prostředí: JVM a .NET. Nakonec jsou zde i varianty pro ARM, mikrokontrolery a dokonce i Lego… Ve druhém seznamu je přehled verzí, které jsou k dispozici. Pro zájemce o nějakou "exotičtější " platformu jenom krátké upozornění – každá platforma nemusí být k dispozici v nejnovější verzi a je tedy občas nutné hledat. Přehled verzí je na dalším obrázku v první galerii. Pak následuje seznam balíčků a nástrojů, které jsou k dispozici pro stažení. Zatím se jimi nebudeme zabývat a kdo by chtěl získat více informací, může to zkusit zde: AdaCore Tools.

Pro naše aktuální účely se vybere platforma x86–64 GNU Linux (64 bits), verze 2014 a balíček GNAT Ada – viz osmý obrázek galerie. Je možné ke stažení vybrat jeden nebo více balíčků a pomocí volby formátu ve spodní části stránky pak stáhnout kompletní archiv s vybranými balíčky – pomocí zeleného tlačítka vpravo dole. To si ale ukážeme až někdy později. Nyní stáhneme jenom jeden vybraný archiv a jako administrátor ho rozbalíme do adresáře /opt. Zde vznikne nový adresář s názvem gnat-gpl-2014-x86_64-linux-bin. Jeho obsah je vidět na posledním obrázku první galerie. Upozorním pouze na soubor README, kde najdeme velmi stručné pokyny pro instalaci, použití a odkaz na příklady, které jsou v adresáři ../share/examples.

A nyní se pustíme do samotné instalace. V novém adresáři otevřeme terminál a přihlásíme se jako administrátor. Bylo by samozřejmě možná použít i sudo, ale použité řešení je lepší s ohledem na další postup. V terminálu spustíme příkaz

# ~$ ./doinstall

a provedeme několik kroků:

  1. objeví se popis produktu a instalace a požaduje se stisk Enter pro pokračování – viz první obrázek druhé galerie
  2. po jeho stisku se objeví informace o cílovém adresáři, který je automaticky nastaven na /usr/gnat. Aby bylo možné od sebe oddělit případné další verze, změníme původní cílový adresář na /usr/gnat/2014 – viz druhý obrázek v galerii
  3. po Enter se objeví nově zadaný cílový adresář a požadavek na odsouhlasení dalšího kroku nebo konec instalace. My samozřejmě pokračujeme – viz třetí obrázek v galerii
  4. nakonec se objeví konečný souhlas/nesouhlas s instalací do zadaného adresáře a po odsouhlasení se spustí instalace – viz další obrázek
  5. pokud je vše v pořádku, tak proběhne samotná instalace a na jejím konci se pak objeví nápověda k nastavení celého prostředí. Jak je patrné z pátého obrázku druhé galerie, je nutné zadat příslušný adresář s binárními soubory jako první do systémové proměnné PATH. Že je to opravdu nutné se můžeme přesvědčit novým zadáním příkazů

    # ~$ gnatmake --version

    # ~$ gnatls -v

    Bez ohledu na provedenou instalaci systém pořád vidí pouze původně instalovanou verzi 4.8.2. Budeme tedy pokračovat dalšími kroky:

  6. otevřeme soubor /root/.bashrc a vložíme do něj následující text
    PATH=/usr/gnat/2014/bin:$PATH
    export PATH
    
    GPR_PROJECT_PATH=/usr/gnat/2014/lib/gnat
    export GPR_PROJECT_PATH
    
    ADA_PROJECT_PATH=/usr/gnat/2014/lib/gnat
    export ADA_PROJECT_PATH

    Je zde sice deklarováno více systémových proměnných, než bylo doporučeno v procesu instalace, ale ty budou nutné pro správnou funkci vývojového prostředí GPS a dalších nástrojů

  7. soubor uložíme a v terminálu spustíme příkazy

    # ~$ cd

    # ~$ source .bashrc

  8. nyní si můžeme ověřit, zde se naše nastavení nějak projevilo. To provedeme postupným spuštěním příkazů

    # ~$ gnatmake --version

    # ~$ gnatls -v

    # ~$ env | grep gnat

    Jak ukazuje šestý obrázek galerie, všechny informace se vztahují k čerstvě instalované nejnovější verzi. Zde je nutné upozornit, že u jiných distribucí může být nastavení prostředí odlišné a je třeba vždy přihlédnout ke konkrétním okolnostem.

  9. nyní máme prostředí sice nastavené, ale jenom pro uživatele root. Bylo by samozřejmě špatné to nechat takto a je nutné prostředí nastavit i pro normálního uživatele. Můžeme to vyzkoušet tak, že spustíme uživatelský terminál a zadáme výše uvedené příkazy. Tím zjistíme, že pro něj se situace zatím nezměnila a pořád „žije“ ve staré verzi. Možností je více, ale použije se ta nejjednodušší. V terminálu se zadá příkaz

    # ~$ cp .bashrc /home/$USER/.bashrc

    a provede se odhlášení a opětovné přihlášení uživatele. Že vše funguje také u něj, je možné vidět na posledním obrázku ve druhé galerii.

Než se dostaneme k dalším krokům s nově instalovaným prostředím, uděláme malou odbočku. Pro výukové účely byla celkem logicky a pochopitelně vybrána linuxová distribuce. Důvody asi není nutné nijak podrobně rozebírat. Při diskusích nad tématem jsme ale narazili na jeden potenciální problém. Ten spočívá v tom, že pokud by si chtěli studenti, popř. i učitelé celý vývojový systém instalovat a zkoušet na vlastních strojích, velmi často zde narazí na MS Windows. Proto bylo rozhodnuto, že do výukového kurzu zařadíme krátké vstupy, které se budou týkat tohoto OS a instalace nástrojů pro vývoj v jazyce Ada. K instalaci bychom se ale ještě vrátili a to trochu obecně. V rámci série bylo již několikrát řečeno, že Ada není zrovna nejpoužívanějším a nejznámějším jazykem. To ale určitě neznamená, že k ní není možné najít spoustu užitečných a důležitých informací. Už přehled manuálů a tutoriálů na jednom z předchozích obrázků napovídá, že je tomu trochu jinak. Konkrétně k instalaci důležitých součástí vývojového prostředí je možné najít docela dost inspirativních informací, článků a také videí. Na jednu sérii bych chtěl zvláště upozornit. Je to pětidílný seriál s názvem Ada Programming on Slackware. Já jsem z něj při práci na článcích také čerpal a doporučuji ho ke shlédnutí. Jedná se o velmi krátké, jasné a stručné návody, z nichž většina se pro instalaci základního vývojového prostředí velmi hodí. Zde je odkaz na první díl: Ada Programming on Slackware

Seriál má tento obsah:

  • GNAT GPL
  • Florist POSIX Library
  • XML/Ada Library
  • GNATcoll Library
  • AWS – Ada Web Server

Kromě posledního dílu, který je zaměřen na dost specifickou oblast využití jazyka Ada, jsou ostatní téměř nutností:

  • GNAT GPL – kompletní prostředí s překladačem a vývojovým prostředím GPS – GNAT Programming Studio.
  • Florist – open-source implementace volání systémových procedur podle POSIX standardu včetně rozšíření pro real-time úlohy a testovacího balíku
  • XML/Ada – podpora pro parsování XML souborů včetně DTD, úplná podpora pro SAX a téměř úplná podpora pro základní část DOM. Obsahuje ověřování XML souborů pomocí schémat
  • GNATcoll – kolekce komponent a utilit, jako např. integrace skriptovacích jazyků, rozhraní pro práci s databázovými servery, náhrada některých standardních knihoven Ada efektivnějším řešením, hledání statických řetězců, manipulace s maily, podpora pro zápis a čtení dat ve formátu JSON a další

Tímto by byla odbočka kompletní a my se můžeme vrátit ke zkouškám nového prostředí. Není samozřejmě nic jednoduššího, než vzít jeden z našich prvních příkladů:

with Ada.Text_IO;   use Ada.Text_IO;
     procedure Helloa2 is
       begin
          Put_Line("Hello world from ADA - 2!");
       end Helloa2;

a zkusit si ho znovu přeložit, tentokrát novou verzí překladače. Překlad proběhne naprosto bez problémů a spuštění vzniklé „aplikace“ je také očekávané. Nemá žádný velký smysl pokračovat ve zkoušení dalších příkladů, protože by byl výsledek opět bezproblémový a nic nového bychom se nedozvěděli. Proto se raději podíváme na úplnou novinku – vývojové prostředí GPS. Po prozkoumání hlavního menu zjistíme, že se po instalaci GPS v nabídce neobjevilo. Máme tedy několik možností, jak tuto situaci řešit. V našem případě bude řešena přímým spuštěním souboru přes správce souborů. Konkrétně se jedná o soubor /usr/gnat/2014/bin/gps. Samozřejmě nic nebrání také tomu, aby byl příslušný soubor přidán do adresáře /usr/share/applications, který aplikaci zařadí do hlavního menu nebo ho spouštět přímo příkazem z terminálu atd.

Po spuštění uvedeného souboru se objeví okno s informací o tom, že bude vytvořen konfigurační adresář – viz první obrázek ve třetí galerii. Po odkliknutí se krátce objeví okno s grafickým motivem GPS a následně pak uvítací obrazovka – viz další obrázek. Tu si podrobněji popíšeme. Je zde k dispozici několik informací a voleb:

  1. v nadpisu je viditelná verze GPS včetně data vydání
  2. dále následuje volba způsobu otevření/založení projektu – probereme později
  3. dole je zaškrtávací pole s volbou, jestli tento uvítací dialog spouštět vždy při startu GPS či nikoliv
  4. tlačítka pro pokračování nebo ukončení GPS

Projekt je v uvítacím dialogu možné otevřít dvojím způsobem:

  • nastavit si nějaký adresář, do kterého GPS sáhne automaticky. Tato volba je standardní, ale problém je v adresáři. Ten totiž ukazuje do domovského adresáře GPS, což je adresář, kde nemá běžný uživatel právo k zápisu. Je tak velmi vhodné tuto lokaci změnit na nějaký uživatelský adresář
  • pomocí poslední volby vybrat konkrétní projekt podle uživatelské potřeby; vzhledem k tomu, že zatím nemáme k dispozici žádný projekt (naše pokusy nejsou z pohledu GPS projekty, ale pouze soubory Ada), musíme se zaměřit na dva způsoby vytvoření projektu nového:
  • vytvořit projekt podle nějakého předdefinovaného vzoru. Jak je vidět na dalším obrázku ve třetí galerii, je zde k dispozici hned několik vzorů (celkem 8), z nichž je pro nás v tuto chvíli užitečný asi pouze jeden – Simple Project. Později se k němu ještě vrátíme.
  • vytvořit projekt pomocí průvodce. Vybereme tuto možnost a klikneme na OK. Jak ukazuje čtvrtý obrázek v galerii, je zde k dispozici celkem 5 variant pro různé účely a možnosti.
  1. my zůstaneme u té primárně nastavené (Single Project) a budeme pokračovat pomocí tlačítka Forward
  2. jak ukazuje další obrázek, objeví se další formulář, kde se zadává název projektu a jeho umístění do adresáře. Automaticky je zde nastaven ten adresář, který jsem vybrali v úvodním dialogu.
  3. po zadání názvu projektu vidíme, že se otevřely další dvě možnosti k pokračování v podobě tlačítek Forward a Apply – viz šestý obrázek
  4. zatím nebudeme práci zbytečně komplikovat a klikneme na tlačítko Apply
  5. jak ukazuje další obrázek, objevilo se celkem běžné okno s denními tipy. Toto okno můžeme zavřít, prohlédnout si další tipy a nastavit si, jestli se bude otvírat vždy při spuštění GPS
  6. pokud okno s tipy zavřeme, objeví se konečně hlavní okno vývojového prostředí GPS – viz osmý obrázek třetí galerie

Vzhled okna asi nikoho nepřekvapí (tedy myšleno nikoho, kdo někdy nějaké vývojové prostředí alespoň letmo zahlédl…), takže ho zatím nebudeme nijak podrobně popisovat. Všimneme si tedy pouze přehledu projektů na levé straně okna. Zde je vidět náš nově založený projekt a nad ním tři ikonky:

  • vlevo je ikona pro znovunačtení projektu, ke které se asi nedá nic dalšího dodat
  • vedle je pak ikona pro nastavení vlastností či parametrů projektu. Když se podíváme na další obrázek ve třetí galerii, tak si jistě všimneme velké podobnosti s formulářem vytváření nového projektu. Zde je možné změnit či nastavit to, co nebylo provedeno při samotném aktu vytváření projektu. Zatím pouze upozorním na velké množství parametrů a voleb, ale k nastavení se vrátíme až později
  • pomocí ikony úplně vpravo je možné nastavit vzhled panelu a zobrazení jeho obsahu

Ještě než budeme pokračovat dále v popisu GPS, podíváme se do správce souborů na náš vybraný adresář. Jak je patrné z desátého obrázku třetí galerie, objevily se zde tři nové soubory: adagpr1.gpr, default.gpr a gnatinspect.db. Na dalším obrázku je pak vidět obsah prvních dvou jmenovaných souborů zatím bez dalšího komentáře.

Nyní si zkusíme přidat do projektu nějakou „náplň“, takže uděláme několik kroků:

  1. z adresáře vymažeme stávající soubory helloa2, helloa2.ali a helloa2.o a ponecháme pouze tři výše uvedené soubory k projektu a helloa2.adb – viz obrázek č. 12
  2. pokud si rozklikneme ikonu adresáře pod názvem projektu, tak tam náš zbylý soubor vidíme a kliknutím ho můžeme otevřít v hlavním okně GPS – viz další obrázek
  3. můžeme se trochu vrátit k popisu GPS a vyzkoušet některé funkce. Pod hlavním menu jsou 4 sekce ikon. My vyzkoušíme levou ikonu ze sekce úplně napravo – Check Semantic. Po stisknutí proběhne kontrola a její výsledky vidíme v dolním okně zpráv – viz obrázek č. 14
  4. nyní použijeme další ikonu vpravo – Compile File. Výsledek v okně zpráv y změny v adresáři po použití obou příkazů jsou vidět na dalším obrázku
  5. jak je možné si na předchozím obrázku všimnout, není zde zatím k dispozici spustitelný soubor a ani volba menu Build → Run → Custom nefunguje správně
  6. otevřeme si tedy nastavení parametrů programu výše uvedenou ikonou a vybereme záložku Main files – viz obrázek č. 16
  7. pomocí tlačítka + Add otevřeme seznam dostupných souborů a zaškrtneme ten, který chceme mít jako hlavní (v našem případě je jenom jeden) – viz další obrázek
  8. po zadání vypadá předchozí nastavení jako na obrázku č. 18. V horní části je celé jméno souboru, v dolní části pak jméno spustitelné aplikace (stejné, jako název souboru, ale bez přípony). Jméno je možné v okně změnit a uživatelsky nastavit
  9. po odsouhlasení změny nastavení je na dalším obrázku vidět, že pravá sekce ikon se rozrostla o další dvě, včetně Run Main : název Main file
  10. pokud bychom tuto ikonu bez dalších akcí vyzkoušeli, objeví se chybové hlášení – viz obrázek č. 20
  11. musíme tedy jako první použít ikonu třetí zleva v této sekci – Build Main : helloa2.adb. Výsledek je vidět jak v okně zpráv GPS, tak ve správci aplikací – viz další obrázek
  12. nyní už spuštění nově přeložené aplikace proběhne bez problémů, jak to ukazuje obrázek č. 22

Tímto bychom mohli uzavřít kapitolu o vytvoření projektu v GPS, jeho překladu a následném spuštění vytvořené velmi jednoduché aplikace. Následující text bude sice využívat nové možnosti GPS, ale vrátíme se v něm zase zpátky k samotnému jazyku Ada a ukážeme si jeho další zajímavé možnosti a schopnosti. Jako první si představíme tzv. strukturu překladových jednotek. Pro rychlé objasnění jenom připomenu, že je to obdoba situace v C++. Tam k jednoduché aplikaci existuje hlavičkový soubor s definicí specifikace (přípony .h, .hxx nebo .hpp) a implementační soubor, který obsahuje proveditelný kód (přípony .c, .cxx nebo .cpp)

V jazyce Ada je možné použít něco obdobného, kdy se vytvoří soubor specifikací s příponou FileName.ads a a tělo s nám již známou příponou FileName.adb. Všechny naše dosavadní příklady sestávaly pouze z jediného souboru FileName.adb, kde byly jak specifikace, tak tělo procedury.

Soubor specifikací má tento obecný formát:

ict ve školství 24

package Package_Name is

    -- deklarace typu public

private

    -- deklarace typu private

end Package_Name;

Soubor s tělem má tento obecný formát:

package body Package_Name is

    -- implementace

end Package_Name;

Tímto bychom uzavřeli dnešní díl, který byl kompletně věnován instalaci nejnovější verze vývojového prostředí GNAT na OS Linux. Byla zmíněna i možnost využití dvou souborů v jednom projektu – specifikace a deklarace. V příštím dílu se začneme věnovat práci v GPS a ukážeme si trochu složitější aplikaci včetně využití překladových jednotek.

Autor článku