Co je to programovací jazyk

V oboru softwarového inženýrství je pojem programovací jazyk jeden z nejzákladnějších a nejčastěji zmiňovaných pojmů. I když to v podstatě pro programátorskou praxi není nezbytné a každý programátor intuitivně tuší co je to programovací jazyk, je ale dobré porozumět tomu co to programovací jazyk zkutečně je, jaké vlastnosti má či může mít a jak tyto vlastnosti v praxi využít. A i když technicky není nezbytně nutné aby programátor znal teorii programovacích jazyků, je díky této znalosti možné více porozumět technologiím se kterými pracuje a tím zlepšit schopnost řešit složité problémy.

Komunikační prostředek

Programovací jazyk je ve své podstatě to samé jako přirozený jazyk pro dorozumívání mezi dvěma lidmi. Rozdíl je pouze v tom, že programovací jazyk vznikl uměle a byl primárně navržen k tomu aby popisoval nějakou činnost – algoritmus. Přirozený jazyk je tak mnohem složitější, barvitější a umožňuje popisovat i složitější konstrukty.

Definice programovacího jazyka podle serveru Wikipedia zní: Programovací jazyk je prostředek pro zápis algoritmů, jež mohou být provedeny na procesoru, kde procesor nemusí nutně vyjadřovat pouze elektronický obvod, ale obecně libovolný systém schopný vykonat zmíněný algoritmus. Z toho vyplývá že programovací jazyk je komunikační nástroj mezi programátorem a procesorem.

Definice programovacího jazyka

Programovací jazyk je tak definován jako obecný jazyk L tvořený nad abecedou ∑, s gramatickými pravidly G, pomocí kterého je možné popsat požadovaný algoritmus.

Programovací jazyky dělí na tzv:

  • Turingovsky úplné
  • Turingovsky neúplné

Turingovsky úplný jazyk je takový, který umožňuje popsat libovolný spočetný algoritmus. Spočetný algoritmus je pojem z teorie algoritmů a vyjadřuje, že daný algoritmus je možné popsat pomocí konečného počtu kroků – algoritmus je konečný. Většina programovacích jazyků jsou Turingovsky úplné, tak aby byl programovací jazyk univerzální pro popis libovolného problému.

Turingovsky neúplný programovací jazyk je takový jazyk, který neumožňuje popsat veškeré typy algoritmů. Takové programovací jazyky jsou tak v praxi omezené na určité typy úloh pro které jsou optimalizované. Typickým příkladem Turingovsky neúplného jazyka je jazyk SQL, který slouží k vyhledávání záznamů a třídění dat v databázi.

Procesor

Procesor reprezentuje libovolný systém, který je schopen vykonávat nějaký základní soubor elementárních operací (instrukcí). Jedná se o pojem z teorie algoritmů a vyjadřuje prostředek, který dokáže realizovat (vykonat) zadaný algoritmus. Procesorem tak může být například elektronický obvod v počítači, mechanický stroj, nebo i samotný člověk (například kuchař vařící podle kuchařky). Algoritmus je pak chápán jako popis nějaké přesně definované činnosti, která má nějaký vstup, výstup a konečný počet kroků k jeho získání.

Principem procesorů je ale schopnost vykonávání pouze omezeného počtu základních operací jejichž kombinací je možné realizovat libovolný algoritmus. Libovolný algoritmus je tak tvořen sekvencí (kombinací) po sobě jdoucích základních operací, které je daný procesor schopen vykonat.

Zdrojový kód a program

Zápisu algoritmu v nějakém programovacím jazyce se říká zdrojový kód. Zdrojový kód uložený v nějakém souboru se poté nazývá zdrojový soubor. Zdrojový kód je někdy také nesprávně označován jako program. Program je sekvence elementárních operací, které je daný procesor schopen vykonat. To znamená, že aby se ze zdrojového kódu stal program je nutné jej nejprve transformovat – přeložit na výslednou sekvenci instrukcí procesoru. Výjimku tvoří tzv. interpretované programovací jazyky, kde zdrojový kód tvoří instrukce pro interpret, který na této úrovni tvoří procesor algoritmu. Jedná se tak o zdrojový kód a program současně. Typickým příkladem interpretovaného jazyka je jazyk Python.

Zdrojový kód může být reprezentován buď pomocí textu a nebo pomocí grafických symbolů definující základní operace daného jazyka. Nejčastějším případem je textová forma, která umožňuje rychlý a jednoduchý zápis rozsáhlých sekvencí kódu a velkou podporu pro vývojová prostředí ve kterých je zdrojový kód zapisován. Typickým příkladem textových programovacích jazyků jsou jazyky C, C++ C#, Python, …

#include <stdio.h>

int main(int argc, char ** argv)
{
    printf("Hello world\n");
    return 0;
}

Grafická forma zdrojového kódu má ale také své výhody. Využívají se zejména pro zápis sekvencí logických funkcí, které jsou díky tomu velice přehledné. Nejčastěji používaným grafickým programovacím jazykem je jazyk Ladder diagram, který je využíván hlavně pro účely programování logických automatů (PLC).

Ladder diagram v programu Siemens TIA portal

Lexikální prvky programovacích jazyků

Každý programovací jazyka ať už je jeho reprezentace grafická nebo textová obsahuje určité lexikální konstrukce, pomocí kterých se skládají výsledné věty. Jako větu v souvislosti s programovacím jazykem je možné si představit nějakou sekvenci klíčových slov jazyka (případně grafických symbolů), které dohromady mají za úkol popsat nějakou část algoritmu a nebo předat informace překladači/iterpreteru.