Netradiční programovací jazyky

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

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

Martin Hejtmánek hejtmmar

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

IB111 Programování a algoritmizace. Programovací jazyky

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

HISTORIE. Principy počítačů I. Literatura. Počátky historie počítačů. Počátky historie počítačů. Dnešní chápání počítače

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

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

VY_32_INOVACE_INF.15. Dějiny počítačů II.

1 Historie výpočetní techniky

Logické programování

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Matematika v programovacích

Úvod. Programovací paradigmata

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

Jak to celé vlastně začalo

Historie počítačů 1. Předchůdci počítačů Počítače 0. a 1. generace

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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í

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

Historie výpočetní techniky

Seminární práce z Teorie ICT

Sazba zdrojových kódů (balíček listings)

Úvod do informačních technologií

Úvod SISD. Sekvenční výpočty SIMD MIMD

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

(12) Historie počítačů. Vznik před 5000 lety Usnadňoval počítání s čísly Dřevěná / hliněná destička, do níž se vkládali kamínky (tzv.

Úvod do informačních technologií

Osnova. Základy informatiky. 1. Přednáška Historie. Úvod. Kategorie počítačů z pohledu hardware

Programovací jazyky Přehled a vývoj

Úvod do programování. Lekce 1

Principy počítačů. Historie. Martin Urza

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

VISUAL BASIC. Přehled témat

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

1. Historie počítacích strojů Předchůdci počítačů. 2. Vývoj mikropočítačů Osmibitové mikropočítače Šestnácti a dvaatřicetibitové počítače IBM

PROGRAMOVÁNÍ V SHELLU

Poslední nenulová číslice faktoriálu

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

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

Úvod do programování (ALG ) F F U K. Jonathan L. Verner. Department of Logic

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

Základy algoritmizace a programování

Složitost Filip Hlásek

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

Programování - úvod. Programování. Proces programování. Vlastnosti dobrého programu: Kapitola seznamuje se základními pojmy programování.

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

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

Program a životní cyklus programu

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Historie výpočetních pomůcek

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

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

Princip funkce počítače

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

Soubory. Hung Hoang Dieu. Department of Mathematics Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 7

Základy algoritmizace a programování

PB002 Základy informačních technologií

C2115 Praktický úvod do superpočítání

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

8. Laboratoř: Aritmetika a řídicí struktury programu

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Logické programování I

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

VISUAL BASIC. Práce se soubory

Programování v čistém Prologu

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

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

2. lekce Algoritmus, cyklus Miroslav Jílek

2.1 Historie a vývoj počítačů

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

Pokročilé programování v jazyce C pro chemiky (C3220) Úvod do jazyka C++

C2110 Operační systém UNIX a základy programování

11. Přehled prog. jazyků

ALGORITMIZACE A PROGRAMOVÁNÍ

Programovací jazyk Pascal

Stručná historie výpočetní techniky část 1

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

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

Základy jazyka C. Základy programování 1 Tomáš Kühr

Programování a algoritmizace: úvod

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

Identifikátor materiálu: ICT-1-05

Sada 1 - Základy programování

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

Profilová část maturitní zkoušky 2013/2014

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

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

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

1 Strukturované programování

MATLAB Úvod. Úvod do Matlabu. Miloslav Čapek

Algoritmy. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

1 DĚJINY POČÍTAČŮ PŘEDCHŮDCI POČÍTAČŮ NULTÁ GENERACE PRVNÍ GENERACE (1945 AŽ 1951) DRUHÁ GENERACE (1951 AŽ 1965)...

Seminář z Informatiky a výpočetní techniky. Slovanské gymnázium Olomouc 4. září 2014 Tomáš Kühr

Transkript:

FJFI ČVUT 20. listopadu 2012

Obsah prezentace Historický úvod - První programovací jazyky - PROLOG

Mechanické výpočetní stroje 1623 - William Schickard - první mechanický kalkulátor Gottfried Leibniz - jeho stroj uměl i násobení a dělení 18. století - další rozvoj, počátek průmyslové výroby 1801 - Joseph Marie Jacquard - tkalcovský stav programovatelný pomocí děrných štítků

Charles Babbage (1791 1871) Navrhoval komplikované stroje pro výpočet tabulkových hodnot funkcí Analytical Engine - návrh mechanického počítače První Turingovsky úplný stroj, podobná struktura jako pozdější elektronické počítače Ada Lovelace - algoritmus na výpočet Bernoulliho čísel pro tento stroj

Charles Babbage (1791 1871) Obrázek: Jedno ze schémat Analytického stroje

Konrad Zuse (1910 1995) První funkční elektromechanický počítač (řada Z1-Z4), používá relé Z3 (1941), programovatelný počítač, 8bit instrukce, 22bit registr, 64x22bit pamět, takt 5,33 Hz Plankalkül ( Výpočetní plán ) - první koncept vysokoúrovňového programovacího jazyka

Konrad Zuse (1910 1995) Obrázek: Počítač Z3 (1941)

Alan Turing (1912 1954) 1936 - Koncept Turingova stroje, teoretický model obecného počítače Programovací jazyk je Turingovsky úplný, pokud dokáže simulovat Turingův stroj Během druhé světové války pomáhal luštit německé šifry v Bletchley parku Turingův test - návrh na testování inteligentního stroje

Turingův stroj Skládá se z pásky, pohyblivé hlavy a stavového registru Šest základních instrukcí - čtení, zápis, pohyb vlevo a vpravo, změna stavu a zastavení stroje Pomocí těchto instrukcí lze vytvářet cykly i podmíněné skoky Turingův stroj je schopen provádět stejné výpočty jako dnešní počítače (při dostatku času a paměti)

Další vývoj Historie programování 1946 - První elektronický počítač ENIAC v USA 50. léta - vznik mnoha programovacích jazyků, některé používané dodnes (FORTRAN, LISP, COBOL, ALGOL...) 70. léta - C, Pascal, Basic, Bourne shell, MATLAB, TeX... 80. léta - C++ (a objektové jazyky obecně), Perl, PostScript 90. léta - Python, Java, PHP, Visual Basic

Jedno ze 4 hlavních programovacích paradigmat Programování pomocí prostředků matematické logiky Často je deklarativní - popisujeme vstup a cíl výpočtu, nemáme zde překladač, ale řešič/dokazovač Algoritmus se děĺı na vlastní logický program a řízení řešení, které je součástí jazyka Existují i překladače, které z logického programu vytvoří procedurální program (často kvůli efektivitě)

PROLOG (1972) Nejznámější logický programovací jazyk Využití zejména v oblastech umělé inteligence a zpracování přirozeného jazyka Snaha o abstraktní vyjádření vztahů a co největší potlačení imperativní složky Využívá predikátovou logiku prvního řádu, konkrétně Hornovy klauzule: (p 1 p 2... p n ) = u Relativně jednoduchá syntaxe, navržen pro lingvisty

Ukázka kódu: Klauzule: muz(pavel). rodic(jana,pavel). dite(x,y) :- rodic(y,x). syn(x,y) :- dite(x,y), muz(x). Atomy - řetězce znaků začínající malými písmeny (konstanty) Proměnné - začínají velkým písmenem, platí pouze pro jednu klauzuli Fakta - jednoduché deklarativní klauzule Pravidla - složitější klauzule s implikacemi

Ukázka kódu: Dotazy:?- muz(jana). no.?- dite(pavel,jana). yes.?- syn(x,jana). X = pavel; no. Dotaz pomocí proměnné, která se vyskytuje pouze jednou vrátí hodnotu této proměnné.

Jazyky, které nejsou určeny k praktickému použití Slouží k demonstraci nových možností programování, případně experimentům se syntaxí i principy programování. Většina z nich však slouží pro zábavu. Turing-tarpit - turingovsky úplný jazyk s minimálním množstvím příkazů/operátorů Některé jazyky experimentují s jiným rozložením kódu než v textovém souboru, např. v prostoru... Nedeterministické jazyky - probabilistické definice funkcí pro nepředvídatelný běh programu

INTERCAL (1972) Byl vytvořen jako parodie tehdejších programovacích jazyků. Compiler Language With No Pronounceable Acronym Vychází z předpokladu, že čím nesrozumitelnější je kód, tím váženější je jeho autor. Používá direktivy jako IGNORE, FORGET, případně PLEASE. Přesto je turingovsky úplný. http://www.catb.org/~esr/ intercal/ Obrázek: Jeden z autorů - Jimbo Lyon

Program Hello World: DO,1 <- #13 PLEASE DO,1 SUB #1 <- #238 DO,1 SUB #2 <- #108 DO,1 SUB #3 <- #112 DO,1 SUB #4 <- #0 DO,1 SUB #5 <- #64 DO,1 SUB #6 <- #194 DO,1 SUB #7 <- #48 PLEASE DO,1 SUB #8 <- #22 DO,1 SUB #9 <- #248 DO,1 SUB #10 <- #168 DO,1 SUB #11 <- #24 DO,1 SUB #12 <- #16 DO,1 SUB #13 <- #162 PLEASE READ OUT,1 PLEASE GIVE UP

Brainfuck (1993) Extrémně minimalistický programovací jazyk, autor Urban Müller. Příkazy <, > slouží pro posun datového ukazatele. Příkazy +,- slouží pro zvýšení/snížení aktivní hodnoty. Příkazy. a, slouží k vypsání/načtení jednoho znaku ze std. vstupu. Příkazy [, ] přesunou instrukční ukazatel doprava/doleva za druhou hranatou závorku, pokud je aktivní hodnota rovna/různá od nuly. Některé překladače mají méně než 200 bytů. Komentáře lze psát jako normální text, veškeré ostatní znaky jsou ignorovány. http://esolangs.org/wiki/brainfuck/

Příklady Historie programování Hello World: ++++++++++[>+++++++>++++++++++>+++>+<<<< -]>++.>+.+++++++..+++.>++.<<++++++++++++ +++.>.+++.------.--------.>+.>. Sečtení dvou číslic a vypsání ASCII znaku s výslednou hodnotou:,>++++++[<-------->-],[<+>-],<.>. Cyklus vypisující hodnotu na vstupu, ukončený mezerníkem: +[,.--------------------------------]

Visual Brainfuck http://sites.google.com/site/visualbf/

Befunge (1993) Autor Chris Pressey, původně snaha o co nejobtížněji kompilovatelný jazyk. Narozdíl od konvenčních jazyků jsou zde příkazy uspořádány v 2-rozměrné síti. Má poměrně hodně příkazů, mimo jiné umožňuje napsat sebe modifikující kód. Základní příkazy jsou šipky <, >,, v pro kontrolu běhu programu. Číslo 0-9 způsobí načtení dané hodnoty do zásobníku, uvozovky pro řetězec. Cykly vytvoříme jako smyčky v programu, podmínky jako větvení cesty... http://catseye.tc/

Příklady: Historie programování Hello World: > v v,,,,,"hello >48*, v v,,,,,,"world! >25*,@ Jiná možnost: >25*"!dlrow,olleH":v v:,_@ > ^

Whitespace (2003) Autoři Edwin Brady a Chris Morris, uvolněn 1.4.2003. Většina jazyků tzv. whitespace znaky ignoruje, zde je tomu naopak, ignorovány jsou všechny ostatní. Je to imperativní jazyk, běží na virtuálním stroji s haldou a zásobníkem. Příkazy jsou složeny pouze z mezerníků, tabulátorů a odřádkování, data taktéž (mezerník představuje 0, tabulátor 1). Přes zdánlivou nesmyslnost lze tento koncept využít v steganografii. http://compsoc.dur.ac.uk/whitespace/

Hello World ve Whitespace Prvky syntaxe jsou zvýrazněny - tabulátory zeleně, mezery červeně...

LOLCODE (2007) Jazyk inspirován populárním internetovým meme Lolcats. Syntaxe není jednotná, existují různé interpretry nebo překladače. Jeden z dialektů je Turingovsky úplný, což bylo dokázáno napsáním interpreteru Brainfucku. Praktické využití veskrze žádné, ale může přitáhnout nové zájemce o programování. http://lolcode.net/

Příklady: Historie programování Hello World: HAI CAN HAS STDIO? VISIBLE "HAI WORLD!" KTHXBYE Otevření a vypsání souboru: HAI CAN HAS STDIO? PLZ OPEN FILE "LOLCATS.TXT"? AWSUM THX VISIBLE FILE O NOES INVISIBLE "ERRROR!" KTHXBYE

Další zdroje Historie programování http://history-computer.com http://en.wikibooks.org/wiki/prolog http://www.logic.at/prolog/faq/faq.html http://esolangs.org Wikipedia (i česká)

Děkuji za pozornost.