OrgPad logo

Vývoj a rozdělení programovacích jazyků

Created by Jindřich Zdráhal

Text vypracoval Jindřich Zdráhal a konstruktivní kritiku očekává na zdrahal@oaveseli.cz --- Stručný vývoj a rozdělení programovacích jazyků --- Zveřejněno pod licencí WTFPL pokud u konkrétních textů / obrázků není uvedeno jinak.

#IT, #historie, #programování, #vývoj

Vývoj a rozdělení programovacích jazyků

Programovací jazyk

Způsob zápisu algoritmů, který může být proveden počítačem. Zápis konkrétního algoritmu tímto způsobem se nazývá program. 

Programovací jazyk je komunikačním nástrojem mezi programátorem, který v programovacím jazyce formuluje postup řešení daného problému, a počítačem, který program provádí technickými prostředky. Programovací jazyk je vlastně soubor pravidel pro zápis algoritmu, odborně řečeno se jedná o formální jazyk. 

Programovací jazyky existují v řadě verzí a implementací, mluvíme někdy o dialektech programovacího jazyka. Existují také standardy pro programovací jazyky, pro jednotlivé implementace se často uvádí, kterému standardu vyhovuje. 

Text převzat z Wikipedie pod licencí CC BY-SA 3.0

Zdroje

Dělení programovacích jazyků vývojově

7f512e1f-712f-4393-be6d-c79cf9a74b61

Nižší jazyky

Mezi nižší jazyky se počítají jazyky 1. a 2. generace. Jsou strojově orientované. Příkazy jazyka = instrukce procesoru. 

Výhody

Nevýhody

Dnes už se moc nepoužívají a pokud ano, tak pro rychlé programy pro jednočipy, psaní jader operačních systémů a podobně.

Vyšší jazyky (formální jazyky)

Většina jazyků (od 3. generace výš).

Orientace na člověka.

Zapisuje se strukturovaně = srozumitelný zápis.

Není tak závislý na procesoru. 

procedurální / imperativní / příkazové

Jazyky hlavně 3. a 4. generace. 

Programátor zadává příkazy jeden za druhým

sekvenční

Jedná se o posloupnost (sekvenci) příkazů, cykly, větvení (podmínky).  

Např.: Cobol, Pascal, C, Basic 

objektově orientované - OOP

Při programování se používají objekty (data + metody) a vztahy mezi nimi. Další důležité pojmy OOP jsou zapouzdření, polymorfismus, dědičnost, abstrakce.

Např.: C++, Java, JavaScript, Python 

neprocedurální / neimperativní / deklarativní

U těchto jazyků není pevná struktura programu. Jsou definována pravidla a mantinely programu.  

Jedná se o programy 5. generace 

funkcionální

Program je množina (ale není to posloupnost) funkcí. Většinou neexistují proměnné, ale jen seznamy dat. 

Např.: Lisp 

logické

Program je množina pravidel a odvozovacích pravidel. Znají proměnné. Využívají se hlavně v AI. 

Např.: Prolog 

dělení jazyků podle zpracování

kompilované jazyky

Zdrojový kód (to co jsme naprogramovali) je za pomoci překladače (kompilátoru, compiler) celé naráz převedeno do strojového kódu (tomu, čemu rozumí procesor) a vznikne samostatně spustitelný program. Překladač při tomto překladu zkontroluje syntaktickou kontrolu celého zdrojového kódu (= jestli je to zapsané podle pravidel daného jazyka). Pokud tam najde chybu, tak zastaví kompilaci a vypíše seznam chyb. 

+ syntaktická kontrola celého programu najednou, výsledek jde samostatně spustit, výsledný program je rychlejší než interpretovaný, do kódu se nedá zasahovat.
- při drobné změně se musí celý program znovu přeložit, závislost na platformě. 
= např.: pascal, C/C++ 
8ba3881f-a4d1-4634-b562-ae37ebbdef92

interpretované jazyky

Zdrojový kód není přeložený celý najednou a tak nevzniká samostatně spustitelný program. Interpret převádí zdrojový kód na strojový kód postupně (řádek po řádku). Provádí syntaktickou kontrolu jen tohoto čteného řádku a hned jej provede. Takže se na chyby přijde až při běhu programu a program se tím přeruší. 

+ při změně zdrojového kódu se nemusí provádět znovu překlad celého programu, interpret může existovat pro různé systémy (windows, linux, android,…) a pak je to platformě nezávislé, jednodušší vývoj protože nemusíme (a nemůžeme) spravovat paměť, stabilita (interpret předejde při intrepretaci chybám a ukončí program), editace po částech. 
- je pomalejší, hůř se v něm hledají chyby (projeví se až když by se mělo provádět to, co je špatně a pak to teprve ukončí program), zranitelnost (program se k uživateli dostane jako zdrojový kód a tak se dá jednoduše modifikovat a nebo ukradnout části kódu)  
= např.: php 
74778bdf-a795-4d29-9c61-349c6f9d608d

jazyky s virtuálním strojem

