- Příklady
-
C, C++, Haskell (skrze
ghc
), Go
Programovací jazyky
Editovat
Note
|
Datové a řídicí struktury programovacích jazyků, datové typy. Kompilace, interpretace. IB111, PB071, PB161/PB162 |
Programovací jazyk je prostředek zápisu algoritmů — posloupností příkazů, jenž lze provést na počítači.
Typy programovacích jazyků
- Netypovaný
-
Nemá typy. Např.:
bash
, kde je všechno řetězec. - Slabě typované
-
Překladač / runtime přiděluje proměnné typ až při použití. Proměnná navíc mnohdy smí měnit typ. Např.: Python, JavaScript.
- Silně typované
-
Striktní pravidla pro deklaraci proměnných včetně typů. Obsahují malé množství implicitních konverzí mezi typy. Např.: C, C#, Haskell.
- Imperativní
-
Kladou důraz na přesné instrukce a jejich pořadí.
Z imperativního programovacího paradigmatu vychází objektově orientované programování.
- Deklarativní
-
Kladou důraz na popis požadovaného výsledku spíše než na přesný způsob, jak se k němu dobrat.
Deklarativní programovací paradigma se dále dělí na funkcionální (např. Haskell) a logické (např. Prolog).
- ,,Vyšší''
-
Mají větší míru abstrakce procesoru, paměti, atd. Mají tendenci být agnostické vůči architektuře procesoru. Např.: Python, Java, C#.
- ,,Nižší''
-
Více se podobají Assembleru. Mají tendenci vyžadovat kompilaci pro specifickou architekturu procesoru. Vývoj bývá náročnější, ale programy efektivnější. Obvykle pracují s pamětí explicitně.
Řídicí struktury
Řídící struktury ovlivňují pořadí vykonávání příkazů. V jazyce C jde o syntaktické kostrukce:
- if a else-if
-
Podmíněný skok.
- for
-
Omezený cyklus.
- while
-
Potenciálně nekonečný cyklus.
- do-while
-
Potenciálně nekonečný cyklus, který se provede alespoň jednou.
- switch
-
Syntaktický cukr pro vícero `if-else`ů použitelný v situacích, kdy proměnná nabývá některé z předem určených hodnot.
- goto
-
Skok na pojmenované návěští.
Datové typy
Datový typ určuje, jakých hodnot smí proměnná nabývat, jakým způsobem se má nahlížet na její paměť a jaké operace na ní lze provádět.
- Numerické
-
Integer o různých délkách, Float (IEEE-754) o různých délkách, Boolean. Jsou buď se znaménkem (signed) nebo bez znaménka (unsigned).
- Znakové
-
Char, Wide char
- Ukazatele
-
Obvykle s pojí s datovým typem hodnoty, na kterou ukazují — např.:
char*
nebostruct time_t*
. Obecný ukazatel do paměti se v C značívoid*
. - Definované uživatelem
-
Struktury (
struct
), uniony, výčtové typy (enum
), funkční ukazatele, …
Datové struktury
Reprezentují různé způsoby uložení primitivních datových typů v paměti. Liší se svou velikostí, režií i složitostí.
-
Pole
-
Spojovaný seznam
-
n-tice
-
Slovník
-
Množina
-
Halda
-
Fronta
-
Prioritní fronta
-
Zásobník
-
Binární vyhledávací strom
-
Červeno-černý strom
-
B-strom
-
…
Překlad
Proces převodu programu z programovacího jazyka na strojový kód.
Kompilace
Technicky vzato je to synonymum pro "Překlad", ale v zde je míněna pouze ahead-of-time kompilace.
Kompilátor (překladač) je program, který vezme jako vstup kód v daném programovacím jazyce a vyplyvne binární, platformově závislý, spustitelný soubor.
Kompilátor mívá řadu podčástí:
-
Lexikální analyzátor (lexer)
-
Syntaktický analyzátor (parser)
-
Sémantický analyzátor
-
Překladač do mezikódu
-
Optimalizér
-
Generátor kódu
gcc
)-
Preprocessing: rozvinutí maker
-
Kompilace: překlad každého vstupního souboru do assembleru
-
Sestavení: překlad z assembleru do strojového kódu
-
Linkování: nahrazení relativních adres absolutními, ,,pospojování'' mezivýsledků jednotlivých vstupních souborů
Interpretace
Interpret nepřekládá kód v daném programovacím jazyce předem, nýbrž až za běhu a pouze, pokud je to nutné. Díky tomu však může kód být nezávislý na konkrétní procesorové architektuře nebo i operačním systému.
- Příklady
-
Python, Haskell (skrze
ghci
), PHP, Ruby, JavaScript