doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Podobné dokumenty
Úvod. Proč studovat programovací jazyky? Klasifikace jazyků. Co je to programovací jazyk?

Úvod. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Úvod. Co je to programovací jazyk? Proč studovat programovací jazyky? Klasifikace jazyků

Programovací jazyky. Obsah. Proč používáme programovací jazyky? Programovací jazyk

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

katedra informatiky FEI VŠB-TUO Standardizovaný nástroj pro komunikaci

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Základy programování Programovací jazyky. doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

IB111 Úvod do programování skrze Python Přednáška 13

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

IB111 Programování a algoritmizace. Programovací jazyky

Úvod. Programovací paradigmata

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Matematika v programovacích

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Objektově orientovaný přístup

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

11. Přehled prog. jazyků

Program a životní cyklus programu

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

1. Úvod. Podmínky absolvování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Programovací jazyk univerzální notace pro zápis algoritmů, implementována.

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Programovací jazyky Přehled a vývoj

IB111 Úvod do programování skrze Python Přednáška 13

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

DTP Základy programování Úvod do předmětu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Martin Hejtmánek hejtmmar

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Softwarové komponenty a Internet

Jaký programovací jazyk učit jako první a jak ho učit?

Programovací jazyk Pascal

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

1. Úvod. Obsah předmětu =komparativní studie program. jazyků

Abstraktní datové typy: zásobník

Generování vnitřní reprezentace programu

Algoritmizace. Cíle předmětu

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Principy objektově orientovaného programování

Functional and Logic Programming Functional languages

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Úvod do programovacích jazyků (Java)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Struktura programu v době běhu

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

O datových typech a jejich kontrole

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Úvod do programování

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Úvod. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík,2016

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Maturitní témata Školní rok: 2015/2016

IUJCE 07/08 Přednáška č. 1

Úvod do programování - Java. Cvičení č.4

Úvod do programovacích jazyků (Java)

Programy v prostředí operačního systému

Funkcionální programování. Kristýna Kaslová

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Základy C++ doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Skriptovací jazyky. Obsah

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Programové prostředky IS/IT

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

TÉMATICKÝ OKRUH Softwarové inženýrství

Algoritmy a jejich znázorňování.

Profilová část maturitní zkoušky 2017/2018

Překladač a jeho struktura

Algoritmizace a programování

Sada 1 - Základy programování

Funkcionální programování

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Operační systémy. Cvičení 4: Programování v C pod Unixem

Vytváření a použití knihoven tříd

Řídicí struktury. alg3 1

3 KTE / ZPE Informační technologie

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

První kapitola úvod do problematiky

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

8 Třídy, objekty, metody, předávání argumentů metod

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Programovací jazyk C# Úvod do programování v C#

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

Transkript:

Úvod doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Co je to programovací jazyk? Louden: Notace pro popis výpočtů ve formě čitelné pro stroj i pro člověka. Reade: Programovací jazyk je konvence pro psaní popisů, které lze vyhodnotit. Stansifer: Cílem jazyka je komunikace [ ] Programovací jazyky se používají ke komunikaci s literárně nadanými stroji. Programovací jazyky a překladače 2 1

Proč studovat programovací jazyky? Učíme-li se nové jazyky, nacházíme nové postupy pro vyjádření svých myšlenek (i když tyto jazyky k vyjadřování nepoužíváme) Vytváření nástrojů a metodologií pro vyhodnocení jazyků určených ke konkrétním projektům Zlepšení schopnosti učit se nové jazyky Zlepšení schopnosti navrhovat nové jazyky (většina velkých programových balíků obsahuje i vlastní programovací jazyk) Vytváření lepších programů v konkrétních jazycích lepší porozumění výhodám a nevýhodám konkrétních struktur Pomoc při výběru správného jazyka pro zadaný úkol. Programovací jazyky a překladače 3 Klasifikace jazyků Imperativní - programy jsou posloupnosti základních příkazů (nejčastěji přiřazení) s odpovídajícími řídicími strukturami (např. cykly), jež určují, které příkazy se budou provádět a v jakém pořadí. C, Pascal, Fortran, JSI Objektově orientované - programy jsou kolekcí komunikujících objektů. Často se s těmito jazyky spojuje dědičnost a polymorfismus. Simula, Smalltalk-80, C++, Java, C# Programovací jazyky a překladače 4 2

