Hlavní navigace

Názor k článku Programovací jazyk Ada pro úplné začátečníky od Radek Miček - Obvykle má zpracování programu dvě fáze - statickou...

  • Článek je starý, nové názory již nelze přidávat.
  • 1. 5. 2015 1:16

    Radek Miček (neregistrovaný) ---.net.upcbroadband.cz

    Obvykle má zpracování programu dvě fáze - statickou a dynamickou. Statická fáze je to, co se děje před spuštěním (parsování, typová kontrola), a dynamická fáze je vykonání programů, které úspěšně prošly typovou kontrolou.

    Programy, jenž neprošly úspešně typovou kontrolou, se obvykle nevykonávají - ani se jim nepřiřazuje význam.

    Typový systém je sada pravidel, jak přiřadit typy částem programu - například výrazům. Tj. typy nejsou přiřazovány jen hodnotám jako například číslu 5 nebo řetězci "ahoj", ale i celým výrazům například cos x + i*sin x.

    Existují různé typové systémy (sady pravidel) - v některých mohou typy obsahovat kvantifikátory, příkladem je typ prázdného seznamu ∀x.[x]. Často pak můžeme za vázanou typovou proměnnou dosadit (např. za x) a dostat tak jiný typ (takto například můžeme odvodit, že prázdný seznam má nekonečně mnoho typů). Typové systémy s podtypovým polymorfismem obsahují pravidlo subsumce, které říká, že má-li výraz e typ s a je-li s podtyp t, pak má výraz e typ t. Výraz tedy může mít neomezeně mnoho typů.

    Typový systém rozděluje výrazy programu do skupin a říká, jaké výrazy jde použít v jakých situacích.

    Programům, jenž prošly typovou kontrolou, je přiřazen význam - sémantika. Například operační sémantika určí, jak se mají výrazy vyhodnocovat. Zde už se typy nepoužívají. Výraz se vyhodnocuje tak dlouho, dokud to jde. Vyhodnocení tedy nemusí skončit. Když už nejde výraz dále vyhodnocovat (neexistuje žádné pravidlo operační sémantiky, které by šlo na výraz použít) máme buď hodnotu nebo chybu (angl. stuck). Například operační sémantika neříká, co dělat s výrazem 1 + Pes(), tudíž máme chybu.

    Smyslem typového systému je, aby se předešlo chybám. Typový systém, který to dokáže se nazývá korektní. Obvykle se dokáže, že 1) postupné vyhodnocování nemění typ (preservation) a 2) má-li výraz pevný typ, tak je to buď hodnota nebo jde vyhodnotit (progress).

    Pozn.: U některých jazyků se typ výrazu mění při vyhodnocování, tudíž se to musí dokázat trochu jinak.

    Typ tedy předpovídá nebo odhaduje chování výrazu při vyhodnocování, korektnost typového systému neboli typová bezpečnost zajišťuje, že tyto předpovědi jsou správné.

    Například jazyk C není typově bezpečný neboť tam můžete přetypovat cokoliv na cokoliv jiného.

    Například Python definuje sémantiku pro všechny výrazy, co se podařilo naparsovat - tedy neprobíhá žádné rozdělování výrazů do skupin s tím, že na určitých místech jde použít jen některé výrazy - například vyhodnocení výrazu 1 + Pes() může vyhodit výjimku (sémantika výrazu je definována). Můžeme to chápat tak, že v Pythonu existuje pouze jedna skupina výrazů, pouze jeden typ.

    Hodnoty v Pythonu mají tzv. tagy - nesou si nějaký štítek, z něhož lze zjistit například název třídy. Podobně mají i některé hodnoty v Javě štítek a také tam lze zjistit název třídy, ale tento název třídy není typ - například můžeme vytvořit instanci třídy Pes a uložit ji do proměnné typu Zvíře - pak je typ proměnné Zvíře, ale hodnota má štítek Pes.

    Na rozdíl od typů štítky (neboli tagy) existují za běhu programu a jsou pouze na hodnotách, nikoliv na výrazech. Na hodnotě obvykle bývá nejvýše jeden štítek, ale hodnota může mít nekonečně mnoho typů.