FAKULTA INFORMATIKY Masarykova univerzita 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á podzim 2021 Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 FAKULTA INFORMATIKY Masarykova univerzita Programovací 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 2/34 FAKULTA INFORMATIKY I Masarykova univerzita Procedurální vs. deklarativní jazyky ■ Procedurálni ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 3/34 FAKULTA INFORMATIKY Masarykova univerzita Strojový kód ■ Program se skládá z instrukcí m 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ču sdílejí stejnou množinu instrukcí 00 00 00 00 00 90 b e 07 - d8 07 f2 07 f2 07 f2 07 f2 07 f2 07 f2 07 f2 07 - oc 08 00 00 00 00 co 00 dg 01 2e 8f 06 3c 08 0e - 2e ff 36 3c 08 2e ff 36 3e 08 2e ff 36 40 08 55 - cd fa fc 2d f6 8e de 2e 89 2e 2c 07 2e 8c 16 2e - 07 8e d6 dc 00 07 2e 89 16 28 07 2e 89 16 2a 07 - 1e 2e 8e 1e aa 07 89 3e 42 of a3 4e of 89 1e 50 - of 0e 1f c7 06 08 00 00 10 eb 13 ac 84 co 74 od - 3c 24 74 09 d4 0e dd 07 00 cd 10 ed ee c3 9c 53 - 33 od 33 co 50 90 9c 58 Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 4/34 FAKULTA INFORMATIKY I Masarykova univerzita Assemblery ■ 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čů) ■ 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 ■ Nejrozšíř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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 5/34 FAKULTA INFORMATIKY Masarykova univerzita Príklad - fragment programu v assembleru 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, mov es, mov ah, push di int 021h pop di ax ax 04Ah 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 6/34 FAKULTA INFORMATIKY I Masarykova univerzita Jazyky vyšší úrovně ■ Vyšší úroveň abstrakce ■ Prvním jazykem vyšší úrovně byL Plankalkúí 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 7/34 FAKULTA INFORMATIKY I Masarykova univerzita Fortran - FORmula TRANslator (1954) ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 8/34 FAKULTA INFORMATIKY I Masarykova univerzita Fortran - 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í I/O ■ Fortran 2008 (2010) Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 9/34 FAKULTA INFORMATIKY Masarykova univerzita Fortran 77 - príklad programu 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 *,'**ERR0R: 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 FORMAT(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 F0RMAT(/' 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 10/34 FAKULTA INFORMATIKY I Masarykova univerzita Cobol - Common Business Oriented Language (1959) ■ 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 PROCEDUŘE DIVISION - algoritmus zpracování (program) Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 11/34 FAKULTA INFORMATIKY Masarykova univerzita Cobol - príklad 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 12/34 FAKULTA INFORMATIKY I Masarykova univerzita Algol - Algorithmic Language (1958) ■ První pokus o plně univerzálni jazyk ■ Zavedl některé netradiční znaky (operátor násobení x, celočíselného dělení -=-, umocňování t, negace -i, dekadický exponent a^) m 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 13/34 FAKULTA INFORMATIKY I Masarykova univerzita Vývojové etapy ■ ALgoL 58 ■ Pouze specifikace jazyka ■ ALgoL 60 ■ Snad nejvýznamnější jazyk všech dob, ovLivniL na desetiLetí ostatní jazyky ■ I samotný prekladač predstavoval 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...), l-hodnoty, ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 14/34 FAKULTA INFORMATIKY I Masarykova univerzita 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; I: =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;". DVODICE 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+XA2 140 NEXT I~150 REM VYPOČET REGRESNÍCH KOEFICIENTU A, B 160 LET B=(P3-P1*P2/N)/(P4-P1A2/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 DE Y="A;Z\$ ;ABS(B);"X 210 PRINT Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 19/34 FAKULTA INFORMATIKY I Masarykova univerzita PL/I - Programming Language One (1964) ■ Univerzálni 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 príslušnými operačními systémy) ■ Operační systém Multics byl napsán v PL/I ■ Až příliš 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 20/34 FAKULTA INFORMATIKY I Masarykova univerzita PL/I - Deklarované dle ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 21/34 FAKULTA INFORMATIKY Masarykova univerzita PL/I - príklad podprogramu 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 (SQRT(REAL(X)**2 + IMAG(X)**2)); END ABS; Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 22/34 FAKULTA INFORMATIKY Masarykova univerzita APL - A Programming Language (1964) ■ Univerzálni 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 23/34 FAKULTA INFORMATIKY I Masarykova univerzita APL ■ 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: -=-x znamená 1/x, x^-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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 24/34 FAKULTA INFORMATIKY I Masarykova univerzita APL - príklad IXLv' )±]>,L n drop To: C7] ]>LJUST VTOM',L n mat with one entry per row C8] S<-~1++/^\L^F C' n length of address C9] frťrorr/s mo: J>S1, M is N-l, move(M,X,Z,Y), move(l,X,Y,_), move(M,Z,Y,X). Zdroj:http://www.cs.toronto.edu/~hojjat/384w09/simple-prolog-examples.html % % % % 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 29/34 FAKULTA INFORMATIKY I Masarykova univerzita Jazyk C (1972) ■ Vyvinut v BeLL Laboratories - D. Ritchie a K. Thompson ■ Spojuje prvky jazyků vysoké a nízké úrovně ■ Univerzální, zvLášf 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í) ■ ISO/IECC(C99) Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 30/34 FAKULTA INFORMATIKY I Masarykova univerzita Ada (1980) ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 31/34 FAKULTA INFORMATIKY Masarykova univerzita Ada - příklad 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 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 32/34 FAKULTA INFORMATIKY Masarykova univerzita Historie programovacích jazyků i960 1970 1930 1990 Zdroj: http: //iwi .uni-hannover. de Luděk Matýska a Eva Hladká • PV109: Historie a vývojové trendy ve VT • podzim 2021 33 / FAKULTA INFORMATIKY Masarykova univerzita Další odkazy na historii programovacích jazyků ■ 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á • PV109: Historie a vývojové trendy ve VT • podzim 2021 34/34