Klasifikace jazyků Deklarativní jazyky popisujeme, co se má vypočítat, ne jak. Logické - programy jsou kolekcemi tvrzení v konkrétní logice (nejčastěji predikátové) Prolog, Goedel Funkcionální - programy se popisují jako soustavy rovností s aplikacemi funkcí na hodnoty. FP, LISP, Scheme, ML, Haskell Programovací jazyky a překladače 5 Úrovně jazyků Strojově orientované jazyky instrukce, adresy přímo závislé na konkrétním procesoru náročný vývoj aplikací Jazyky vyšší úrovně Delší doba překladu a generování cílového kódu Větší nároky na čas a paměť v době běhu programu Přenositelnost - podstatně menší závislost programů na konkrétním technickém vybavení Čitelnost Prostředky abstrakce - abstrakce dat a operací Kontrola a detekce chyb - ještě před spuštěním programu Programovací jazyky a překladače 6 3

Úloha překladače Překlad jednoho jazyka na druhý Co je to jazyk? Přirozený jazyk složitá, nejednoznačná pravidla Formální jazyk - popsán gramatikou Co je to překlad? Zobrazení T : L1 L2 L1: zdrojový jazyk (např. C++) L2: cílový jazyk (např. strojový kód P4) Programovací jazyky a překladače 7 Úloha překladače Vyhledání chyb ve zdrojovém textu Snažíme se co nejvíce chyb objevit v době překladu Zotavení po chybě překladač je schopen pokračovat v činnosti a najít další chyby Oprava chyb náročné, nepoužívá se Vytvoření informací pro ladění programu Jména proměnných a funkcí Odkazy do zdrojového textu Programovací jazyky a překladače 8 4

Zdrojový jazyk Přirozený jazyk Předmět zájmu (počítačové) lingvistiky Programovací jazyk C, C++, Java, C#, Prolog, Haskell Speciální jazyk Jazyky pro popis VLSI prvků (VHDL) Jazyky pro popis dokumentů (LaTeX, HTML, XML, RTF) Jazyky pro popis grafických objektů (PostScript) Programovací jazyky a překladače 9 Cílový jazyk Strojový jazyk Absolutní binární kód Přemistitelný binární kód (.obj,.o) Jazyk symbolických instrukcí Vyšší programovací jazyk (např. C) Jazyk virtuálního procesoru Java Virtual Machine MSIL pro.net Programovací jazyky a překladače 10 5

Kompilační překladač Programovací jazyky a překladače 11 Interpretační překladač Programovací jazyky a překladače 12 6

Využití technologie překladačů Klasické překladače základní součást vývojových nástrojů v operačním systému křížové překladače (cross compilers) - vývoj programů pro vestavné systémy apod. Specializované překladače systémy pro formátování textů (nroff, troff, LaTeX) silikonové překladače - popis a vytváření struktury VLSI obvodů příkazové interprety v operačním systému (shell) databázové systémy dotazy, SQL reprezentace grafických objektů - jazyk PostScript skriptovací jazyky možnost rozšíření určitého systému uživatelem Programovací jazyky a překladače 13 Historie teoretické začátky Alonzo Church 30. léta - lambda-kalkul jako základ teorie vyčíslitelnosti Alan Turing ukázal, že stroj může řešit problémy "programování ve strojovém kódu omezuje rychlost a snadnost programování počítačů John von Neumann pojem paměti základní model většiny současných počítačů návrh zkratek pro Mark I Programovací jazyky a překladače 14 7

Historie první jazyky kolem 1946 Konrad Zuse Plankalkul použit také pro šachy rukopis publikován až v roce 1972, nebyl nikdy implementován 1949 John Mauchly - Short Code první počítačový jazyk skutečně použitý na elektronickém zařízení určen pro zadávání rovnic "ručně kompilovaný" jazyk 1951 Grace Murray Hopper prosazovala vytvoření vyšších jazyků pracovala na návrhu prvního překladače zavedla pojem "počítačový virus" Programovací jazyky a překladače 15 Historie první překladače Výraz "kompilátor" poč. 50. let - Grace Murray Hopper překlad jako 'kompilace posloupnosti podprogramů z knihovny' automatické programování - kompilace v dnešním slova smyslu, považovalo se za nemožné 1954-57 FORTRAN (FORmula TRANslator) John Backus, IBM problémově orientovaný, strojově značně nezávislý, optimalizace (nutná v konkurenci s JSI) prokázala se vhodnost kompilovaných jazyků vysoké úrovně ad hoc struktury - komponenty a technologie se vymýšlely během výstavby překladače překladače se chápaly jako něco tajemného, složitého a drahého (18 člověkoroků - jeden z největších projektů v té době) Programovací jazyky a překladače 16 8