Spojení obou přístupů. Zdrojový kód se nejprve přeloží překladačem do mezikódu (v Javě se mu říká bytecode). Tento mezikód je v podstatě strojový kód, ale zjednodušený a upravený. Tento mezikód se spustí na virtuálním stroji, který jej postupně interpretuje procesoru. V Javě je to JVM (Java Virtual Machine). 

+ vlastně všechno z obou předchozích 
- těžko říct 
= např.: Java, C# 
 
6ee12ff4-bf22-445e-8c57-ab419029b97d

značkovací jazyky

Značkovací jazyk (anglicky markup language) je v informatice prostředek k obohacení textu o dodatečné informace – nejčastěji o významu, struktuře a způsobu zobrazování jednotlivých částí textu. Dodatečné informace se vkládají přímo do textu v podobě značek (anglicky tags), příkazů (anglicky commands) nebo direktiv.

Tradičními představiteli značkovacích jazyků byly nástroje pro formátování textu – programy nroff, troff z operačního systému Unix či typografický systém TeX. Za značkovací jazyk lze označit i PostScript a RTF.

Ukázka 

<h1>Nadpis</h1>
<p>Text prvního odstavce se <em>zvýrazněným</em> slovem.</p>

Text převzat z Wikipedie pod licencí CC BY-SA 3.0

skriptovací jazyky

Navrženy především k automatizaci úloh. Obecná definice toho, co musí mít skriptovací jazyk neexistuje. Ale obvykle se za skriptovací jazyky považují ty, které mají tyto vlastnosti:

Program napsaný v tomto jazyce se označuje jako skript.

+ není nutné mít nainstalovaný kompilátor a provádět kompilace,
+ snadnější údržba, vývoj a správa kódu,
+ některé skripty umožňují interpretaci kódu z řetězce (typicky je tato funkce pojmenovaná eval)

- nižší rychlost,
- větší paměťová náročnost,
- větší omezení,
- snadné zavlečení chyby a obtížnější hledání. 

Text převzat z Wikipedie pod licencí CC BY-SA 3.0

 

popisné (deskriptivní)

Konstrukce slouží k popisu toho, co jsou informace v dokumentu zač. Tzn., co je nadpis, co je odstavec, co odkaz.

Např.:

prezentační

Zaměření na to, jak bude výsledný text vypadat.

Např.:

výkonné (procedurální)

Obsahují i výkonné instrukce na úrovni programovacího jazyka - určitou formu paměti / proměnných a nástroje pro práci s nimi. Zpravidla umožňují velmi detailně popsat vizuální stránku výstupu.

Např.:

3,5. generace

Objektově orientované jazyky (OOP) - někde se uvádí jako jazyky 3½. generace 

Někdy se uvádí jako jazyky 4. generace

Vývoj programovacích jazyků

1. generace - strojový kód

Nejstarší typ programovacího jazyka. 

Instrukce jsou tvořeny posloupností nul a jedniček (bitů). 

Jazyk strojového kódu je hardwarově závislý. 

Obtížné hledání chyb. 

Především jednoúčelové programy, obvykle s využitím v matematice a fyzice. 

 

2. generace - jazyk symbolických adres (Assembler)

Jazyk nižší úrovně 

Obecné příkazy (např. „načti data“, „zapiš data“) jsou zkracovány pomocí symbolických názvů 

Příkazy překládá do strojového kódu procesoru speciální program – assembler  

Jazyk je také hardwarově závislý 

 

3. generace - procedurální jazyky

Vyšší úroveň programování (podoba s lidskými jazyky)

Příkazy odvozené z anglických slov

Programátor zapisuje zdrojový kód; překladač provede interpretaci nebo překlad do strojového kódu (strojového jazyka)

Koncepce strukturovaného programování

Jazyky: Fortran, Cobol, C, Pascal, Basic

4. generace - problémově orientované jazyky

Vyšší úroveň programovacích jazyků  

Využívají mnoho vestavěných funkcí, bývají často napojeny na databázi 

Snaha o zjednodušení a zrychlení práce programátora 

Jazyky: C++, Java, ... 

 

5. generace - přirozené jazyky

Neprocedurální programování: 

Klíčovým pojmem je rekurze. 

Jazyky: PrologLisp, Clojure

 

Fortran

Y = 2 + 5 

Cobol

add 2, 5 giving y 

Basic

let y = 2 + 5; 

C

y = 2+5;

IBM System 370 strojový kód

00000011 00001011 00100100 01000011 00001010 00000011 00000011 00000011 00000011 00000010 00000011 00001001 00000111 00000011 00001001 00000011 00000011 00000011 00000011 00010100 00000011 00000011 00000011 00000011 

IBM System 370 assembler

L R2, = F’2’  

A R2, = F’5’  

ST R2, Y 

Python

y = 2 + 5 

Lisp

(+ 2 5)

ukázky programů v libovolných jazycích

Ukázky kódu jsou převzaty ze stránky RosettaCode.org pod licencí  GNU Free Documentation License 1.2