PV109: Historie a vývojové trendy ve VT Od strojového kódu k programovacím jazykům Luděk Matýska Fakulta informatiky Masarykovy univerzity podzim 2012 Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 1 / 34 Programovací jazyky v historickém vývoji Strojově závislé o Strojový kód o Jazyky relativních adres o Jazyky symbolických adres - assemblery o Autokódy Strojově nezávislé o Zaměřené na určitý typ úloh c Fortran - vědeckotechnické výpočty Cobol - hromadné zpracování dat u Pascal - výukové programy ; Simula, Simscript - modelovaní diskrétních systémů c EifFel - objektově orientované o Univerzálni : Algol 60, PL/I, Algol 68, Ada FORTRA ■i C Pascal High-Level Language Assembly Language Machine Language Zdroj: http://webopedia.com podzim 2012 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 (Fl MU) PV109: Historie a vývojové trendy v • 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 OD OD F2 07 F2 D5 01 2E 3E OS 2E 89 2E 2C 16 28 07 42 OF 83 10 EB 13 00 CD 10 DO OD 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 BE 07 F2 07 08 0E 08 55 16 2E 28 07 1E 50 74 OD 9C 53 - 33 DB D8 07 0C 08 2E FF CB FA 07 8E 1E 2E OF 0E 3C 24 nnrr oo oo 36 3C FC 2B D6 BC 8E 1E 1F C7 74 09 33 CO F2 D7 00 00 08 2E F6 8E 00 07 88 07 06 08 B4 0E 50 90 TTT7 CO 00 FF 36 DE 2E 2E 89 89 3E 00 00 BB 07 9C 58 Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 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ču) • 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ě • Autokody • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 5/34 ExcessOfMemory label near mov bx, di add bx, dx mov word ptr _heapbase@ + 2,1 mov word ptr _brklvl@ + 2, bx mov ax, _psp@ sub bx, ax mov es, ax mov ah, 04Ah push di int 021h 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 (Fl MU) PV109: Historie a vývojové trendy v • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 7/34 9 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 8/34 • 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, prí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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 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 YMIN= 1 XMAX=-1 YMAX=-1 0E9 0E9 0E9 0E9 DO 110 1=1,6 200 300 400 PEN(I)=' ' CALL SIZSUB(XMIN,YMIN,XMAX,YMAX,PEN,'H',NUM) PRINT 1000,NUM,XMIN,XMAX,MINC32.OO/CXMAX-XMIN), * 28.70/(YMAX-YMIN)), * YMIN,YMAX,MIN(22.00/(XMAX-XMIN),17.OO/CYMAX-YMIN) F0RMATC12X,'**** GRAPH LIMITS ****'/ * ' Number of graphs in the metafile:',i3/ * ' XMIN =',F9.3,' CM',10X,'XMAX =',F9.3,' CM'.lOX, * >LP_FACTOR =>,F10.5/> YMIN =',F9.3,' CM'.lOX, * 'YMAX =',F9.3,' CM',10X,'COLFACTOR =',F10.5) IFCPEN6.NE.' ') PRINT 1001,PEN FORMATC/' 1234567V *' PENS USED : *',6A3) GOTO 400 PRINT '("****ERROR: EMPTY GRAPHIC FILE")' PRINT >("****SIZE_GR ABORTED")' END Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 10 / 34 • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 11 / 34 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HELLOWORLD. 000300 000400* 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE-COMPUTER. RM-COEOL. 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 (Fl MU) PV109: Historie a vývojové trendy ve VT I podzim 2012 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í 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 13 / 34 • 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 ...), 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 14 / 34 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 19 / 34 • 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) • 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: O 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 20 / 34 • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 21 / 34 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 (Fl MU) PV109: Historie a vývojové trendy v • 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 o 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 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: -=-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ř. Ag]B znamená vynásob matici A inverzí matice B) Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 24 / 34 Ľ6] L<-±L<-,L n drop To; Ľ7] L<-LJUST VTOM',',L n mat with one entry per row Ľ8] n length of address Ľ9] x<-orr/s C10] L<-S+0,X)tL n align the (names) Ľ11] A^tdtpL>,X>tL n address Ľ12] M^O 1±DLTBC0,X)4.L n names) C13] C14] n change _ to blank C15] M^O "14.KJUST VTOM M n names C16] n length of last word in name PV109: Historie a vývojové trendy ve VT podzim 2012 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í). o Novější překladače jazyk podstatně rozšířily - za cenu vážného omezení přenositelnosti programů. Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 26 / 34 o 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) • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 27 / 34 • 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 • 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í • Japonská 5. generace počítačů o Řada verzí, včetně podpory OOP Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 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 moved,X,Y,_) :- write('Move top disk from '), write(X), write(' to '), write(Y), nl. move(N,X,Y,Z) :-N>1, M is N-1, move(M,X,Z,Y), move(l,X,Y,_), move(M,Z,Y,X). Zdroj: http : //www. cs. tor onto . edu/~hoj jat/384w09/simple-prolog-examples. html Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy v • 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 o 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/IEC C (C99) Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 30 / 34 • 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 o 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 31 / 34 restricted(MATH_LIB, TEXT_IO) procedure QUADRATIC_EQUATION is use TEXT_IO; 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; — tam je funkce SORT begin PUT("REAL ROOTS: "); PUT(B-SORT(D))/(2.0*A)); PUT(B+SORT(D))/(2.0*A)); PUT(NEWLINE); end; end if; end 0UADRATIC_E0UATION; Luděk Matýska (Fl MU) PV109: Historie a vývojové trendy ve VT I podzim 2012 32 / 34 • 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 (Fl MU) PV109: Historie a vývojové trendy ve VT podzim 2012 34 / 34