FORTRAN C C Vypocet funkce faktorial C INTEGER FUNCTION FACT(N) IMPLICIT NONE INTEGER N, I, F F = 1 DO 10 I = 1,N F = F * I 10 CONTINUE FACT = F END PROGRAM P1 IMPLICIT NONE INTEGER N, F, FACT READ(*,*) N F = FACT(N) WRITE(*,*) "Fact = ", F END Programovací jazyky a překladače 17 Historie vyšší jazyky 1958-59 LISP 1.5 (List Processing) John McCarthy, M. I. T. první funkcionální jazyk - implementace lambda-kalkulu možnost imperativního stylu programování 1958-60 ALGOL 60 (Algorithmic Language) J. Backus, P. Naur bloková struktura, složené příkazy, rekurze syntax poprvé popsána formálně gramatikou (BNF) koncem 60. let se stal nejpopulárnějším jazykem v Evropě základ mnoha dalších programovacích jazyků Programovací jazyky a překladače 18 9

LISP (defun quicksort (vec l r) (let ((i l) (j r) (p (svref vec (round (+ l r) 2)))) (while (<= i j) (while (< (svref vec i) p) (incf i)) (while (> (svref vec j) p) (decf j)) (when (<= i j) (rotatef (svref vec i) (svref vec j)) (incf i) (decf j))) (if (> (- j l) 1) (quicksort vec l j)) (if (> (- r i) 1) (quicksort vec i r))) vec) Programovací jazyky a překladače 19 ALGOL 60 begin integer N; ReadInt(N); begin real array Data[1:N]; real sum, avg; integer i; sum:=0; for i:=1 step 1 until N do begin real val; ReadReal(val); Data[i]:=if val<0 then -val else val end; for i:=1 step 1 until N do sum:=sum + Data[i]; avg:=sum/n; PrintReal(avg) end end Programovací jazyky a překladače 20 10

Historie vyšší jazyky 1960 COBOL (Common Business Oriented Language) pro vytváření rozsáhlých programů k vládním a obchodním účelům formalizovaný anglický text, čitelný pro manažery zavedl propracované záznamové struktury vytvořen konferencí CODASYL (Conference of Data Systems and Languages), v roce 1968 standardizován ANSI 1964 BASIC (Beginners All-Purpose Symbolic Instruction Code) John G. Kemeny, Thomas E. Kurz, Dartmouth University první implementace je kompilátor (1. 5. 1964 04:00) 1975 Tiny BASIC běží na mikropočítači s 2KB RAM 1975 Bill Gates, Paul Allen prodávají firmě MITS 1963-64 PL/I (Programming Langugage I) kombinace jazyků COBOL, FORTRAN, ALGOL 60 snaha, aby obsahoval "všechno pro všechny" => příliš složitý zavedl konstrukce pro souběžné zpracování a výjimky Programovací jazyky a překladače 21 COBOL IDENTIFICATION DIVISION. PROGRAM-ID. Iter. AUTHOR. Michael Coughlan. DATA DIVISION. WORKING-STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS. 01 Num2 PIC 9 VALUE ZEROS. 01 Result PIC 99 VALUE ZEROS. 01 Operator PIC X VALUE SPACE. PROCEDURE DIVISION. Calculator. PERFORM 3 TIMES DISPLAY "Enter First Number : " ACCEPT Num1 DISPLAY "Enter Second Number : " ACCEPT Num2 DISPLAY "Enter operator (+ or *) : " ACCEPT Operator IF Operator = "+" THEN ADD Num1, Num2 GIVING Result END-IF IF Operator = "*" THEN MULTIPLY Num1 BY Num2 GIVING Result END-IF DISPLAY "Result is = ", Result END-PERFORM. STOP RUN. Programovací jazyky a překladače 22 11

PL/I FINDSTRINGS: PROCEDURE OPTIONS(MAIN) /* načte STRING a poté vytiskne každý následující shodující se řádek */ DECLARE PAT VARYING CHARACTER(100), LINEBUF VARYING CHARACTER(100), (LINENO, NDFILE, IX) FIXED BINARY; NDFILE = 0; ON ENDFILE(SYSIN) NDFILE=1; GET EDIT(PAT) (A); LINENO = 1; DO WHILE (NDFILE=0); GET EDIT(LINEBUF) (A); IF LENGTH(LINEBUF) > 0 THEN DO; IX = INDEX(LINEBUF, PAT); IF IX > 0 THEN DO; PUT SKIP EDIT (LINENO,LINEBUF)(F(2),A) END; END; LINENO = LINENO + 1; END; END FINDSTRINGS; Programovací jazyky a překladače 23 Historie vyšší jazyky 1968 ALGOL 68 značně rozšířená verze jazyka ALGOL 60 příliš složitý na pochopení i implementaci strukturované datové typy, reference formální definice syntaxe i sémantiky dynamické přidělování paměti, garbage collection, moduly 1966 LOGO "želví" grafika určen pro výuku programování Programovací jazyky a překladače 24 12

