Obsah
z
Co je to programovací jazyk Překlad a zpracování programu Nástroje pro tvorbu programů Metody popisu programovacích jazyků Typy programovacích jazyků Vývoj programovacích jazyků
z
Studijní program „Informační technologie“
Programovací jazyky
z
doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes
[email protected]
z
z
z z
ZPP - Programovací jazyky
Proč používáme programovací jazyky?
Programovací jazyk z
z
Popis výpočtů, obvykle ve tvaru, jenž umožňuje provedení elektronickým počítačem (program) Standardizovaný nástroj pro komunikaci s počítačem z z z
z
Zjednodušují přenos určitého typu informace z z z
z
z
Přirozené jazyky – vynechávání, gramatické chyby, víceznačnost
Jsou obvykle proveditelné na počítači z z
3
Noty v hudbě Matematické formule Elektrotechnická schémata
Vyznačují se velkou přesností vyjádření z
S jakými daty má počítač pracovat? Jak se tato data budou ukládat a přenášet? Které akce a kdy se mají provést? ZPP - Programovací jazyky
2
Značkovací jazyky (HTML) – data, ne program Specifikační jazyky (λ-kalkul) – teoretický výzkum ZPP - Programovací jazyky
4
1
Překlad a zpracování programu
Nástroje pro tvorbu programů z
Ladění
z
Neúspěšné testy
z Zdrojový text programu
Překlad a sestavení
z Testování
Provoz
z z z
Chyby při překladu
Chyby za provozu
z z
ZPP - Programovací jazyky
5
Editor Překladač / interpret x zpětný překladač Spojovací program (linker) Správa verzí – CVS, Subversion, … Ladicí program (debugger) Nástroje pro ladění výkonu (profiler) Testovací nástroje, generátory testů Generátor instalačních balíků Nástroje pro internacionalizaci (i18n) ZPP - Programovací jazyky
Integrovaná vývojová prostředí (IDE) z
6
Eclipse
Poskytují více uvedených funkcí současně z
Prostředí orientovaná na určitý jazyk z z
z
Borland Pascal, C++, JBuilder, C#Builder SharpDeveloper, JCreator, NetBeans
Univerzální prostředí z z
Eclipse (Java, C++, C#, …) MS Visual Studio (C++, C#, Jscript, VB, …) ZPP - Programovací jazyky
7
ZPP - Programovací jazyky
8
2
MS Visual Studio
JBuilder
ZPP - Programovací jazyky
9
Překladač z
z
z
z
z
Základní stavební prvky – identifikátory, čísla, řetězce, operátory, oddělovače, … Programové konstrukce – deklarace, příkazy, výrazy Kontextové vazby – definice/užití, datové typy
z
z
z
z z 11
Umožňuje po drobné opravě přeložit jen změněnou část Možnost provádění drobných změn během ladění programu
Just-in-time překlad z
Strojový jazyk (nebo JSI) Jazyk virtuálního procesoru (JVM, CLR) ZPP - Programovací jazyky
Inkrementální překlad z
Syntéza cílového programu / Interpretace z
10
Překladač
Analýza zdrojového textu, vyhledání chyb z
ZPP - Programovací jazyky
Generování instrukcí virtuálního procesoru (Java VM - .class, .NET CLR – jazyk IL) Překlad až v okamžiku volání podprogramu Optimalizace podle konkrétního procesoru ZPP - Programovací jazyky
12
3
Popis programovacího jazyka z
Popis programovacího jazyka
Syntaxe - struktura jazykových konstrukcí z z
z
Textové jazyky (C, Pascal, Java) Grafické jazyky (vývojové diagramy, UML) a > 10
z z
z
if
x := x + 5
z
a > 10 then begin x := x + 5;
z
end
z
ZPP - Programovací jazyky
Statická sémantika – v době překladu Dynamická sémantika – v době běhu
Příklad: Co znamená X + 1 ? z
ne
ano
Sémantika – význam jazykových konstrukcí
X je celé číslo: Přičti k hodnotě proměnné X jedničku. X je řetězec: Převeď konstantu 1 na řetězec a připoj na konec řetězce uloženého v proměnné X. X je objekt: Zavolej metodu "operator +“ s parametrem 1. X je reální číslo: Převeď 1 na reálné číslo 1.0 a přičti k hodnotě proměnné X.
13
ZPP - Programovací jazyky
Metody popisu syntaxe
Metody popisu sémantiky
Syntaktický diagram
z
if
podmínka
then
příkaz
else
Slovní popis z
příkaz
z
Gramatika příkaz → if podmínka then příkaz zbytek zbytek → else příkaz | ε
Nepřesný
Formální popis z
Operační sémantika z
z
15
Význam konstrukce popíšeme pomocí jednodušších operací
Denotační sémantika z
ZPP - Programovací jazyky
14
Význam konstrukce popíšeme pomocí funkcí ZPP - Programovací jazyky
16
4
Typy programovacích jazyků z
Vývoj programovacích jazyků
Imperativní jazyky z z
Posloupnost příkazů měnících stav výpočtu Možnost opakovaného přiřazení do proměnné
z
Strojové jazyky
z
Jazyky symbolických instrukcí / adres
z
z
z
Deklarativní jazyky z z
z z
Posloupnost podmínek Počítač musí najít postup, jak je dodržet z z z
z
ZPP - Programovací jazyky
z
z 17
Pojmenované instrukce Pojmenované adresy – proměnné, návěští skoků Makrodefinice
Autokódy z
Funkcionální jazyky – ML, Haskell, LISP Logické jazyky – PROLOG, CLP, Gödel, Mercury Dotazovací jazyky - SQL
Posloupnost instrukcí v číselném tvaru
Složitější příkazy Příklad: MAT (Minsk autokód – CTI, PIS, JDI NA, …)
Vyšší programovací jazyky ZPP - Programovací jazyky
18
První programovací jazyky
FORTRAN (1954-57)
kolem 1946 Konrad Zuse – Plankalkul z použit také pro šachy z rukopis publikován až v roce 1972, nebyl nikdy implementován
FORmula TRANslator - John Backus, IBM z problémově orientovaný, strojově značně nezávislý, optimalizace (nutná v konkurenci s JSI) z realizace překladače si vyžádala 18 člověkoroků jeden z největších projektů v té době
1949 John Mauchly - Short Code první počítačový jazyk skutečně použitý na elektronickém zařízení z určen pro zadávání rovnic z "ručně kompilovaný" jazyk z
z
1951 Grace Murray Hopper z prosazovala vytvoření vyšších jazyků z pracovala na návrhu prvního překladače z zavedla pojem "počítačový virus" ZPP - Programovací jazyky
19
V současnosti stále nejpoužívanější jazyk v oblasti vědeckotechnických výpočtů! (ISO: 1997)
ZPP - Programovací jazyky
20
5
FORTRAN
LISP (1958-59)
C C C
LISt Processing - John McCarthy, M. I. T. z první funkcionální jazyk - implementace lambda-kalkulu z možnost imperativního stylu programování
10
Vypocet funkce faktorial INTEGER FUNCTION FACT(N) IMPLICIT NONE INTEGER N, I, F F = 1 DO 10 I = 1,N F = F * I CONTINUE FACT = F END
z
PROGRAM P1 IMPLICIT NONE INTEGER N, F, FACT READ(*,*) N F = FACT(N) WRITE(*,*) "Fact = ", F END ZPP - Programovací jazyky
21
dosud se používá i jako skriptovací jazyk v aplikacích (AutoCAD, emacs, …)
ZPP - Programovací jazyky
LISP
Algol 60 (1958-60)
(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)
Algorithmic Language - J. Backus, P. Naur z bloková struktura, složené příkazy, rekurze z syntax poprvé popsána formálně gramatikou (BNF) z koncem 60. let se stal nejpopulárnějším jazykem v Evropě – např. i ve výuce
ZPP - Programovací jazyky
z 23
22
základ mnoha dalších programovacích jazyků ZPP - Programovací jazyky
24
6
ALGOL 60
COBOL (1960)
begin integer N; ReadInt(N);
COmmon Business Oriented Language z pro vytváření rozsáhlých programů k vládním a obchodním účelům z formalizovaný anglický text, čitelný pro manažery z zavedl propracované záznamové struktury z vytvořen konferencí CODASYL (Conference of Data Systems and Languages)
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 ZPP - Programovací jazyky
z
Dosud se používá zejména ve finančních institucích (ISO:2002, XML 2006)
25
COBOL
ZPP - Programovací jazyky
26
BASIC (1964)
IDENTIFICATION DIVISION. PROGRAM-ID. Iter. AUTHOR. Michael Coughlan.
Beginners All-Purpose Symbolic Instruction Code
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.
z
z
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. ZPP - Programovací jazyky
z z
z z 27
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 1977 Bill Gates, Paul Allen – Altair BASIC 1991 - VisualBasic, VBA, VBScript 2003 - VB.NET ZPP - Programovací jazyky
28
7
Pascal (1968-71) z z z
Další jazyky
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
z z z z z
z z
Borland Turbo Pascal (Anders Hejlsberg) Borland Delphi -> Kylix ZPP - Programovací jazyky
z
1980-83 Ada 1972 C 1972 Smalltalk 1982-85 C++ 1994-95 Java 2000-02 C#
29
C#
ZPP - Programovací jazyky
30
Skriptovací jazyky
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); } } ZPP - Programovací jazyky
z
31
Slouží obvykle k rozšíření nějaké aplikace z
Operační systém – sh, command.com
z
WWW server – Perl, PHP
z
WWW prohlížeč – JavaScript, VBScript
ZPP - Programovací jazyky
32
8
Studijní program „Informační technologie“
PHP // připojení k serveru a výběr databáze mysql_connect("localhost","uzivatel","heslo"); mysql_select_db("databaze");
z
Úvod do programování (Java) Programování v C/C++ Programování v C# Programovací techniky Programovací jazyky a překladače Seminář z programování
z
Funkcionální a logické programování
z z
// dotaz $h = mysql_query("SELECT * FROM uzivatele WHERE jmeno='$jmeno'");
z
// vytvoření objektu z výsledného řádku $uz = mysql_fetch_object($h); if( !$uz ) die "Uživatel neexistuje"; if( $uz->heslo != $heslo ) die "Špatné heslo";
z
ZPP - Programovací jazyky
z
33
ZPP - Programovací jazyky
34
9