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 2015 Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2015 1/34 I rogramovaci jazyky v historickém 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 2015 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 2015 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 2015 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 2015 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 Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2015 6 / 34 azyky vyssi úrovne • Vyšší úroveň abstrakce • Prvním jazykem vyšší úrovně byl Plankalkúl 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 2015 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 2015 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 2015 9 / 34 CHARACTER REC0RD*9,VERSE*9,PEN6*6,PEN(6) EQUIVALENCE (PEN6,PEN) VERSE=CHAR(0)//'GR 90.06' 0PEN(8,FILE=' ',F0RM='BINARY') READ(8,END=200) RECORD IF(RECORD.NE.VERSE) THEN PRINT *,'**ERROR: MISSING "PLOTS" OR INVALID FILE' GOTO 300 END IF XMIN= 1.0E9 YMIN= 1.0E9 XMAX=-1.0E9 YMAX=-1.0E9 DO 110 1=1,6 110 PEN(I)=' ' CALL SIZSUB(XMIN,YMIN,XMAX,YMAX,PEN,'H',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 ****'/ * ' Number of graphs in the metafile:',i3/ * ' XMIN =',F9.3,' CM',10X,'XMAX =',F9.3,' CM',10X, * 'LP_FACT0R =',F10.5/' YMIN =',F9.3,' CM',10X, * 'YMAX =',F9.3,' CM',10X,'COLFACTOR =',F10.5) IF(PEN6.NE.' ') PRINT 1001,PEN 1001 FORMAT(/' 1234567'/ *' PENS USED : *',6A3) GOTO 400 200 PRINT ' ("****ERROR: EMPTY GRAPHIC FILE")' 300 PRINT ' ("****SIZE_GR ABORTED") ' 400 END Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2015 10 / 34 ommon usiness anguage • 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 2015 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 2015 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í^-, umocňovánínegace -i, 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 2015 13 / 34 y voj o ve etapy • Algol 58 • Pouze specifikace jazyka • Algol 60 • Snad nejvý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, • 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 2015 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 2015 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 2015 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 2015 21 / 34 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 2015 22 / 34 rAlB, rogrammmg Langua • 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 2015 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 2015 24 / 34 a Ľ6] Lf(Lť )±I>,L C7] I>LJUST VTOM' ,L C8D S^~1++/a\L^'(' C9: x^orr/s CIO] L<-SL),X)tL C12] N<-0 UDLTB<0,X)±L C13] Ní-,'ď,N C14] HĽ1, M is N-l, move(M,X,Z5Y), moved ,X,Y,_) , move(M,Z,Y5X). Zdroj: http://www.cs.toronto.edu/~hojjat/384w09/simple-prolog-examples.html °/. °/o °/o °/o Transfer the first n-l discs to some other peg X Move the last disc on X to Y Transfer the n-l discs from X to peg Y auxilliary peg Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2015 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 2015 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 2015 31 / 34 restricted (MATH_LIB, TEXT_IO) procedure QUADRAT I C_EQUAT ION 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 SQRT 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 2015 32 / 34 istorie programovacicn jazyku 1970 1930 Í000 Zdroj: http://iwi.uni-hannover.de Luděk Matýska a Eva Hladká (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2015 33 / 34 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 2015 34 / 34