Historie strukturované programování 1968-71 Pascal Niklaus Wirth, ETH Zurich jednoduchý jazyk, určen pro výuku programování P-kód instrukce virtuálního procesoru specializované procesory pro P-kód 1972 C Dennis Ritchie určen částečně pro návrh přenositelných operačních systémů Programovací jazyky a překladače 25 Pascal program P3; var F: Text; LineNo: Integer; Line: array [1..60] of Char; begin if ParamCount < 1 then begin WriteLn('Pouziti: opis <inp>'); Halt; end; Reset(F, ParamStr(1)); LineNo := 1; while not Eof(F) do begin ReadLn(F, Line); WriteLn(LineNo:4, ': ', Line); LineNo := LineNo + 1; end; end. Programovací jazyky a překladače 26 13

Historie modulární programování 1980 Modula-2 velmi dobrá podpora modularity, silná typová kontrola, dynamická pole, koprogramy 1980-83 Ada Jean Ichibah, Honeywell Bull pro US DoD podpora programování ve velkém, tvorba spolehlivého software silně typovaný jazyk, výjimky, modularita, paralelismus standardizace (Ada 83, Ada 95), oficiální validace překladačů do 1997 jediný přípustný jazyk v projektech DoD 1985-88 Oberon Wirth, Gutknecht, ETH Zurich určen pro výuku, objektově orientované vlastnosti Programovací jazyky a překladače 27 Modula-2 DEFINITION MODULE Storage; VAR ClearOnAllocate : BOOLEAN; PROCEDURE Allocate( VAR a: ADDRESS; size: CARDINAL ); PROCEDURE Free( VAR a: ADDRESS ); PROCEDURE Deallocate( VAR a: ADDRESS; size: CARDINAL ); PROCEDURE Reallocate( VAR a: ADDRESS; size: CARDINAL ); PROCEDURE MemorySize( a : ADDRESS ): CARDINAL; TYPE TMemoryStatus = RECORD MemoryLoad : LONGCARD; (* percent of memory in use *) TotalPhys : LONGCARD; (* bytes of physical memory *) END; PROCEDURE GetMemoryStatus( VAR MemoryStatus : TMemoryStatus ); END Storage. Programovací jazyky a překladače 28 14

Ada with TEXT_IO; use TEXT_IO; procedure faktorial is package IIO is new INTEGER_IO(Integer); use IIO; cislo: Integer; function f(n : Integer) return Integer is begin if n < 2 then return 1; else return n*f(n-1); end if; end f; begin PUT("Zadejte cislo:"); GET(cislo); PUT(f(cislo)); SKIP_LINE; end faktorial; Programovací jazyky a překladače 29 Historie objektově orientované programování 1964-67 SIMULA 67 Ole Dahl, Kristen Nygaard (Norsko) pro vytváření diskrétních simulačních modelů abstraktní datové typy, třídy, jednoduchá dědičnost - základ objektově orientovaných jazyků procesy, koprogramy 1972 Smalltalk Alan Kay, Xerox původně pouze experimentální jazyk čistě objektově orientovaný - vše je objekt, předávání zpráv první jazyk podporující GUI s okny zpočátku interpretovaný, nyní překlad do abstraktního strojového kódu, příp. Just-in-time generování kódu 1982-85 C++ Bjarne Stroustrup, AT&T Bell Labs odvozen z jazyka C => mnoho nebezpečných vlastností, např. dynamické přidělování paměti bez GC, aritmetika s ukazateli 1997 ISO a ANSI standard Programovací jazyky a překladače 30 15

Historie objektově orientované programování 1984-85 Objective C Brad J. Cox rozšíření jazyka C, pro OOP jsou určeny nové konstrukce považuje se za mnohem lepší než C++, volně dostupné překladače se objevily příliš pozdě hlavní programovací jazyk pro Apple NeXT a OS Rhapsody 1994-95 Java James Gosling, Sun Microsystems původně pro vestavná zařízení, později široké použití v rámci WWW strojově nezávislý binární kód (Java bytecode), použití just-in-time překladu 2000-02 C# Anders Hejlsberg, Microsoft základní jazyk architektury.net implementován i pro Linux (projekt Mono) a BSD Unix (projekt Rotor) Programovací jazyky a překladače 31 C# using System; using System.Windows.Forms; using System.Drawing; public class Sample : Form { [STAThread] public static int Main(string[] args) { Application.Run(new Sample()); return 0; } public Sample() { Button btn = new Button(); btn.text = "OK"; Controls.Add(btn); } } Programovací jazyky a překladače 32 16

Historie shrnutí Základní principy překladačů už jsou přes 30 let stále stejné a tvoří součást jádra informatiky I nejstarší programovací jazyky jsou stále živé tradice, investice, vývoj Z historie se můžeme poučit inspirace, ověřené principy i chyby Programovací jazyky a překladače 33 17