Programovací jazyky
(Vytvoření stránky) |
m (→Vyšší programovací jazyky: Upřesnění data uvedení Fortranu.) |
||
(Není zobrazeno 15 mezilehlých verzí od 1 uživatele.) | |||
Řádka 1: | Řádka 1: | ||
− | [[Category:VSE]][[Category:Informatika]][[Category:Programování]] | + | [[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Stránky s obrázky]] |
== Interpretované a kompilované programovací jazyky == | == Interpretované a kompilované programovací jazyky == | ||
+ | * Programátor píše ''zdrojový kód'' jazyka. Tedy „písmenka“ srozumitelné člověku. Tomu ale počítač nerozumí. Je tedy potřeba zdrojový kód přeložit a vytvořit tak odpovídající posloupnost instrukcí procesoru: | ||
+ | Zdrojový kód → instrukce procesoru | ||
+ | * Podle toho, ''kdy'' se překlad provádí, dělíme jazyky na ''interpretované'' a ''kompilované''. | ||
+ | |||
+ | ; Interpretované jazyky | ||
+ | * Programátor vytváří zdrojový kód a předává ho uživateli. | ||
+ | * Uživatel spustí tento kód pomocí interpretu. | ||
+ | * Interpret je program, který čte zdrojový kód, překládá ho a ihned spouští. | ||
+ | * Příklady: Python, PHP, JavaScript,... | ||
+ | |||
+ | ; Kompilované jazyky | ||
+ | * Překlad na posloupnost instrukcí provede programátor. | ||
+ | * Příklady: Pascal, C++,... | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | ; Jak je to s Javou? | ||
+ | |||
+ | Zdrojový kód se překládá (kompiluje) na byte-code, který se odesílá uživateli a ten si jej spouští prostřednictvím virtuálního stroje Javy (JVM). | ||
+ | |||
+ | Java tedy není dobrý příklad ani na jednu skupinu jazyků, přebírá část výhod a část nevýhod z obou skupin. | ||
+ | </div> | ||
+ | |||
+ | ; Výhody interpretovaných | ||
+ | * Program v interpretovaných jazycích je snadno přenositelný mezi platformami, stačí použít správný interpret (viz třeba JavaScript). | ||
+ | * Při hledání chyb je k dispozici přímo zdrojový kód, u některých vývojových prostředí můžete dokonce přímo za běhu kód upravovat a zkoumat jeho chování. To u kompilovaných není možné, protože zdrojový kód již nemáme k dispozici. | ||
+ | * Překladač bývá jednodušší, protože v reálném čase překladu ví, s jakými konkrétními daty pracuje. Překladač kompilovaných jazyků bývá komplexnější, protože výsledný strojový kód musí umět zpracovat jakákoli vstupní data (v době překladu ještě nevíme, jaká konkrétní data budeme zpracovávat). | ||
+ | |||
+ | ; Výhody kompilovaných | ||
+ | * Běh programů je rychlejší, nemusí se provádět překlad. Bývá také méně náročný na operační paměť. | ||
+ | * Uživatelům nemusíme předat zdrojový kód. Pokud považujeme zdrojový kód za své „know-how“, je to výhoda. (Zdrojový kód ale poskytnout můžeme, pokud chceme.) | ||
+ | * U kompilovaných jazyků uživatel nemusí mít nainstalovaný interpret, spouštění je jednodušší. | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | Souhrn: | ||
+ | * Interpretované jazyky jsou obvykle vhodné pro menší, jednorázové projekty, které rychle napíšeme, odladíme a pak už jen udržujeme. Často takové programy děláme pro sebe nebo svoji firmu. Výhodou interpretovaných jazyků je přenositelnost mezi platformami. | ||
+ | * Kompilované jazyky jsou obvykle vhodné pro větší projekty, na kterých spolupracují větší týmy programátorů. Nabízí rychlejší běh aplikace a umožňují precizněji popsat a kontrolovat rozhraní mezi jednotlivými částmi aplikace. Snáze se také v kódu zorientujeme při aktualizacích po delší době. | ||
+ | </div> | ||
+ | |||
+ | <div class="Varovani"> | ||
+ | To, že je nějaký jazyk vhodný pro menší projekty neznamená, že by v něm nešly psát velké projekty. Například v Pythonu, který byl navržen jako skriptovací jazyk pro výuku programování se dnes běžně píše backend rozsáhlých webových aplikací. Psaní rozsáhlých aplikací je u těchto jazyků náročnější na pečlivost programátorů a striktní dodržování konvencí. | ||
+ | </div> | ||
+ | |||
[[File:InterpretXkomp.png]] | [[File:InterpretXkomp.png]] | ||
== Vyšší a nižší programovací jazyky == | == Vyšší a nižší programovací jazyky == | ||
− | == Historie programovacích jazyků | + | === Strojový kód === |
+ | <div class="Poznamka">Charakteristika: | ||
+ | * Není třeba překlad, kód lze přímo umístit do paměti. | ||
+ | * Procesor čte kód a provádí ho přímo. | ||
+ | </div> | ||
+ | *Procesor: | ||
+ | ** čte z paměti posloupnosti byte (čísla) | ||
+ | ** a podle čísla rozhoduje, co má dělat. | ||
+ | číslo → instrukce | ||
+ | *K zápisu instrukcí je třeba vymyslet pořadí bitů a znát jejich význam. | ||
+ | *Někdy řazen mezi nižší programovací jazyky, ale není třeba překládat ani kompilovat. | ||
+ | *Zápis programu ve strojovém kódu uvidíme, když si otevřeme spustitelný soubor v hexadecimálním editoru. | ||
+ | <div class="Priklad">Příklad: | ||
+ | * <code>8B 07</code> ... přesune číslo v registru AX do paměti na adresu uloženou v registru BX | ||
+ | </div> | ||
+ | |||
+ | === Nižší programovací jazyky === | ||
+ | <div class="Poznamka">Charakteristika: | ||
+ | * Výsledný zdrojový kód je vždy závislý na konkrétním typu procesoru. | ||
+ | * Jiný typ procesoru má jiné instrukce. | ||
+ | </div> | ||
+ | *Jeden příkaz se přepíše přesně na jednu instrukci procesoru. | ||
+ | několikapísmenný název → instrukce | ||
+ | *Označení „assembler“. | ||
+ | *Oproti strojovému kódu nabízí: | ||
+ | **Instrukcím jsou přiřazeny názvy — není tedy třeba pamatovat si binární kódy instrukcí. | ||
+ | **Pojmenování míst v paměti (proměnné) — nemusíme tedy psát přímo adresy v paměti, můžeme adresy na začátku pojmenovat a pak používat jména. | ||
+ | <div class="Priklad">Příklad: | ||
+ | * <code>MOV AX, [BX]</code> ... přesune číslo v registru AX do paměti na adresu uloženou v registru BX | ||
+ | </div> | ||
+ | |||
+ | Podrobnější příklad viz [[CPU#Procesor_z_pohledu_SW | CPU → Procesor z pohledu SW]]. | ||
+ | |||
+ | === Vyšší programovací jazyky === | ||
+ | <div class="Poznamka">Charakteristika: | ||
+ | * Zdrojový kód není závisly na typu procesoru. | ||
+ | * Stejný kód lze po změně překladače přeložit pro jiný typ procesoru. | ||
+ | </div> | ||
+ | * Příkazy jsou slovní, jsou blíže přirozenému jazyku. | ||
+ | * Jeden příkaz se přeloží na posloupnost instrukcí. | ||
+ | příkaz → posloupnost více instrukcí. | ||
+ | * První byl FORTRAN — vývoj 1953-1957 | ||
+ | * Velká skupina, i mezi nimi jsou rozdíly: | ||
+ | ** mají blíže k přirozenému jazyku, jsou vzdálené principu práce počítače (Java, Pascal, PHP,...) | ||
+ | ** mají blíže instrukcím procesoru (C,...) | ||
+ | <div class="Priklad"> | ||
+ | Příklad: | ||
+ | if (a > 4) { | ||
+ | b--; | ||
+ | } | ||
+ | |||
+ | Překladač vytvoří delší posloupnost instrukcí procesoru: | ||
+ | *Přesun obsahu proměnné A do registru. | ||
+ | *Odečtení hodnoty 4 od obsahu registru. | ||
+ | *Porovnání hodnoty registru proti 0. | ||
+ | *Vyhodnocení výsledku. | ||
+ | *Skok na správné místo v paměti, kde je další kód. | ||
+ | *Provedení dalšího kódu | ||
+ | **Buď odečtení jedničky od hodnoty proměnné B (opět několika instrukcemi). | ||
+ | **Nebo pokračování v kódu programu bez modifikace proměnné B. | ||
+ | </div> | ||
+ | |||
+ | == Skriptovací programovací jazyky (a ty ostatní) == | ||
+ | |||
+ | === Skriptovací jazyky === | ||
+ | * Při jejich návrhu se počítalo s tím, že budou sloužit pro psaní menších programů (skriptů), často jednorázově používaných. | ||
+ | * Typickým předpokládaným použitím byla automatizace úloh v operačním systému a programové ovládání systému. | ||
+ | * Typické rysy: | ||
+ | ** Obvykle bývají dynamicky typované. (Proměnná nemá trvale specifikovaný datový typ.) | ||
+ | ** Často nevyžadují deklaraci proměnných před jejich použitím. | ||
+ | * Syntaxe je navržena tak, aby se kód psal rychle a neobsahoval mnoho textu. | ||
+ | * Jsou vhodné pro psaní jednorázových aplikací či jednoduchých programů (skriptů). | ||
+ | * Typickými skriptovacími jazyky jsou JavaScript, PHP, Python či BASH. | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | Přesto, že skriptovací jazyky byly původně koncipovány pro psaní skriptů, je běžné, že se některé z nich dnes používají pro rozsáhlé aplikace. Typickými příklady jsou PHP či Python. V takovém případě jejich syntaxe klade větší nároky na pečlivou dokumentaci a dodržování konvencí a dohod v týmu ze strany každého programátora. | ||
+ | </div> | ||
+ | |||
+ | === Ostatní jazyky (ne-skriptovací) === | ||
+ | * Mívají silnější typovou kontrolu, bývají staticky typované. | ||
+ | * Syntaxe bývá navržena tak, aby umožňovala spolupráci většího týmu a předcházela chybám programátora — i za cenu většího množství textu. | ||
+ | * Typickými jazyky této kategorie jsou C# či Java. | ||
+ | |||
+ | == Související stránky == | ||
+ | * [[Historie programovacích jazyků]], [[CPU]] |
Aktuální verze z 24. 9. 2024, 07:21
Obsah |
Interpretované a kompilované programovací jazyky
- Programátor píše zdrojový kód jazyka. Tedy „písmenka“ srozumitelné člověku. Tomu ale počítač nerozumí. Je tedy potřeba zdrojový kód přeložit a vytvořit tak odpovídající posloupnost instrukcí procesoru:
Zdrojový kód → instrukce procesoru
- Podle toho, kdy se překlad provádí, dělíme jazyky na interpretované a kompilované.
- Interpretované jazyky
- Programátor vytváří zdrojový kód a předává ho uživateli.
- Uživatel spustí tento kód pomocí interpretu.
- Interpret je program, který čte zdrojový kód, překládá ho a ihned spouští.
- Příklady: Python, PHP, JavaScript,...
- Kompilované jazyky
- Překlad na posloupnost instrukcí provede programátor.
- Příklady: Pascal, C++,...
- Jak je to s Javou?
Zdrojový kód se překládá (kompiluje) na byte-code, který se odesílá uživateli a ten si jej spouští prostřednictvím virtuálního stroje Javy (JVM).
Java tedy není dobrý příklad ani na jednu skupinu jazyků, přebírá část výhod a část nevýhod z obou skupin.
- Výhody interpretovaných
- Program v interpretovaných jazycích je snadno přenositelný mezi platformami, stačí použít správný interpret (viz třeba JavaScript).
- Při hledání chyb je k dispozici přímo zdrojový kód, u některých vývojových prostředí můžete dokonce přímo za běhu kód upravovat a zkoumat jeho chování. To u kompilovaných není možné, protože zdrojový kód již nemáme k dispozici.
- Překladač bývá jednodušší, protože v reálném čase překladu ví, s jakými konkrétními daty pracuje. Překladač kompilovaných jazyků bývá komplexnější, protože výsledný strojový kód musí umět zpracovat jakákoli vstupní data (v době překladu ještě nevíme, jaká konkrétní data budeme zpracovávat).
- Výhody kompilovaných
- Běh programů je rychlejší, nemusí se provádět překlad. Bývá také méně náročný na operační paměť.
- Uživatelům nemusíme předat zdrojový kód. Pokud považujeme zdrojový kód za své „know-how“, je to výhoda. (Zdrojový kód ale poskytnout můžeme, pokud chceme.)
- U kompilovaných jazyků uživatel nemusí mít nainstalovaný interpret, spouštění je jednodušší.
Souhrn:
- Interpretované jazyky jsou obvykle vhodné pro menší, jednorázové projekty, které rychle napíšeme, odladíme a pak už jen udržujeme. Často takové programy děláme pro sebe nebo svoji firmu. Výhodou interpretovaných jazyků je přenositelnost mezi platformami.
- Kompilované jazyky jsou obvykle vhodné pro větší projekty, na kterých spolupracují větší týmy programátorů. Nabízí rychlejší běh aplikace a umožňují precizněji popsat a kontrolovat rozhraní mezi jednotlivými částmi aplikace. Snáze se také v kódu zorientujeme při aktualizacích po delší době.
To, že je nějaký jazyk vhodný pro menší projekty neznamená, že by v něm nešly psát velké projekty. Například v Pythonu, který byl navržen jako skriptovací jazyk pro výuku programování se dnes běžně píše backend rozsáhlých webových aplikací. Psaní rozsáhlých aplikací je u těchto jazyků náročnější na pečlivost programátorů a striktní dodržování konvencí.
Vyšší a nižší programovací jazyky
Strojový kód
- Není třeba překlad, kód lze přímo umístit do paměti.
- Procesor čte kód a provádí ho přímo.
- Procesor:
- čte z paměti posloupnosti byte (čísla)
- a podle čísla rozhoduje, co má dělat.
číslo → instrukce
- K zápisu instrukcí je třeba vymyslet pořadí bitů a znát jejich význam.
- Někdy řazen mezi nižší programovací jazyky, ale není třeba překládat ani kompilovat.
- Zápis programu ve strojovém kódu uvidíme, když si otevřeme spustitelný soubor v hexadecimálním editoru.
-
8B 07
... přesune číslo v registru AX do paměti na adresu uloženou v registru BX
Nižší programovací jazyky
- Výsledný zdrojový kód je vždy závislý na konkrétním typu procesoru.
- Jiný typ procesoru má jiné instrukce.
- Jeden příkaz se přepíše přesně na jednu instrukci procesoru.
několikapísmenný název → instrukce
- Označení „assembler“.
- Oproti strojovému kódu nabízí:
- Instrukcím jsou přiřazeny názvy — není tedy třeba pamatovat si binární kódy instrukcí.
- Pojmenování míst v paměti (proměnné) — nemusíme tedy psát přímo adresy v paměti, můžeme adresy na začátku pojmenovat a pak používat jména.
-
MOV AX, [BX]
... přesune číslo v registru AX do paměti na adresu uloženou v registru BX
Podrobnější příklad viz CPU → Procesor z pohledu SW.
Vyšší programovací jazyky
- Zdrojový kód není závisly na typu procesoru.
- Stejný kód lze po změně překladače přeložit pro jiný typ procesoru.
- Příkazy jsou slovní, jsou blíže přirozenému jazyku.
- Jeden příkaz se přeloží na posloupnost instrukcí.
příkaz → posloupnost více instrukcí.
- První byl FORTRAN — vývoj 1953-1957
- Velká skupina, i mezi nimi jsou rozdíly:
- mají blíže k přirozenému jazyku, jsou vzdálené principu práce počítače (Java, Pascal, PHP,...)
- mají blíže instrukcím procesoru (C,...)
Příklad:
if (a > 4) { b--; }
Překladač vytvoří delší posloupnost instrukcí procesoru:
- Přesun obsahu proměnné A do registru.
- Odečtení hodnoty 4 od obsahu registru.
- Porovnání hodnoty registru proti 0.
- Vyhodnocení výsledku.
- Skok na správné místo v paměti, kde je další kód.
- Provedení dalšího kódu
- Buď odečtení jedničky od hodnoty proměnné B (opět několika instrukcemi).
- Nebo pokračování v kódu programu bez modifikace proměnné B.
Skriptovací programovací jazyky (a ty ostatní)
Skriptovací jazyky
- Při jejich návrhu se počítalo s tím, že budou sloužit pro psaní menších programů (skriptů), často jednorázově používaných.
- Typickým předpokládaným použitím byla automatizace úloh v operačním systému a programové ovládání systému.
- Typické rysy:
- Obvykle bývají dynamicky typované. (Proměnná nemá trvale specifikovaný datový typ.)
- Často nevyžadují deklaraci proměnných před jejich použitím.
- Syntaxe je navržena tak, aby se kód psal rychle a neobsahoval mnoho textu.
- Jsou vhodné pro psaní jednorázových aplikací či jednoduchých programů (skriptů).
- Typickými skriptovacími jazyky jsou JavaScript, PHP, Python či BASH.
Přesto, že skriptovací jazyky byly původně koncipovány pro psaní skriptů, je běžné, že se některé z nich dnes používají pro rozsáhlé aplikace. Typickými příklady jsou PHP či Python. V takovém případě jejich syntaxe klade větší nároky na pečlivou dokumentaci a dodržování konvencí a dohod v týmu ze strany každého programátora.
Ostatní jazyky (ne-skriptovací)
- Mívají silnější typovou kontrolu, bývají staticky typované.
- Syntaxe bývá navržena tak, aby umožňovala spolupráci většího týmu a předcházela chybám programátora — i za cenu většího množství textu.
- Typickými jazyky této kategorie jsou C# či Java.