PV109: Historie a vývojové trendy ve VT Od strojového kódu k programovacím jazykům Luděk Matýska a Eva Hladká Fakulta informatiky Masarykovy univerzity podzim 2016 Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 1/34 I rogramovaci jazyKy v nistoricKem vývoji Strojově závislé • Strojový kód • Jazyky relativních adres • Jazyky symbolických adres - assemblery • Autokódy Strojově nezávislé • Zaměřené na určitý typ úloh • Fortran - vědeckotechnické výpočty • Cobol - hromadné zpracování dat • Pascal - výukové programy • Simula, Simscript - modelování diskrétních systémů • Eiffel - objektově orientované • Univerzální • Algol 60, PL/I, Algol 68, Ada Hardware Zdroj: http://webopedia.com Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 2/34 Procedurální • důraz na popis postupu výpočtu • how to do it Deklarativní • důraz na popis řešeného problému • what to do • LISP, Prolog, databázové jazyky apod Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 3 / 34 • Program se skladá z instrukcí • Instrukci tvoří • kód operace - co se má provést • jedna či více adres - s jakými daty • absolutní adresy • Instrukce zapsány v dvojkové nebo šestnáctkové soustavě • Každý typ počítače zpracovává vlastní sadu instrukcí • Rodiny počítačů sdílejí stejnou množinu instrukcí 00 00 00 F2 07 F2 05 01 2E 3E OS 2E 89 2E 2C 16 28 07 42 OF 83 10 EB 13 00 CD 10 00 00 90 07 F2 07 8F 06 3C FF 36 40 07 2E 8C 2E 89 16 4E OF 89 AC 84 CO EB EE C3 F2 07 08 0E 08 55 16 2E 28 07 1E 50 74 00 9C 53 DS 07 0C 08 2E FF CB FA 07 8E 1E 2E OF 0E 3C 24 33 DB TT~BT 00 00 36 3C FC 2B 06 BC 8E 1E 1F C7 74 09 33 CO T2~DT 00 00 08 2E F6 8E 00 07 88 07 06 08 B4 0E 50 90 T2~D7 CO 00 FF 36 DE 2E 2E 89 89 3E 00 00 BB 07 9C 58 Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 4 / 34 'Ľ • Stojí nad strojovým kódem - symboliský zápis, vyšší srozumitelnost a snazší programovaní než strojový kód • Vázány na konkrétni počítač (rodinu počítačů) o Tři typy • Jazyky relativních adres • Numerická nebo symbolická jména instrukcí • Adresy jsou počítány relativně vůči bázové adrese • Před spuštěním se transformují na adresy reálné • Jazyky symbolických adres • Symbolické adresy, mohou být absolutní nebo relativní • Relokace adres při zavedení programu • Nej rozšířenější jazyky nižší úrovně • Autokódy • Již nebyly omezeny pravidlem jeden příkaz = jedna řádka • ,,Instrukce" autokódu mohou být přeloženy do více instrukcí počítače • Mezistupeň jazyků nižší a vyšší úrovně Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 5 / 34 ragment programu v assembler ExcessOfMemory label near mov bx, di add bx, dx mov word ptr _heapbase@ + 2, bx mov word ptr _brklvl@ + 2, bx mov ax, _psp@ sub bx, ax mov es, ax mov ah, 04Ah push di int 02lh pop di BX = Number of paragraphs to keep ES = Program Segment Prefix address preserve DI this call clobbers SI,DI,BP restore DI i i i i i i Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 6 / 34 azyky vyssi úrovne • Vyšší úroveň abstrakce • Prvním jazykem vyšší úrovně byl Plankalkul K. Zuseho (pouze specifikace) • Nejsou vázány na konkrétní architekturu • Ne vždy realizováno do důsledků • Interpretované vs. překládané jazyky • Překlad do strojového kódu nebo mezikódu (např. Java bytecode) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 7 / 34 a • První jazyk, nezávislý na konkrétním počítači • Určen pro numerické a vědecké aplikace • Tvar zápisu odvozen z formátu děrného štítku (odstraněno teprve koncem 80. let) • Procedury a funkce (nerekurzivní), mnoho vestavěných funkci • Ve starších verzích absence většiny obvyklých řídicích struktur, velmi omezené možnosti práce s texty • Velmi efektivní přeložený kód - pro vědeckotechnické výpočty prakticky bez konkurence • Zaměřen na separátní překlad jednotlivých modulů - snadná tvorba knihoven • Existují mimořádně rozsáhlé knihovny programů Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 8 / 34 ort ran - vývojové etapy • Fortran (1954) • Fortran I (1956), II (1957), III (1958) • Fortran IV (1962), základ pro oficiální normu ANSI Fortran (1966) • Fortran 77 - pozdě, ale přece zavedl strukturu IF-THEN-ELSE-ENDIF, proměnné typu CHARACTER, příkazy pro práci se soubory aj. • Fortran 90 - mnoho dalších rozšíření (práce s polem jako celkem, prvky OOP), celková modernizace jazyka při zachování zpětné kompatibility • Fortran 95 • Fortran 2003 - podpora objektového programování, abstraktní datové typy; ukazatele na procedury; asynchronní l/O • Fortran 2008 (2010) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 9 / 34 f - príklad programu CHARACTER RECORD*9,VERSE*9,PEN6*6,PEN(6) EQUIVALENCE (PEN6,PEN) VERSE=CHAR(0)//5GR 90.065 OPEN(8,FILE=5 5,F0RM=5 BINARY5) READ(8,END=200) RECORD IF(RECORD.NE.VERSE) THEN PRINT *,5**ERROR: MISSING "PLOTS" OR INVALID FILE5 GOTO 300 END IF XMIN= 1.0E9 YMIN= 1.0E9 XMAX=-1.0E9 YMAX=-1.0E9 DO 110 1=1,6 110 PEN(I)=5 5 CALL SIZSUB(XMIN,YMIN,XMAX,YMAX,PEN, 5 H5 ,NUM) PRINT 1000,NUM,XMIN,XMAX,MIN(32.00/(XMAX-XMIN), * 28.70/(YMAX-YMIN)), * YMIN,YMAX,MIN(22.00/(XMAX-XMIN),17.00/(YMAX-YMIN)) 1000 F0RMAT(12X,***** GRAPH LIMITS ****5/ * 5 Number of graphs in the metafile:5,i3/ * 5 XMIN =5,F9.3,5 CM5,10X,'XMAX =5,F9.3,5 CM5,10X, * 5LP_FACT0R =',F10.5/5 YMIN =',F9.3,5 CM5,10X, * 5YMAX =5,F9.3,5 CM5,10X,'COLFACTOR =',F10.5) IF(PEN6.NE.5 ') PRINT 1001,PEN 1001 FORMAT (/5 1 234567V *5 PENS USED : *5,6A3) GOTO 400 200 PRINT 5(55****ERROR: EMPTY GRAPHIC FILE5 5)5 300 PRINT 5 ( 5 5 ****SIZE_GR ABORTED ")' 400 END Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 10 / 34 LODOI - < common usiness m Language i • Určen pro hromadné zpracování dat • Procedurální část programu vypadá převážně jako psaná v běžné angličtině • První jazyk, který zavedl datové struktury • V novějších verzích zabudováno třídění, zjednodušená tvorba sestav, přístup k databázím aj. • Obdobně jako Fortran celá vývojová řada (00 COBOL 2002) • Program sestává ze 4 částí: IDENTIFICATION DIVISION - program a operační systém ENVIRONMENT DIVISION - používané soubory; počítač a operační systém DATA DIVISION - popis dat PROCEDURE DIVISION - algoritmus zpracování (program) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 11 / 34 - přiklad programu 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HELLOWORLD. 000300 000400* 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE-COMPUTER. RM-COBOL. 000800 OBJECT-COMPUTER. RM-COEOL. 000900 001000 DATA DIVISION. 001100 FILE SECTION. 001200 100000 PROCEDURE DIVISION. 100100 100200 MAIN-LOGIC SECTION. 100300 BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS. 100500 DISPLAY "Hello world!" LINE 15 POSITION 10. 100600 STOP RUN. 100700 MAIN-LOGIC-EXIT. 100800 EXIT. Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 12 / 34 • První pokus o plně univerzální jazyk • Zavedl některé netradiční znaky (operátor násobení x, celočíselného dělení-i-, umocňování t, negace dekadický exponent aio) • Klíčová slova se podtrhují nebo tisknou polotučné • Mnoho revolučních prvků (v dnešních jazycích už považovaných za samozřejmé): podmíněné výrazy a příkazy, příkaz for, přepínač, rekurzivní procedury, volání parametrů jménem nebo hodnotou, apod. • Starší verze neřešily vstup a výstup • Minimální možnosti práce s texty ve starších verzích • Přesný formální popis syntaxe (Backusova normální forma) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 13 / 34 yvojove etapy • Algol 58 • Pouze specifikace jazyka • Algol 60 • Snad nej významnější jazyk všech dob, ovlivnil na desetiletí ostatní jazyky • I samotný překladač představoval průlom • Algol 68 • Nový pokus o revoluci v programovacích jazycích • Zavedl "krátké"a "dlouhé"datové typy (int, short int, real, long real, long long real ...), • Zavedl ukazatele, tj. odkazy či reference na proměnné (ref int ...), I-hod noty, o Umožnil paralelní větve programu, struktury a uniony, uživatelem deklarované operátory aj. • Přesná formální definice syntaxe a částečně i sémantiky. • Kritizován jako příliš složitý Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 14 / 34 Algol 60 - Násobení úsporně uložené symetrické matice vektorem procedure mulsym(A,b,n); value n; integer n; real array A,b; comment mulsym násobí matici invertovanou procedurou symin na symetrickou matici A~řádu n vektorem b. Výsledek přepíše prvních n prvků pole A; begin integer i,k,l,p; l:=n; for i:=l step 1 until n do begin A[i]:=0; p:=l+i; for k:=i step -1 until 1 do begin A [i] :=A[i]+A[p] Xb[k] ; p:=p-n-l+k; end; if i100 THEN 30 50 REM POCATECNI STAV PROMĚNNÝCH 52 LET P1=0 54 LET P2=0 56 LET P3=0 58 LET P4=0 60 REM CTĚNI SOUŘADNIC A~SUMACE 70 FOR 1=1 TO N 80 PRINT I;". DVOJICE X,Y: "; 90 INPUT X,Y 100 LET P1=P1+X 110 LET P2=P2+Y 120 LET P3=P3+X*Y 130 LET P4=P4+X~2 140 NEXT I"150 REM VYPOČET REGRESNÍCH KOEFICIENTU A, B 160 LET B=(P3-P1*P2/N)/(P4-P1~2/N) 170 LET A=(P2-P1*B)/N 180 IF(B<0 THEN 186 182 LET Z$ ="-" 184 GOTO 190 186 LET Z$ ="+" 190 PRINT 200 PRINT "ROVNICE PRIMKY JE Y="A;Z$ ;ABS(B);"X 210 PRINT Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 19 / 34 rogrammmg Language une • Univerzální programovací jazyk vyvinutý v IBM • Snaha spojit Fortran a COBOL • Původně NPL (také National Physical Paboratory), přejmenován na PL/I • PL/I úzce propojena s OS/360 • Dialekty pro různé počítače (kvůli propojení s příslušnými operačními systémy) 9 Operační systém Multics byl napsán v PL/I • Až přiliš univerzální, což vedlo k nepřehledné syntaxi i sémantice: • E. Dijkstra: Používat PL/I musí být jako pilotovat letadlo pomocí 7000 tlačítek, přepínačů a pák v kokpitu. Absolutně nechápu, jak bychom mohli intelektuálně zvládnout naše rozrůstající se programy, když už sám programovací jazyk — náš hlavní nástroj! — se pro svou baroknost vymkl z naší intelektuální kontroly. Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 20 / 34 ekiarovane cne • Co je intuitivně jasné a jednoznačné, není zakázáno • Pokud je to možné, neuchylovat se ke strojovému kódu • Strojově nezávislý (přesto je na něm patrno, že vznikl pro IBM/360) • Modularita • Péče o začátečníky • Stačí znalost malé podmnožiny jazyka pro úspěšné psaní programů Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 21 / 34 - prikiaa po ogramu DECLARE ABS GENERIC (ABS1 ENTRY (FIXED), ABS2 ENTRY (FLOAT REAL), ABS3 ENTRY (COMPLEX)); ABS1: ABS2: PROCEDURE (X); DECLARE Y; Y=X; IF Y LT 0 THEN Y=-Y; RETURN(Y); ABS3: ENTRY (X); RETURN (SORT(REAL(X)**2 + IMAG(X)**2)); END ABS; Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 22 / 34 • Univerzální programovací jazyk • Velmi „hutný" zápis (až lOkrát stručnější než v běžných jazycích) • První verze již v roce 1962 • Implementace na IBM 360/370, CDC, UNIVAC, ruském BESM aj. • Používá se dodnes, překladače a speciální fonty jsou na Webu Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 23 / 34 • Speciální sortiment znaků (nutnost používat zvláštní terminál či font nebo nahrazovat speciální znaky náhradními kombinacemi znaků ASCII) • Program na první pohled (nezasvěcenému) zcela nesrozumitelný • Velmi mnoho operátorů, většina jako unární i binární (obvykle s různými významy: -i-x znamená 1/x, x-i-y znamená x/y; *x znamená ex, x*y znamená xy) • Operátory mají stejnou prioritu a provádí se odzadu, pořadí však lze změnit závorkami • Bohatá podpora práce s vektory a maticemi (např. AgB znamená vynásob matici A inverzí matice B) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 24 / 34 a cg: L«-+0,X)tL n align the (names) en: A<-CCltpL>,X>tL n address C12: N<-0 UDLTBCO,XUL n names) c13d Ní-,'a',H c14] HCCN='_'VtpNIK-' ' n change _ to blank c15] H<-0 "URJUST VTOM M n names c16] n length of last word in name Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 25 / 34 • Snadný k naučení, zvlášť vhodný pro výuku, méně pro praktické programování • Autorem je Niklaus Wirth, jazyk je pojmenován na počest B. Pascala • Silná typová kontrola, většina chyb se zachytí už při kompilaci • Program se musí kompilovat vcelku - žádná modularita • Vyjadřovací možnosti tak malé, že většina implementací jazyk rozšiřuje (neportabilně, např. unit v překladačích fy Borland) • Některé nedostatky byly odstraněny v revidované verzi jazyka (např. zavedení konformantních polí). • Novější překladače jazyk podstatně rozšířily - za cenu vážného omezení přenositelnosti programů. Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 26 / 34 ma • Plně objektově orientovaný jazyk • Silně typovaný, dynamický a interpretovaný • Vznikl v Xerox PARC • Nástroj pro programování v grafickém prostředí • Specifická syntaxe (inspirace obrácenou polskou notací BPN) 9 Několik variant označených podle roku vzniku (72, 74, 76, 78, 80) • Výrazně ovlivnil nové (C++, Java) i aktualizované verze starších (Cobol, LISP) programovacích jazyků Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 27 / 34 roiog - rogramation en Logique • Deklarativní logický jazyk, logika prvního řádu • Autory jsou Alain Colmeraurer a Phillipe Roussel z univerzity Aix-Marseille • Sloužil pro usnadnění komunikace s počítačem v přirozeném jazyce o Využíván zejména v oblasti umělé inteligence a v počítačové lingvistice • Jednoduchá syntax, založen na predikátové logice prvního řádu • Hornovy klauzule, unifikace, rekurze a backtracking • Základ logického programování 9 Japonská 5. generace počítačů • Řada verzí, včetně podpory OOP Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 28 / 34 % move(N,X,Y,Z) - move N disks from peg X to peg Y, with peg Z being the % auxilliary peg % Transfer the first n-1 discs to some other peg X % Move the last disc on X to Y % Transfer the n-1 discs from X to peg Y move(l,X,Y,_) :- write('Move top disk from '), write(X), write(5 to 5), write(Y), nl. move(N,X,Y,Z) :-N>1, M is N-1, moveCM^^Y) , move(l,X,Y,_), moveCM^^^) . Zdroj: http://www.cs.toronto.edu/~hojjat/384w09/simple-prolog-examples.html Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 29 / 34 azy • Vyvinut v Bell Laboratories - D. Ritchie a K. Thompson • Spojuje prvky jazyků vysoké a nízké úrovně • Univerzální, zvlášť vhodný pro systémové programování • Těsná návaznost na operační systém, zpočátku silně svázán s Unixem • Snadno se v něm udělá chyba, která neporušuje syntax a není proto zachycena překladačem • Velmi efektivní generovaný kód, bohatá nabídka operátorů • Fortran vs. C • Vývojové etapy • Kernighan-Ritchie (K-R) C • ANSI C (postupně několik verzí) o ISO/IEC C (C99) Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 30 / 34 a • Vyvinut na zakázku ministerstav obrany (DoD) USA • Pojmenován na počet Ady Augusty Byronové hraběnky Lovelace • Původně tuto ambici měl Algol 68 • Prosazen jako jediný jazyk pro vývoj nových systémů (bezpečné programování) • Univerzální jazyk pro všechny typy aplikací včetně řízení v reálném čase • Strukturovaný, staticky typovaný a objektově orientovaný jazyk • Zavedl nebo převzal některé neobvyklé moderní prvky (zpracování výjimek, generické funkce) • Podpora ,,bezpečného" paralelismu a explicitní podpora souběžnosti • Velmi dokonalý, ale málo rozšířený Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 31 / 34 a - prikiaa programu restricted (MATH_LIB, TEXT_I0) procedure QUADRATIC_EQUATION is use TEXT_I0; A, B, C, D: FLOAT; begin GET(A); GET(B); GET(C); D:=B**2-4.0*A*C; if D<0.0 then PUT("COMPLEX ROOTS"); else declare use MATH_LIB; — tarn je funkce SORT begin PUT("REAL ROOTS: "); PUT(B-SQRT(D))/(2.0*A)); PUT(B+SQRT(D))/(2.0*A)); PUT(NEWLINE); end; end if; end QUADRATIC_EQUATION; Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 32 / 34 istorie programovacicn jazyku 1960 1970 1930 1990 Zdroj: http://iwi.uni-hannover.de Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 33 / 34 E aisi odkazy na nistorii programovacicn jazy • http://oreilly.com/news/graphics/prog_lang_poster.pdf • http://www.scriptol.com/programming/history.php • http://www.levenez.com/lang/ Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2016 34 / 34