MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS AUTOMATIZÁLÁSI KUTATÓ INTÉZETE SOFTWARE IMPLEMENTÁCIÓS NYELVEK I r t a : Fabók J u lia n n a Tanulmányok 125/1981
A k ia d á s é r t f e l e l ő s : DR. VÁMOS TIBOR ISBN 963 311 122 6 ISSN 0324-2951 K é sz ü lt a KSH SZAMOK -ban 194/81
TARTALOMJEGYZÉK Oldal 1. BEVEZETÉS... 7 2. A SIL NYELVEKKEL SZEMBEN TÁMASZTOTT KÖVETELMÉNYEK. 10 3. A SIL NYELVEK NYELVI JE L L E M Z Ő I... 12 3.1 P r o g r a m s z e r k e z e t... 12 3.1.1 Az elem i e g y s é g... 13 3.1.2 Az ö s s z e t e t t u t a s i t á s... 15 3.1.3 B l o k k... 16 3.1.4 E ljá r á s (s z u b ru tin ) és függvény... 18 3.1.5 M o d u l...19 3.1.6 S z e g m e n s... 21 3.1.7 T á r k e z e l é s... 21 3.2 A d a t s z e r k e z e t... 24 3.2.1 Követelmények a SIL nyelvek a d a ts z e rk e z e té v e l s z e m b e n... 25 3.2.2 A t i p u s... 26 3.2.3 Nem tip u s o s nyelvek (BLISS, BCPL).... 29 3.2.4 Egyszerű ö n á lló tip u so k... 32 3.2.5 Egyszerű vonatkozó tip u s o k... 35 3.2.5.1 A s u b r a n g e... 35 3.2.5.2 A s e t... 36 3.2.5.3 P o in te r tip u s u v á lto z ó... 37 3.2.6 ö s s z e t e t t a d a ttíp u so k... 38 3.2.6.1 A t ö m b... 38 3.2.6.2 A f i l e... 39 3.2.6.3 A r e k o r d... 40 3.2.6.4 A b i t s... 41 3.2.6.5 A s t r i n g... 42 3.2.7 Union t i p u s... 43 3.2.8 A t i p u s d e f i n i á l á s problém ái... 44 3.2.9 T á r k e z e l é s... 46
4 Oldal 3.2.1 0 D eklarációk... 48 3.2.1 0.1 A d e k la rá c ió k h ely e... 48 3.2.1 0.2 A d e k la rá c ió k ta r ta lm a... 49 3.2.1 0.3 K ezdöértékadás... 51 3.3 V e z é rlé s i sz e rk e z e te k... 53 3.3.1 F e l t é t e l e s v e z é r lé s á ta d á s... 53 3.3.2 C ik lu s u ta s í tá s o k... 55 3.3.3 E s e ts z é tv á l a s z t á s... 57 3.3.4 F e l t é t e l n é l k ü l i v e z é rlé s á ta d á s (GOTO).. 59 3.3.5 S z ö k é sk ife je z é s e k... 60 3.3.6 R u tin h iv á s és v i s s z a t é r é s... 60 3.3.7 K o ru tin h i v á s... 61 4. A SIL NYELVEK ISM ERTETÉSE... 6 3 4.1 A lacsony s z in tű g é p k ö z e li SIL nyelvek... 63 4.1.1 PL360 63 4.1.1.1 A PL360 a d a ts z e rk e z e te... 64 4.1.1.2 A PL360 v e z é r lé s i s z e r k e z e te i.. 66 4.1.1.3 P ro g ram szerk ezet... 67 4.1.1.4 Egyéb s a já ts á g o k... 68 4.1.2 P L M /R 1 0... 69 4.1.2.1 A PLM/R10 a d a ts z e rk e z e te... 70 4.1.2.2 A PLM/R10 v e z é r lé s i s z e r k e z e te i. 72 4.1.2.3 A PLM/R10 program p ro g ram szerk e zete... 75 4.2 K özépszintű tip u s n é l k ü l i nyelvek... 75 4.2.1 B L I S S... 75 4.2.1.1 A BLISS a d a ts z e r k e z e te... 76 4.2.1.2 A BLISS v e z é r lé s i s z e r k e z e te i.. 79 4.2.1.3 A BLISS p ro g ram szerk ezete.... 81 4.2.2 B C P L... 82 4.2.2.1 A BCPL n y e lv a d a ts z e rk e z e te... 82 4.2.2.2 A BCPL n y e lv v e z é r lé s i s z e r k e z e te i 84 4.2.2.3 A BCPL n y e lv p ro g ram szerk ezete.. 87
5 Oldal 4.3 K özépszintű tip u s o s nyelvek... 88 4.3.1 X X P L... 88 4.3.1.1 Az XXPL a d a t s z e r k e z e t e... 88 4.3.1.2 Az XXPL v e z é r lé s i s t r u k t ú r á i.. 90 4.3.1.3 XXPL pro g ram szerk ezete... 91 4.3.2 I M P... 9 2 4.3.2.1 Az IMP a d a t s z e r k e z e t e... 92 4.3.2.2 Az IMP v e z é r lé s i s z e r k e z e te i.. 95 4.3.2.3 Az IMP p ro g ram szerk ezete.... 97 4.3.3 C - n y e l v... 9 9 4.3.3.1 A C -nyelv a d a ts z e r k e z e te.... ÍOO 4.3.3.2 A C^nyelv v e z é r lé s i s z e r k e z e te i. 103 4.3.3.3 A C -nyelv p ro g ram szerk ezete... 105 4.3.4 GESAL... 106 4.3.4.1 A GESAL a d a ts z e rk e z e te... 106 4.3.4.2 A GESAL v e z é r lé s i s z e r k e z e te i.. 109 4.3.4.3 A GESAL p ro g ram szerk ezete.... 111 4.3.5 P A S C A L... 112 4.3.5.1 A PASCAL a d a ts z e rk e z e te... 112 4.3.5.2 A PASCAL v e z é r lé s i s t r u k t ú r á i.. 114 4.3.5.3 A PASCAL p ro g ram szerk ezete... 116 4.4 M agasszintü SIL n y e l v e k... 118 4.4.1 MARY... 118 4.4.1.1 A MARY a d a t s z e r k e z e t e... 119 4.4.1.2 A MARY v e z é r lé s i s z e r k e z e te i.. 126 4.4.1.3 A MARY p ro g ram szerk ezete.... 129 4.4.2 M OD U LA -2... 130 4.4.2.1 A MODULA-2 a d a ts z e r k e z e te.... 130 4.4.2.2 A MODULA-2 v e z é r lé s i s t r u k t ú r á i. 131 4.4.2.3 A MODULA-2 p ro g ram szerk ezete.. 133
6 O ldal 4.4.3 TARTAN... 134 4.4.3.1 A TARTAN a d a t s z e r k e z e t e... 135 4.4.3.2 A TARTAN v e z é r lé s i s t r u k t ú r á i.. 138 4.4.3.3 A TARTAN p ro g ram szerk ezete.... 142 4.4.3.4 G eneric d e f i n i c i ó... 144 IRODALOMJEGYZÉK... 145
7 1. BEVEZETÉS J e le n d o lg o z at a program ozási nyelvek egy szükebb c s o p o r t j á r ó l, a so ftw are im plem entációs n y e lv e k rő l k iv án á t t e k i n t é s t n y ú jta n i. E lőször i s r ö g z itjü k, hogy m it é rtü n k softw are im p le m entációs nyelv a l a t t. A softw are im plem entációs nyelv o ly an program ozási n y elv, amely softw are re n d sze re k im p lem en tálására s z o l g á l. D e fin íc ió n k minden szavának je le n tő s é g e van. 1/ A "ren d szer" szó j e l z i, hogy nagy, ö s s z e t e t t program csom agról van szó. 2/ A "softw are" re n d s z e r olyan programcsomag, am elly el a csupasz h a rd w a re -t fe lru h á z z á k, hogy a fe lh a sz n á ló m i n é l kényelm esebben dolgozhasson v e le. Tehát a so ftw a re ren d szern ek f e l t é t l e n ü l vannak eg észen g ép k ö zeli r é s z e i i s. 3/ Az "im plem entálás" szó a z t j e l z i, hogy a r e n d s z e r k é s z i- t é s k é t nagy f á z i s a, a te rv e z é s és az im plem entálás (a k ó d o lás) k ö zü l csak az u tó b b it, a k ó d o lá s t le h e t az a- d o t t nyelven v é g ez n i. A te rv e k l e i r á s á r a m á sfa jta n y e l vek, az ú g y n e v ez e tt s p e c if ik á c ió s nyelvek s z o lg á ln a k. Ez a d e f in ic ió majdnem megegyezik a ren d szerp ro g ram o zási nyelvek szokásos é rte lm e z é s é v e l, azonban egy k i c s i t e l t é r t ő l e, m ert a k la s s z ik u s ren d szerp ro g ram o zási nyelvek a p ro g ram k észíté s m indkét f á z i s á t m egpróbálták le f e d n i vagy le g a lá b b is nem mondták k i n y ilta n, hogy csak az im p le m e n tá lásra sz o lg á ln a k. Hasonlóképpen ez a d e f in ic ió majdnem t e l j e s e n megegyezik a MÓL nyelvek (Machine O rien ted Language) és a re a l-tim e n y e l vek szokásos d e f i n í c i ó j á v a l, de azoknál a h an g sú ly e lső s o rb a n a gépközelségen van. A továbbiakban a so ftw a re im plem entációs n y e lv e k e t röviden SIL nyelveknek nevezzük. 4/ D efin íció n k b an n in cs benne, hogy "magas szin tű " n y e l vek, te h á t mi nemcsak vagy nem e lső s o rb a n a r e n d s z e r - program ozásra alkalm as magas s z in t ű nyelv ek k el f o g l a l kozunk, hanem bárm ilyen n y e lv v e l, amely alkalm as s o f t ware k é s z í t é s r e, term é sz e tese n az assem bly n y e lv e k e t k iv é v e.
8 In té z e tü n k b e n a k ö z elm ú ltb an számos so ftw a re re n d sz e r k é s z ü l t és re m é lh e tő le g fog i s k é s z ü ln i. így a so ftw are implement á c i ó s n y elv k é rd é se szám unkra élő k é rd é s. In té z etü n k b e n k i is a l a k u l t több so ftw a re im plem entációs n y e lv ( p l. PLM, GESAL). A Program ozási R endszerek O sztály s o r o z a to t t a r t o t t 1978 ta v a sz á n szem inárium., ah o l tö b b softw are im plem entációs n y e lv e t á t t e k i n t e t t ü n k, különös t e k i n t e t t e l a hazánkban és az I n té z e tünkben honos n y e lv e k re. Az á t t e k i n t e t t nyelv.ek a következők v o lta k : PL360, XXPL, C -n y elv, GESAL, IMP, BCPL, BLISS, PROCOL, C oncurrent PASCAL, EUCLID, MARY, CDL és ALEPH. A szem inárium s o ro z a t t a p a s z t a l a t a i t sz e re tn é n k most közk in c c s é te n n i ebben a tanulm ányban. A f e l s o r o l t nyelvek közül n éh án y at, m int nem so ftw are im plem entációs n y e lv e t, elh ag y tu n k, v is z o n t n éh án y at h o z z á v e ttü n k, ami különböző okok m ia tt nem s z e r e p e l t az e r e d e t i program ban. I t t e ls ő s o rb a n a PLM/R10-et, a MODULA-t és a TARTAN-t k e l l m egem líteni. D olgozatunkban e lő s z ö r á t t e k i n t j ü k a so ftw a re im plem entác ió s n y e lv ek k e l szemben tá m a s z to tt k ö v etelm én y ek et. Ezután a SIL nyelvek n y e lv i je lle m z ő i t tá r g y a lju k, e lső s o rb a n - a p ro g ram sz erk e z et, - az a d a ts z e r k e z e t és - a v e z é r l é s i s z e rk e z e te k sze m p o n tjá b ó l. Végül a t á r g y a l t SIL n y elv ek rö v id á t t e k i n t é s e k ö v etk ezik, így e z e k rő l a n y e lv e k rő l m in teg y h o r i z o n t á l i s és v e r t i k á l i s á t t e k i n t é s t i s adunk. A t á r g y a l t nyelvek a következők: a lac so n y s z in tű g ép k ö zeli n y e lv ek : PL360, PLM/RIO k ö z é p sz in tű a d a ts tr u k t ú r a n é l k ü l i nyelvek: BLISS, BCPL k ö z é p sz in tű tip u s o s nyelvek: XXPL, IMP, C -nyelv, GESAL, PASCAL magas s z in tű n y elv ek : MARY, MODULA, TARTAN
9 Az o lv a s ó r ó l f e l t é t e l e z z ü k, hogy já r a to s az á lta lá n o s r e n d e lte té s ű program ozási nyelvek t e r ü l e t é n, azaz ism er e g y -k é t á l ta lá n o s r e n d e lte t é s ű program ozási n y e lv e t (p l. ALG0L-60, FORTRAN, PL/1) és az o t t s z e re p lő fogalm akat j ó l is m e ri. Néhány a la p f o galm at azonban mégis d e f in iá lu n k, e lső so rb a n a te rm in o ló g ia i zav ar e lk e r ü lé s e v é g e tt. A tá r g y a lá s során a hatékony im plem entáció sz e m p o n tja it nagy s ú l l y a l figyelem be vesszük.
10 2. A SIL NYELVEKKEL SZEMBEN TÁMASZTOTT KÖVETELMÉNYEK Az im plem entációs n y elv tu lajd o n k é p p en f e l a d a t o r i e n t á l t program ozási n y e lv, amely a so ftw are re n d sze re k k é s z íté s e k o r (kódolásakor) fe lm e rü lő fogalm ak, m ódszerek, a d a ts tru k tú rá k l e í r á s á t t e s z i le h e tő v é. Ennek m eg felelő en az im plem entációs nyelv ek k el szem beni követelm ényeket k é t fő cso p o rtb a s o r o lh a t ju k. E g y részt e l é g í t s é k k i az á lta lá n o s program ozási n y elv ek k el szemben tá m a s z to tt k övetelm ényeket, m á sré s z t tegyék le h e tő v é a softw are k é s z í t é s n é l h a s z n á lt s p e c i á l i s program ozási tech n ik ák a lk alm azását és s p e c i á l i s igények k i e l é g í t é s é t. A pro g ram o zási n y elv ek k el szemben á lta lá b a n tá m a s z to tt követelm ények : a. P ro b lém atérh ez való k ö z elsé g A n y elv ta rta lm a z z a a zo k at a fo g alm ak at, am elyekre az a d o tt f e lh a s z n á lá s i te r ü l e t e n szükség van. b. B iz to n sá g, d e f i n i á l t s á g, z á r ts á g Az e l k ö v e t e t t t hibák com pile-tim e f e l d e r í t é s e, az undefin e d e s e te k d e f i n i á l á s a, hibához v ezető le h ető sé g ek k i z á rá sa ( p l. tömbindex tú lc s o r d u lá s s t b. ). c. O lv a sh a tó sá g, j a v i t h a t ó s á g, öndokum entálás A program mások á l t a l könnyen o lv a sh a tó és j a v íth a tó l e gyen, m in teg y s a j á t maga dokum entációjaként s z o lg á ljo n. d. E g y szerű ség, ta n u lh a tó sá g A program ozó is em ber, t ú l b o n y o lu lt d o lg o k at nehezen ta n u l meg. e. M o d u la r ité s, ré s z e n k é n ti fo r d ith a tó s á g. Nagy program ot sok ember k é s z i t, le h e tő sé g k e l l a részek ö s s z e r a k á s á r a. f. P o r t a b i l i t é s, g é p fü g g e tlen sé g. g. Rugalmas I/O k e z e lé s i le h e t ő s é g. Az im plem entációs n y elv ek k el szemben tá m a s z to tt s p e c i á l i s követelm ények : a. G épközelség A hardw are á l t a l n y ú j t o t t ö sszes le h e tő sé g k ih a s z n á lá s a.
11 b. Hatékonyság Kis memória k a p a c itá s, gyors f u t á s i id ő a k é s z i t e t t program oknál. Sokan a program ozási n y elv ek k el szemben tá m a s z to tt követelm ények közé s o r o ljá k a k i t e r j e s z t h e t ő s é g e t és a s t r u k t u r á l t sá g o t i s. Véleményünk s z e r i n t ezek csak eszközök a f e n ti c élo k e l é r é s é r e. így a k i t e r j e s z t h e t ő s é g eszköz a p ro b lém atérh ez v a ló k ö z e lsé g és az e g y sz e rű sé g, ta n u lh a tó sá g k ö z ö t t i e lle n tm o n dás á t h i d a l á s á r a. A s t r u k t u r á l t s á g pedig az o lv a s h a tó s á g o t, önd o k u m en tálást s e g i t i e lő.
12 3. A SIL NYELVEK NYELVI JELLEMZŐI Az á tta n u lm á n y o z o tt n y elv ek meglepően sok vonásban h a s o n lítanak egym ásra. Néhány s a já ts á g b a n v is z o n t e lté r n e k egym ástól. Legfontosabb n y e lv i je lle m z ő ik e t a p ro g ra m sz e rk e z e t, az a d a t- s z e rk e z e t és a v e z é r lé s i sz e rk e z e te k m ily en ség e m u ta tja. Ebben a fe je z e tb e n e z e k e t a je lle m z ő k e t tá r g y a lju k á lta lá n o s a n,ö s s z e fo g la lv a a nyelvek közös v o n á s a it. K é tfé le szem pontból é r t é k e l jük e z e k e t, e g y ré s z t a program ozó kényelm e, m á srész t a hatékony im plem entáció szem p o n tjáb ó l. 3.1 P ro g ram szerk ezet P ro g ram szerk ezet szem pontjából a re n d sze rp ro g ram o z á si n y e l vek nem különböznek lén y eg esn az á lta lá n o s r e n d e lte té s ű n y elv ek t ő l, kivéve a zo k at a tu la jd o n s á g o k a t, am elyeket a nagy m éret és a hatékony im plem entálás m egkövetel. P ro g ram szerk ezet a l a t t a z t é r t j ü k, hogy mi a program e lem i egysége és hogyan k e l l a nagyobb eg y sé g e k et a k ise b b eg ységekből vagy az e lem i egységekből f e l é p í t e n i. T ulajdonképpen a program legkisebb e g y sé g e i a k u lc ssz a v a k, a z o n o s ító k, k o n stan so k, m ű v e le tje le k és e l h a t á r o l ó j e l e k. Az u- t a s i t á s o k a t a n y elv s z in ta x is á n a k m eg felelő en k e l l a f e l s o r o l t ré sz e k b ő l ö s s z e ra k n i. Azonban az u ta s ítá s o k sz e rk e z e te nem t a r to z ik a p ro g ram szerk ezetb e. Hasonlóan m int ahogy a kém iai s z e r k e ze tb e is csak a m olekulának atomokból v a ló f e lé p íté s e t a r t o z ik, magának az atomnak a b e ls ő sz e rk e z e te már nem. Az elem i egység az u t a s i t á s, egyes nyelvekben a k i f e j e z é s. Közbülső program egység az ö s s z e t e t t u t a s i t á s és a b lo k k, a függvény és a s z u b r u tin, v a lam in t a modul. Még nagyobb program egység a szegmens. Egy vagy több szegmens e g y ü tte s e n a lk o tja a pro g ram ot. A modul és a szegmens szavak s z ó h a s z n á la tá v a l k a p c s o la t ban m egjegyezzük, hogy a modul s z ó t a MODULA n y elv modul f o g a l mának m egfelelően h a sz n á lju k (lá s d 3.1.5 ). A közbülső program egységek egyik le g fo n to sa b b fu n c k ió ja a nevek h a tá sk ö ré n e k, sc o p e -ján ak sza b á ly o zá sa. Egy program egy
13 ségben d e k l a r á l t és m ásutt f e l h a s z n á l t n e v et e x p o r t á l t névnek, m ásu tt d e f i n i á l t és i t t f e lh a s z n á lt n ev et p ed ig im p o r tá lt névnek nevezzük. A program egységek scope szem pontjából v i s e l k e d hetnek n y i t o t t vagy z á r t sc o p e -k é n t. A n y i t o t t scope autom atikusan im p o rtál minden n e v e t az ő t körülvevő s c o p e -b ó l, de semmit sem e x p o r tá l. Ily e n az ALG0L-60- b ó l j ó l is m e rt b lo k k s tru k tu r a a g l o b á l i s, lo k á l i s v á lto z ó k k a l. S zem léletesen a n y i t o t t sco p e-o t f é l i g á te r e s z tő h á rty á h o z h a s o n líth a tju k. Z árt scope e s e té n az e x p o rt/im p o r t tevékenység program ból szab á ly o zh a tó. Im p o rtálh ato k o ly an a zo n o sító k, am elyeket más egységek e x p o r tá lta k és e x p o rtá lh a to k az egységben d e f i n i á l t nevek. A nem e x p o r t á l t azo n o sító k a k ö rn y e z et számára r e j t e t t e k maradnak. A modul z á r t sco p e -o t a lk o t. Az e l j á r á s és függvénytörzs némely nyelvben n y i t o t t scope, p l. ALGOL-бО, más nyelvekben z á r t scope p l. FORTRAN. A tov áb b iak b an a program egységeket és azok ö s s z e k a p c s o lá sának m ódját tá r g y a lju k. 3.1.1 Az elem i egység Az elem i egység az u t a s i t á s, amely le h e t d i r e k t í v a, d e k la r a t i v u t a s i t á s vagy végrehajtható u t a s i t á s. A d i r e k t í v a magának a fo rd ító n a k szó ló u t a s i t á s. P l. f e l t é t e l e s f o r d i t á s. A d e k la r a ti v u ta s ítá s o k ta rta lm a z z á k az adatok l e i r á s á t, le h etn ek d e f in íc ió k vagy d e k la rá c ió k. A v é g re h a jth a tó u ta s ítá s o k ta rta lm a z z á k az akciók l e i r á s á t és leh etn ek é r té k a d á s, v e z é rlé s á tad á s vagy r u tin h iv á s. Az é rté k a d ó u t a s i t á s jobb o ld a lá n á l l ó k i f e j e z é s s z in té n a k ció k a t j e l ö l k i, k i j e l ö l i, hogy m ilyen m ű v eletek et é s m ilyen sorrendben k e l l az operandusokon e lv é g e z n i. Az akciók e lv é g z é se, azaz a k i f e j e z é s k ié r té k e lé s e k ö v etk eztéb en é rté k jön l é t r e. Az u ta s ítá s n a k h a tá s a, a k ife je z é s n e k é rté k e van. Néhány modern nyelvben az é rté k a d á s, az á t u t a l á s i s o p erát o r, igy az é rté k a d ó u t a s i t á s egyszerűen k if e je z é s s é v á l i k. Az A-В k ife je z é s n e k é rté k e is és h a tá s a is van. É rtéke az A é rté k, h a tá s a pedig a z, hogy а В v á lto z ó f e lv e s z i az A é r t é k e t. Az i
14 lyen nyelvekben az ak ció k at k if e je z é s e k so ro z a ta Í r j a le. Ez a n y e lv i s a já ts á g le h e tő v é te s z i azon hardw are le h e tő ség k i h a s z n á lá s á t, hogy t á r o l á s u tán az é r té k az akkum ulátorban marad és tovább l e h e t vele s z á m o ln i. P l. A+B - C+D k i f e j e z é s é r ték e A+B+D, h a t á s a pedig az, hogy a C v á lto z ó f e lv e s z i az A+B é r t é k e t. A program k ife je z é s e k s o ro z a ta, amelyek k i é r té k e l é s e sz e k v e n c iá lis á n t ö r t é n i k, h acsak a k if e je z é s e k h a tá s a i nem gondoskodtak az é r t é k e k t á r o l á s á r ó l. Ily e n nyelvek p l. a BLISS, C -nyelv, GESAL, MARY. A BLISS-ben és a MARY-ben a v e z é r l é s i szerk ezetek i s k if e je z é s e k o ly a n értelem b en, hogy é rté k ü k és h atásu k van. H atásu k az e l ő i r t v e z é r lé s á ta d á s, érték ü k pedig - a v e z é r l é s i sz e rk e z e tb ő l é rte le m sz e rű e n adódó é r té k. P l. az IF s z e r k e z e t k é t k i f e j e z é s k ö zü l, a CASE s z e rk e z e t pedig tö b b k if e je z é s k ö z ü l v á l a s z t j a k i, hogy m elyik kerü l k i é r t é k e l é s r e, ennek é rté k e le sz a v e z é r lé s i sz e rk e zet é r té k e i s. A függvényhivás é rté k e é rte le m sz e rű e n a v i s s z a té r ő é rté k. - m e ste rsé g e se n k i j e l ö l t é r t é k. P l. a BLISS-ben a c ik lu s sz e rk e z e te k érték e = -1 ; - a p i l l a n a t n y i l a g a k t u á l i s é r té k. P l. a MARY-ben, ha k i fe je z é s s o r o z a t k i é r t é k e l é s é t s z a k í t j a meg egy GOTO u- t a s i t á s. A MARY-ben k i f e j e z é s e n b e lü l i s s z e r e p e lh e t címke. A+B L: 2 *C GO +C - TO L Amikor a program v é g re h a jtá s a é l ő i r ő l t ö r t é n i k, akkor D=A+B+C le s z. A GOTO u t a s í t á s k ié r té k e l é s e után p ed ig D=3*C. A k i f e j e z é s o r i e n t á l t n y elv nagyobb szab ad ság o t ad a p ro g ra mozónak a nyelv b o n y o lu ltsá g á n a k lényeges nö v elése n é lk ü l. E- m e l l e t t a tá rg y k ó d h a ték o n y ság át i s n ö v eln i le h e t. Tehát SIL n y e lv e k k é n t k i f e j e z é s o r i e n t á l t nyelvek h a s z n á la ta a- j á n l o t t. A tov áb b iak b an az elem i e g y sé g e t m indig u ta s ítá s n a k h ív ju k, akár u t a s í t á s, a k á r k if e je z é s.
15 3.1.2 Az ö s s z e t e t t u t a s í t á s Az ö s s z e t e t t u t a s í t á s u ta s ítá s o k n a k u t a s í t á s z á ró je lb e t e t t s o ro z a ta. Az u t a s í t á s z á r ó je l á lta lá b a n vagy eg y szerű z á r ó j e l vagy a BEGIN...END k u lc ssz a v a k, de e lő f o r d u lh a t más k u lc ssz ó i s, p l. START...FINISH. Az ö s s z e t e t t u t a s í t á s fogalm ára akkor van szü k ség, ha a v e z é r l é s i sz e rk e ze te k olyanok, hogy bizonyos p o z íc ió b a n csak egy u t a s í t á s á l l h a t. p é ld á u l Ily e n v e z é r l é s i s z e rk e z e te k IF Fl THEN Ul ELSE U2 ; FOR N1 FROM Kl TO K2 BY КЗ DO Ul ; WHILE Fl DO Ul; I t t FI f e l t é t e l, U1 és U2 u t a s í t á s, K l, K2 és КЗ a r itm e tik a i k i fe je z é s és N1 v á lto z ó n é v. Ezekben a v e z é r lé s i sze rk e z e te k b e n ü l és U2 helyén csak egy u t a s í t á s á l l h a t. Ha ide több u t a s í t á s t k í vánunk í r n i, akkor u t a s í t á s z á r ó j e l e t k e l l h asználnunk. Ö ssz e t e t t u t a s í t á s van p l. nyelvekben. a PL360, PASCAL, BCPL, BLISS, C -nyelv Ha a v e z é r lé s i sze rk e z e te k s t r u k t ú r á j a nem k ö v e te li meg, hogy bizonyos p o zíció k b an csak egy u t a s í t á s á l l j o n, akkor a nyelvben n in c s szükség ö s s z e t e t t u t a s í t á s r a. M int 3. 3-ban e z t l á t n i fo g ju k, e z t a problém át leggyakrabban úgy o ld ják meg, hogy a v e z é r lé s i s z e r k e z e t záró k u lc s s z ó v a l re n d e lk e z ik. P l. I F... F I, DO...OD, CASE...ESAC. Ily e n nyelvek p l. a GESAL, XXPL. Az ö s z - s z e t e t t u t a s í t á s fogalm ának e lh a g y á sa v ilá g o sa b b á te s z i a n y e lv s z e r k e z e té t és a fo rd ító p ro g ra m d o lg á t is m egkönnyíti. A v álto zó k s c o p e - ja szem pontjából az ö s s z e t e t t u t a s í t á s k é tfé le k é p p e n v is e lk e d h e t. a/ A v álto zó k s c o p e - já r a n in cs b e f o ly á s s a l. Ez esetben a k ö v e t kező problémák m erülnek f e l: - Ha az ö s s z e t e t t u t a s í t á s nem k ü lö n sco p e, akkor az ö s s z e t e t t u t a s í t á s b a k ív ü lr ő l be l e h e t u g ra n i. Ha s p e c i á l i s pozíció k b an p l. FOR c ik lu s n á l e z t nem a k a rju k m egengedni, akkor külön meg k e l l t i l t a n i a c ik lu s tö rz s b e való b e u g r á s t. P l. ALG0L-60.
16 - N eheziti az im p le m e n tá lá st, ha az ö s s z e t e t t u t a s i t á s is és a b lo k k i s a BEGIN... END k u lc ssz av a k k ö z ö tt á l l, bár scope szem p o n tjáb ó l e l t é r ő a v is e lk e d é sü k. Ekkor BEGIN u- tán v i z s g á l n i k e ll a k ö v etk ező u t a s i t á s t. Ha d e k la r á c ió k ö v e tk e z ik, akkor b lo k k r ó l van szó és a cimkék s c o p e -ja is m e g v á lto z ik. Ha n in c s d e k la r á c ió, akkor ö s s z e t e t t u ta sításb an vagyunk és a scope nem v á lto z ik. b / Az ö s s z e te tt u t a s i t á s n y i t o t t scope. Ez e se tb e n BEGIN után m indig scope v á lto z á s van é s autom atikusan adódik, hogy öszs z e t e t t u t a s i t á s b e ls e jé b e, ig y FOR, WHILE stb. c ik lu s o k tö r zsébe nem s z a b a d ugrani. É rd e k e s, hogy e z t a kézenfekvő l e h e tő sé g e t sem a hagyományos program ozási nyelvek, sem az ősz s z e t e t t u t a s í t á s s a l re n d e lk e z ő SIL n y elv ek nem h a s z n á ljá k ki A.N.Habermann többek k ö z ö tt e z t is a PASCAL szemére v e t i [1 7 ]. 3.1.3 Blokk A blokk u t a s i t á s z á r ó j e l b e t e t t olyan p ro g ram rész, amely d e k la r a ti v u t a s í t á s o k a t is ta r ta lm a z. D e k la rá c ió t m indig k e ll ta rta lm a z n ia, k ü lö n b e n nem b lo k k, hanem ö s s z e t e t t u t a s i t á s. B lo k k s tru k tu rá v a l a változók h a tá s k ö r é t k o r lá to z h a tju k. Egy blokkban d e k l a r á l t változó h a tá s k ö r e m indig lo k á lis a b lo k k ra n ézv e. Egymásba s k a tu l y á z o tt blokkok e se té n a külső b lo k k v á l to z ó i g lo b á lisak a b első b lo k k ra nézve, azaz autom atikusam imp o rtá ló d n a k, de a b e ls ő blokk v á lto z ó i lo k á lis o k, azaz nem exp o rtá ló d n a k. Más szav ak k al a b lo k k n y i t o t t s c o p e -o t a l k o t. Ujra d e k la r á lá s le h e ts é g e s,e z e s e tb e n az u j r a d e k l a r á l t v á lto z ó lo k á l i s s a já t b lo k k já b a n, k iv ü l p e d ig az e lő z ő d e k la rá c ió é rv é nyes. B lo k k s tru k tu ra esetén a tárgyprogram ban o v e r la y - e z e tt t á r k e z e lé s valósul m eg, ugyanis a párhuzamos blokkoknak u g y an arra a memória t e r ü l e t r e fo g la lh a tu n k h e ly e t. így a program memória igénye lecsökken. A h e ly fo g la lá s azonban s t a t i k u s, az adatok h e ly e már a f o r d i t á s során m eghatározódhat ( f e l t é v e, hogy n in cs
17 dinam ikus tömbindex és re k u rz iv r u ti n h iv á s ). A v álto zó k é r t é k é nek e lé r é s e v is z o n t b o n y o lu lta b b á v á lik. H iszen, ha egy v á lto z ó a v é g r e h a jtá s a l a t t lévő blokkban n in cs le k ö tv e, akkor az ő t ta rta lm a z ó leg k iseb b k ü lső blokkban k e ll k e r e s n i. Ha o t t s i n c s le k ö tv e, akkor a még külsőbb blokkban és igy to v áb b a le g k ü l sőbb s z i n t i g. Azonban mindez a f o r d i t á s id e je a l a t t tö r t é n h e t, s igy a tárgykód h aték o n y sá g át nem r o n tja. M egjegyezzük, hogy i t t szándékosan nem b esz é lü n k dinam ikus t á r k e z e l é s r ő l. A dinam ikus tá r k e z e lé s azt j e l e n t i, hogy a v á l tozók h ely e fu tá s k o r f o g la ló d ik és szabadul f e l. A dinam ikus t á r k e z e l é s t m eg v aló sító verem te c h n ik a le h e tő v é te s z i - a b lo k k s tr u k tu r a, - a re k u rz iv r u tin h iv á s és - a dinam ikus tömbök e g y id e jű m e g v a ló s itá s á t. Azonban ha csak a b lo k k s tr u k tu r á t n é z zük önmagában, akkor a fen teb b mondottak é rv é n y esek. Program ozási szem pontból a b lo k k s tr u k tu r a m eg k ö n n y ith eti a különböző személyek á l t a l i r t programok ö s s z e é p í t é s é t, h is z e n az azonos eln ev ezésű v á lto z ó k nem okozhatnak b a j t az ö s s z e é p í t é s n é l. M ásrészt v is z o n t h á tr á n y t j e l e n t, hogy az egyes blokkok k ö z ö tti a d a tá ta d á s csak g lo b á lis változókon k e r e s z tü l t ö r t é n h e t és e z t a programozónak k e l l m egszervezni. Az is h á tr á n y t j e l e n t, hogy az egyes blokkok ö s s z e s z e r k e s z té s é t fo r d itá s e l ő t t fo rrá s n y e lv e n k e l l e lv é g e z n i. E z é rt a különböző személyek á l t a l i r t programok ö s s z e é p íté s é r e kényelm esebb a szegmens s z e r k e z e t e t h a s z n á ln i, amely megengedi a ré s z e n k é n ti f o r d ith a t ó s á g o t is ( 3.1.6 ). A b lo k k s tru k tu r a nem s e g i t i e lő a top-dow n, s z i n t r ő l - s z i n t - re fo k o zato san b ő v itő program te r v e z é s t. A program öndokum entált ság a, o lv a sh a tó ság a i s ro s s z, m ert a blokkok t e l j e s te rje d e lm ü k ben a helyükön vannak és n in c s, i l l e t v e nem ta r t o z i k a n y elv h ez a program v á zá t m utató rö v id l e i r á s, amelynek k i f e j t é s é v e l á l l e lő a t e l j e s program. M egjegyezzük, hogy a b lo k k s tru k tu ra é r t é k e lé s é r e vonatkozó nézetünk e l l e n t é t e s több neves s z á m ítá s te c h n ik a i szakember v é le m ényével. P l. N.W irth Í r j a : "Block s tr u c tu r e has proved to be a most v a lu a b le f a c i l i t y in sy ste m a tic program d e sig n." (A b lo k k
18 s tr u k tú r a b iz o n y u l t a s z is z te m a tik u s program te rv e z é s eg y ik le g é rté k e se b b esz k ö z én e k ) [23] 5. o ld. Véleményünk s z e r i n t nem a b lo k k s tr u k tu r a, hanem a v á lto z ó k sco p e -já n a k a k o rlá to z á s a a l é n y e g e s, ami más eszközökkel i s e lé r h e tő. P l. a PASCAL-ban az e l j á r á s t ö r z s j á t s s z a ugyanezt a s z e re p e t. 3.1.4 E ljárás ( s z u b r u tin ) é s függvény M indkettő ö n á l l ó p ro g ram rész, amely a h iv ó programmal a param étereken k e r e s z t ü l é r i n t k e z i k. A k ü lö n b ség az k ö z ö ttü k, hogy a függvénynek e g y e t l e n v i s s z a t é r ő param étere van, to v áb b á, hogy a ru tin h iv á s a k c i ó, te h á t ö n á lló u t a s i t á s, mig a függvényhivás egy é r té k e t k é p v i s e l, te h á t k i f e j e z é s o p eran d u sa le h e t. Tovább i különbség l e h e t n e, hogy a függvénynél nem k iv á n ato s a s id e - e f f e c t, e zé rt a g l o b á l i s v á lto z ó k h a s z n á la ta k erü len d ő. E m iatt a fü g g v én y tö rzsn ek z á r t sco p e-n ak k e lle n e l e n n i, mig az e l j á r á s n y i t o t t scope l e h e t. A g y a k o rla tb a n azonban e z t a m egkülönböztet é s t á lta lá b a n nem te s z ik meg és scope szem pontjából egyform án k e z e lik őket. A to v áb b iak b an a k é t fogalm at közösen tá r g y a lju k és e l j á r á s néven b eszélü n k r ó l a. A p a ra m é te rá ta d á s form ái a hagyományos program ozási n y e l v e k n é l az é r té k, a h iv a tk o z ás é s a név s z e r i n t i p a ra m éte rá ta d ás. P l. az ALGOL-60-ban név és é r t é k s z e r i n t i p a ra m é te rá ta d á s van, a FORTRAN-ban h iv a tk o z á s s z e r i n t i. Mint is m e r e te s, é rté k s z e r i n t i p a ra m é te rá ta d á s e se té n az a k t u á l i s p aram éterek é rté k e bemásoló d ik az e ljá r á s l o k á l i s adatm ezejébe. E z é rt ö s s z e t e t t adatm e zők, p l. tömbök é r t é k s z e r i n t i á ta d á s á t á l t a l á b a n c é ls z e r ű megt i l t a n i. Ezeket c s a k h iv a tk o z á s s z e r in t szab ad á ta d n i. Ha a n y elv b en p o in te r v á lto z ó van, akkor egy adatm ezőre m utató p o in te r - v á lto z ó é rté k é n e k érté k s z e r i n t i á ta d á s a azonos h a tá s ú az adatm ező h iv a tk o z á s s z e r i n t i á ta d á s á v a l. E z é r t az é rté k s z e r i n t i á ta d á s tu lajd o n k ép p en minden c é l t k i e l é g i t, s igy h iv a tk o z á s s z e r i n t i p a ra m éte rá ta d ás nem i s szükséges. Ennek e lle n é r e néhány re n d sze rp ro g ram o z á si nyelv m égis m e g ta r to tta. P l. IMP, PASCAL s tb. Név s z e r in ti p a ra m é te rá ta d á s a SIL nyelvekben n in c s. Az e ljá rá so k vagy egym ásbaágyazhatók vagy nem, és vagy r e k u rz ív a k vagy nem. Egymásbaágyazáson a z t é r t j ü k, hogy egy e l j á
19 rá s ta rta lm a z z a egy m ásik e l j á r á s d e k l a r á c i ó j á t. Rekurziv e l j á r á s r ó l pedig akkor b e sz é lü n k, ha egy e l j á r á s az e l j á r á s t ö r z s ö n b e lü l önmagát h iv ja közvetve vagy k ö z v e tle n ü l. egymásba ágyazhatok n in c s egymásba ágyazás re k u rz iv ALGOL-60 GESAL nem re k u rz iv XXPL FORTRAN A re k u rz ió nagyon m egnöveli egy n y elv e r e j é t. R ekurziv e l já r á s o k a t majdnem minden SIL n y elv megenged. Az e ljá rá s o k sco p e - já v a l k a p cso la tb an e l t é r ő a g y a k o rla t. Egyes nyelvekben az e l j á r á s t ö r z s n y i t o t t sco p e, azaz a tö rz s ö n b e lü l megengedik a g lo b á l i s v álto zó k h a s z n á l a t á t. P l. GESAL, PASCAL, más nyelvek v i sz o n t nem. P l. TARTAN. Érdekes je le n s é g, hogy a MODULA-ban az e l j á r á s a t t ó l f ü g gően n y i t o t t vagy z á r t scope, hogy van-e benne " u s e - l i s t ". Ha van, akkor z á r t sco p e, különben n y i t o t t. Ha az e l j á r á s t ö r z s n y i t o t t sco p e, akkor egym ásbaágyazott e ljá r á s o k e s e té n a nevek h a tásk ö re ugyanolyan, m int b lo k k s tru k - tu r a e s e té n. Tehát egym ásbaágyazott e ljá r á s o k k a l mindent meg l e h e t c s i n á l n i, am it b lo k k s tr u k tu r á v a l le h e t, azonban a program so k k al o lv ash ató b b l e s z, m ert a főprogram m u ta tja a program v á z á t, azaz az egym ásután hivandó e l j á r á s o k a t. 3.1.5 Modul A modul s z ó t különböző nyelvek különböző érteim ben h a s z n á l já k. Szokásos h a s z n á la ta, hogy a m o d u la ritá s a l a t t a ré s z e n k é n t i fo r d ith a tó s á g o t é r t j ü k. Ez e se tb e n a modul a programnak egy ö n á lló a n f o r d i t o t t ré s z e. Mi e r r e a fogalom ra a szegmens k i f e j e z é s t h a sz n á lju k. S zóhasználatunkban a modul z á r t s c o p e -o t a l ko tó program egység. Ez a te rm in o ló g ia a MODULA és TARTAN modul fogalmának f e l e l meg. A modul fogalom leg fo n to sab b je lle m z ő i. A modul a d a td e k la rá c ió k b ó l, e ljá r á s d e k la r á c ió k b ó l és v é g re h a jth a tó u t a s í tá s o k so-
20 ro z a tá b ó l á l l ó e g y sé g, amely z á r t s c o p e -o t a lk o t. L egfontosabb fu n k c ió ja, hogy a nevek h a t á s k ö r é t sz a b á ly o zz a. N.W irth Í r j a "The module s h o u ld be th o u g h t o f as a fen ce around i t s o b je c ts." (A m odult úgy k e l l e lk é p z e ln i, m int egy k e r í t é s t az objektum ai k ö r ü l. ) [23] 5. o ld. vagy m á s u tt: "The module has one and only one fu n c tio n, nam ely to e s t a b l i s h a s t a t i c scope o f i d e n t i f i e r s " [25] 69. o ld. (A modulnak egy és c sa k is egy szerepe van, tu d n i i l l i k az a z o n o s ító k egy s t a t i k u s sco p e-ján ak a lé tr e h o z á s a.) A modulon b e lü l a nevek l o k á l i s a k, kivéve az e x p o r t á l t n ev ek et, am elyeket a d e f i n e - l i s t ta r ta lm a z. G lo b á lis v á lto z ó nem h a sz n á l h a t ó, kivéve az im p o r tá lt v á lto z ó k a t, am elyeket az u s e - l i s t t a r ta lm a z. Tehát a d e f i n e - l i s t, u s e - l i s t h a s z n á la tá v a l a programozó szab ály o zn i t u d j a a v á lto z ó k h a tá s k ö r é t. E x p o rtá ln i le h e t b á r m ily en n ev et, v á lto z ó, k o n s ta n s, típ u s és e l j á r á s n e v e t i s. A modul fogalom k é t ose az ALGOL-60 own v á lto z ó ja és a SIMULA-67 o s z t á l y fogalma. A modul szám ára akkor fo g la ló d ik h e ly, amikor d e k la r á c ió ja f e ld o lg o z á s r a k e r ü l, azaz am ikor az ö t ta rta lm a zó e l j á r á s t m eghívták és a modul tö rz s e i s ekkor f u t l e. A modul o b je k tu m a i azonban a tö rz s l e f u t á s a u tán i s é le tb e n maradnak és az e x p o r t á l t nevek h iv a tk o z h a to k. A SIMULA-67 o szt á l y fogalm ától e l t é r an n y ib an, hogy a modul m indig egypéldányu és d e k la r á lá s k o r g e n e rá ló d ik. H a so n lít an n y ib an, hogy a modulban a d a t s t r u k t ú r á t és r a j t a é r te lm e z e tt e l j á r á s o k a t le h e t l e í r n i és k ív ü lr ő l a d e f i n i á l t e l j á r á s o k s e g íts é g é v e l k e z e lh e tjü k az a d a t s t r u k t ú r á t annak k o n k ré t ism erete n é lk ü l. E zzel a te c h n ik á v a l m e g v a ló síth a tó az in fo rm áció k " e l r e j t é s e ", a b s z tr a k t a- d a ts t r u k tu r a k e z e lé s e. Példa: Ha eg y modulban egy q u eu e-t akarunk k e z e ln i, akkor d e f i n i á l j u k a queue a d a t s t r u k t ú r á j á t (egy t á r t e r ü l e t k é t m utatóv a l) és az in q u e u e, dequeue e l j á r á s o k a t, de csak a típ u s n e v e t és az e ljá r á s n e v e k e t e x p o r tá lju k. A típ u s n é v e x p o r tja nem j e l e n t i a típ u s l e í r á s e x p o r t j á t i s. F e lh a sz n á lá sk o r az im p o rtá lt típ u s h o z d e k la rá lu n k v á lto z ó k a t és ezekre alkalm azzuk az import á l t e l j á r á s o k a t. A modulok akárhány m élységben egym ásbaágyazh a t ó k.
21 3.1.6 Szegmens A szegmens s z e r k e z e t a r r a s z o lg á l, hogy különböző p r o g r a mozók e s e t l e g más-más nyelven i r t p ro g ra m ja it e g y e tle n program má le h e sse n ö s s z e á l l í t a n i. A szegmens egy t e l j e s e n ö n álló p ro g ram egység. A szegmensek k ö z ö tti k a p c s o la t közösen h a s z n á lt objektumokon k e r e s z tü l v a ló s u l meg. E zeket az objektum okat a p ro g ramban á lta lá b a n az "EXTERNAL" - ENTRY" k u lc ssz a v a k k a l j e l ö l i k meg. EXTERNAL az a v á lto z ó, amelynek h ely e valam ely másik s z e g mensben van, az ENTRY v á lto z ó ra pedig másik szegm ensből i s h i v a tk o zh a tn a k, de a h e ly e i t t van. Néhány SIL nyelvben az ENTRY k u lc s s z ó t nem te s z ik k i, hanem a főprogram v á lto z ó i a u to m atik u san ENTRY-nek szám itódnak. P l. XXPL, C -nyelv. Az ENTRY és a GLOBAL k u lcsszó k szinonim ák. A modul és a szegmens fogalmak k ö z ö tt sok a h aso n ló ság. Közös vonás az, hogy m in d k ettő z á r t sc o p e -o t a l k o t. E lté rő v is z o n t a c é l a k é t e se tb e n. Modul e s e té n a c é l az in fo rm áció e l r e j t é s e, a v á lto z ó k sco p e-ján ak k o rlá to z á s a. Ez n in c s e lle n té tb e n a modulok eg ym ásbaágyazásával. Szegmens e s e té n a c é l a ré s z e n k é n ti fo r d ith a tó s á g. Ebből k ö v e tk e z ik, hogy a szegmenseknek z á rt sc o p e - o t k e l l a lk o tn i, h is z e n a szegmens ö n á lló a n f o r d íth a tó a tö b b i szegmens b e lső v ilá g á n a k ism e rete n é lk ü l. A szegmensek k ö z ö t t i k a p c s o la t m egterem tése a lin k ag e e d i t o r d o lg a. Ehhez adnak s e g í t s é g e t az EXTERNAL-ENTRY d e k la rá c ió k. A szegmensek m indig m ell é r e n d e l t s z e re p e t já ts z a n a k, n in c s egym ásbaágyazás. 3.1.7 T árk ezelés Ebben a pontban csak a p ro g ra m s z e rk e z e tte l k a p c so la to s t á r k e z e lé s i problém ákkal fo g la lk o z u n k, v á lto z ó töm bindex m ia tt szűk séges dinam ikus t á r k e z e l é s s e l nem. B lo k k s tru k tu ra és egym ásbaágyazható vagy re k u rz iv e ljá r á s o k e g y id e jű f e n n á llá s a e s e té n a t á r k e z e l é s i mechanizmus b o n y o lu lttá v á lik. A b o n y o lu lts á g o t az okozza, hogy a dinam ikus (h ív á s i) és s t a t i k u s (h iv a tk o z á s i) k ö r n y e z e t e lv á l h a t eg y m ástó l. H ivási k ö rn y ezet a l a t t a z t a k ö rn y e z e t e t é r t j ü k, amely az a d o tt e l j á r á s t m eg h iv ta, e z z e l az a k tu á l i s param étereken k e r e s z tü l é r in tk e z ik az e l j á r á s. A h iv a tk o z á s i k ö rn y e z et pedig az a k ö rn y e z e t, melyben az e l j á r á s tö r z s e
22 d e k la r á lv a l e t t és melynek v á l t o z ó i r a, m in t g lo b á lis v á lto z ó k ra az e l j á r á s tö rz s e h iv a tk o z h a t. A k e ttő nem szükségképpen d is z - ju n k t. T ekintsük a következő p é ld á t. d e c la re p ro c Al d e c la r e var B1 d e c la r e proc A21 d e c la re v a r B21 d e c la re p ro c A31 d e c la r e var B3 BEGIN a c c e ss B1VB21VB3 c a l l A22 ( c a l l A31VA21VA1) END BEGIN access B1VB21 c a l l A31 c a l l A22 ( c a ll A21VA1) END d e c la r e proc A22 d e c la re v a r B22 BEGIN access B1VB22 c a l l A21 ( c a l l A22VA1) END BEGIN a c c e ss Bl c a l l A21VA22 ( c a l l Al) END 1. ábra
23 A p é ld a a nevek h a tá s k ö ré t i s m u ta tja. A z á r ó je lb e t e t t h i vások csak akkor végezhetők e l, ha re k u rz ió m egengedett. T ekintsük most a következő h iv á s s o ro z a to t Al : A21 : A31 : A22 : A21 : A31. Ez esetb en a verem s z e rk e z e te s t a t i k u s lán c dinam ikus lánc A verem elem ei az egyes e l j á r á s o k szám ára f o g l a l t t á r t e r ü le te k. L á th a tju k, hogy p l. A21 h iv ó ja A22, s t a t i k u s k ö rn y e z e te pedig Al. A g y a k o r la ti m e g v a ló sitá s ra k é t módszer van. Az eg y ik móds z e r az, hogy az adatm ezőket k ie g é s z ítjü k k é t m u ta tó v a l, az e- gyik m utató a hivó e l j á r á s a d atm ez ejére m u tat, a másik m utató pedig a s t a t i k u s szerk ezetn ek m e g fe lelő adatm ezőre, azaz a r r a az adatm ezőre, ah o l a g lo b á lis v á lto z ó k le vannak k ö tv e. A h i vó e l j á r á s r a m utató p o in te re k a lk o tjá k a dinam ikus ( h iv á s i) l á n c o t, mig a s t a t i k u s k ö rn y e z e tre m utató p o in te re k a s t a t i k u s (h iv a tk o z á s i) lá n c o t a lk o tjá k. A 2. ábrán ezek i s f e l vannak tü n te tv e. A m ásik módszer az, hogy bevezetünk k é t v e k t o r t, az egyik dinam ikus sorrendben t á r o l j a a b á z is c im e k e t, a m ásik ped ig a "m ély ség v ek to r", amely a program s t a t i k u s b á z is c im e it mut a t j a. M indkét mechanizmus m e g v a ló sitá sa lényegesen l e l a s s í t j a a tá rg y program m űködését, h isz e n m indenegyes v á lto z ó é rté k é n e k e lé ré s h e z több lé p é s b ő l á lló e l j á r á s t k e l l v é g r e h a jta n i. F el k e l l g ö n g y ö líte n i a s ta t ik u s lá n c o t vagy elem ezni k e l l a m élys é g v e k to rt. R áadásul m indezt f u tá s id ő a l a t t k e l l e lv é g e z n i, h i szen a dinam ikus k ö rn y ezet csak fu tásk ö zb en jön l é t r e. V iz sg á lju k most meg, hogyan k e rü lh e tjü k e l e z t a n e h é z sé g e t. A 3. ábrán lá th a tó egy eg y szerű b b tá r k e z e l é s i mechanizmus.
2 î } dinam ikus lán c 3. á b ra Minden nem l o k á l i s v á lto z ó u g y a n o tt van le k ö tv e. L é tjo g o s u lts á g a abban az e s e tb e n van, ha a nyelvben minden e l j á r á s a fő s z in te n van d e k la r á lv a, azaz m e g tiltju k az e ljá r á s o k egymásb aág y a z ását (GESAL, C -n y elv ), vagy ha az e ljá r á s o k csak s p e c iá l i s g lo b á lis v á lto z ó k a t h a sz n á lh a tn a k. (COMMON, STATIC). P l. FORTRAN, BCPL. M eg v a ló sitá si mód: a v á lto z ó k h ely e f o r d ítá s k o r m eghatároz h a tó, a nem l o k á l i s v álto zó k é a s t a t i k u s mezőben, a lo k á lis o k é (a fo rm ális p a ra m é te re k is l o k á l i s v álto zó k n ak szám ítanak) ped ig az e l j á r á s s a j á t adatm ezejében. A f u t t a t á s 2 b á z i s r e g i s z t e r fe lh a s z n á lá s á v a l g azd aság o s. Az eg y ik b á z i s r e g i s z t e r a s t a t i k u s adatmező kezdőcím ét ta rta lm a z z a, a másik p ed ig az a k t u á l i s l o k á l i s adatm ezőét. A verem k e z e lé s e a l o k á l i s b á z i s r e g i s z t e r t a r talm ának m e g v á lto z ta tá sá v a l t ö r t é n h e t. E zt a t á r k e z e l é s i m echanizm ust SIL n y elv ek n él érdem es megv a l ó s í t a n i, m ert h a ték o n y im plem entáció k é s z íth e tő és nem szüki t i le tú lság o san a programozó le h e t ő s é g e i t. 3.2 A d atszerk ezet Az a d a ts z e r k e z e t a l a t t a z t é r t j ü k, hogy m ilyen ad ato k vannak a nyelvben és hogyan le h e t ő k e t h a s z n á ln i, m it k e l l d e k la r á l n i, hogyan l e h e t e lé r n i és h a s z n á la tk o r m ilyen e lle n ő r z é s t ö r t é n i k.
25 Az a d a ts z e rk e z e te k h e ly es m eg v álasztása a SIL nyelvek k u lc sk é rd é s e. Döntő fo n to ssá g ú, hogy a g é p k ö z e li dolgokat i s le le h essen Í r n i, legyen b it-m a n ip u lá c ió és k a r a k te r, i l l e t v e s t r i n g fe ld o lg o z á s. A továbbiakban e lő s z ö r á t t e k i n t j ü k a SIL nyelvek a d a t s z e r k e z e té v e l szemben fe n n á lló k ö v etelm én y ek et, majd fo g lalk o zu n k a j e l e n l e g i SIL nyelvek tip ik u s a d a ts z e r k e z e te iv e l. A nem tip u s o s nyelvek is m e rte té s e u tá n a tip u s o s n y elv ek k el foglalkozunk az eg y szerű ö n á lló és s z á r m a z ta to tt, az ö s s z e t e t t tip u so k és az u- nion t i p u s, v alam in t a t i p u s s a l k a p c s o la to s egyéb problémák t á r g y alásán k e r e s z tü l. 3.2.1 Követelmények a SIL nyelvek a d a ts z e r k e z e té v e l szemben Véleményünk s z e r i n t a SIL nyelveknek le h e tő v é k e ll t e n n i, a/ hogy a programozó uj a d a ts z e r k e z e te t d e f in iá lh a s s o n, azonban b e é p i t e t t tip u s k é n t ta rta lm a z n ia k e l l a re n d szerp ro g ram o zásn á l h a s z n á lt szokásos a d a ts tr u k tú r á k a t. b/ hogy a programozó kézben t a r t h a s s a az adatok h e ly f o g l a l á s á t, ugyanahhoz a memória helyhez különbözőképpen i s h o z z á fé rh e s sen és a v á lto z ó k e z e lé s é re vonatkozóan i s adhasson u t a s í t á s t. ( E x p lic it d e k la r á c ió s u t a s i t á s, union tip u s, memória o s z t á l y. ) с/ A g ép k ö zeli dolgok le írá s á h o z egyes adatok b i t j e i h e z v a ló h o z z á fé ré s szü k ség es. d/ S zö v eg feld o lg o zás v é g re h a jtá sá h o z p ed ig a k a ra k te r i l l e t v e s t r i n g tip u s u v á lto z ó b e v ez e tése c é ls z e r ű. e / R eferen c ia tip u s u v á lto z ó k e l l a h iv a tk o z áso k k e z e lé sé h e z, p l. tá b lá z a to k, tömbök átad ásáh o z.
26 f / N öveli a b iz to n s á g o t, ha s z ig o rú tip u s e lle n ő r z é s van, bár a SIL nyelvek egy része éppen az e l l e n ő r z é s t e j t i e l a memóriá h o z való tö b b f é le h o z z á fé ré s érdekében. T erm észetesen az i t t f e l s o r o l t szem pontokat nem m indenki t a r t j a egyformán fo n to sn ak, ig y az egyik nyelvben az e g y ik, más nyelvben a másik szempont kap nagyobb s ú ly t. 3.2.2 A tip u s Az adatok tip u s o s s á g a a SIL nyelvek eg y ik le g v ita to tta b b k érd é se v o lt. A t i p u s fogalm ának leg lén y eg eseb b v o n á s a it Hoare igy f o g l a l j a ö ssz e [28] 92. o l d. : "The type in fo rm atio n d e t e r mines th e r e p r e s e n ta tio n of th e values o f th e v a r ia b le, and the amount of com puter sto ra g e w hich must be a llo c a te d to i t. Type in fo rm a tio n a ls o d eterm in es th e manner in which a r ith m e tic ope r a t o r s are to be i n t e r p r e t e d ; and en ab les a com piler to r e j e c t as m eaningless th o s e programs which invokve in a p p ro p ria te ope r a t i o n s. " (A tip u s in fo rm á c ió m eghatározza a v á lto z ó érték én ek r e p r e z e n tá c ió já t és a szám ára l e f o g l a l t t á r t e r ü l e t n ag y ság át. M eghatározza az a r itm e tik a i o p e rá to ro k in te r p r e tá lá s á n a k m ódját és k ép essé t e s z i a c o m p ile r - t, hogy f e l f e d j e a programban e l ő fo rd u ló t i p u s ö s s z e f é r h e t e t l e n s é g e t.) Hoare s z e r i n t a tip u s fogalmának le g fo n to sa b b je lle m z ő i: 1/ A tip u s m eghatározza az érté k ek n e k a z t a k é s z l e t é t, am elyet a v á lto z ó vagy k if e je z é s f e lv e h e t. 2/ Minden é rté k h ez ta r t o z i k egy és csak egy tip u s. 3/ Bárm elyik k o n s ta n s, v á lto z ó vagy k i f e j e z é s á l t a l j e l ö l t é r ték tip u s a le s z á rm a z ta th a tó a form ájából vagy a k ö rn y e z e té b ő l a n é lk ü l, hogy k o n k rét é r t é k é t ism ernénk. 4/ Minden o p e rá to r e lő r e r ö g z i t e t t tip u s u op eran d u so k at v á r és r ö g z í t e t t tip u s u eredm ényt s z o l g á l t a t. Ahol ugyanazt a szimbólum ot h a sz n á lju k különböző tip u so k e se té n, p l. + j e l ö l i az in te g e r és r e a l ö s sz e a d á st i s, o t t e z t a szim bólum ot tö b b é r- telm ünek t e k i n t j ü k, amely tö b b különböző a k t u á l i s o p e r á to r t j e l ö l. Ez a s z is z te m a tik u s tö b b értelm ű ség m indig a f o r d itá s so rán t i s z t á z ó d i k.
27 5/ Im plem entáláskor a ti p u s in fo rm á c ió t a r r a h a sz n á lju k, hogy - fe lis m e rjü k é s /v a g y m eggátoljuk az é r te lm e tle n program k o n stru k c ió k a t; - m eghatározzuk az adatok re p re z e n tá lá s á n a k és m a n ip u lá lá s á nak m ó d ját. Az elm ondottak az eg y szerű t í p u s r a vonatkoznak. Mint l á t tu k, eg y szerű tip u s n á l a v á lto z ó típ u s a m egszabja, hogy é r t é k é t m ilyen k é s z le tb ő l v e h e t i. Az eg y szerű típ u so k egy r é s z é n é l, a b e é p í t e t t vagy s ta n d a rd típ u s o k n á l, a gépi re p re z e n tá c ió e g y é r telm űen m egszabja az é r t é k k é s z l e t e t és a v ég ezh ető m ű v e le te k e t. P l. az i n t e g e r tip u s é r té k k é s z le te az a d o tt b ith o s s z u s á g g a l á b rá z o lh a tó egészszám ok, a k a ra k te r t i p u s é r té k k é s z le te a k o n f i guráció b an h a s z n á lt k a r a k t e r k é s z l e t s tb. Más típ u so k n á l csak az é r t é k k é s z l e t m ily e n sé g é t ad ja meg a n y e lv, p l. halm az, h a tv á n y halmaz s tb. Ez e se tb e n a programozónak k e l l megadni a k o n k ré t k é s z l e t e t, am it n é v v el l á t h a t e l, p l. f e l s o r o l j a a halmaz e l e m e it. Ily e n k o r tip u s d e f i n i c i ó r ó l b e sz é lü n k. A továbbiakban a fe lh a s z n á ló á l t a l d e f i n i á l t típ u s o k a t d e f i n i á l t típusoknak f o g juk n ev ezn i. A v á lto z ó d e k la r á c ió egy k o n k ré t típ u s h o z ta rto z ó v á l t o z ó k a t s o r o lja f e l. H e ly fo g la lá s t i p u s d e f i n i c i ó n á l n in c s, csak d ek la r á c ió e s e té n van. A tip u s d e f in íc ió és a v á lto z ó d e k la r á c ió nem szükségszerűen k ü lö n ü l e l é le s e n, ö ssze i s o lv ad h at. P l. m ost d e f i n i á l t típ u s h o z i s d e k la rá lh a tu n k v á l t o z ó t a C -n y e lv - ben. T erm inológiai z a v a r t okoz, hogy néhány n y e lv a tip u s d e f i n i á l á s t i s d e k la rá c ió n a k mondja. Mig az egyszerű b e é p í t e t t és eg y sz e rű d e f i n i á l t típ u s o k öná l l ó típ u s o k, mert a t i p u s önmagában m egszabja az é r t é k k é s z l e t e t, addig a szármáz t a t о 11 tip u s v alam ily en a la p típ u s r a v o n a t k o z ta tv a d e f i n i á l egy uj t í p u s t. P l. su b ra n g e, s e t, p o i n t e r. Az a la p típ u s á lta lá b a n már d e f i n i á l t ti p u s k e l l hogy legyen. Az ö s s z e t e t t a d a t t í p u s egyszerűbb a d a ttíp u so k b ó l a d o t t s z a bályok s z e r i n t ö s s z e á l l í t o t t a d a tso k a sá g, am elyre eg y ség k én t i s le h e t h iv a tk o z n i, de l e h e t a r é s z e i r e k ü lö n -k ü lö n is.
28 ö nálló ö s s z e t e t t a d a t t í p u s a tömb és a f i l e, ezek azonos tip u s u elem ekből á lln a k, a re k o rd pedig különböző tip u s u adatok egységbe f o g l a l á s a. S z á rm a z ta to tt ö s s z e t e t t a d a ttíp u s a b i t s, ami a rra y of b o o lean [1 :W] (W a szóhossz) és a s tr in g [ n ], ami a rra y of c h a r a c te r [ 1 :п ]. E lte k in tv e a t t ó l, hogy a k o ra i á l t a l á n o s r e n d e lte té s ű p rogram ozási n y e lv ek tip u s a i ( i n t e g e r, r e a l, b o o lean ) nem alkalm asak re n d sze rp ro g ram o z á si fogalm ak le ír á s á r a, a t i p u s, a tip u s függő o p eráto ro k és a tip u s e l l e n ő r z é s erősen k o rlá to z z á k a programozó sz a b a d sá g á t. M eg g áto lják, hogy egy ad ath o z tö b b félek ép p en i s h o z z á fé rje n, ami pedig re n d sze rp ro g ram o z á sn á l nagyon k ív án a t o s. Éppen e z é r t a k o rai re n d sz e rp ro g ra m o z á si nyelvek (BLISS, BCPL) e l is v e t i k a tip u s fo g a lm á t. Minden a d a t eg y szerű en egy b itm in ta, csupán a cim és t a r t a l m a k ö z ö tt te sz n e k k ü lö n b sé g e t, de a z t is a program ozónak k e l l kézben t a r t a n i a. Minden a d a tt a l minden m ű v e le te t le h e t v é g e z n i, az o p e rá to ro k nem tip u s fü g g ő e k, a programozónak k e l l tu d n i, hogy melyik a d a t m icsoda. Az ily e n program ozás azonban ren g e teg h ib á z á s i le h e tő s é g e t r e j t magában. E z é r t a későbbi ren d sze rp ro g ram o z á si nyelvek f e l ú j í t j á k a tip u s fo g a lm á t, a k o r a i nyelvek t i p u s a i t k i e g é s z í t i k a re n d s z e rp ro g ramozáshoz j ó l i l l ő típ u s o k k a l, p l. r e f e r e n c i a, k a r a k te r, s t r i n g - g e l és a h a lm a zsze rü tip u so k k ü lö n fé le v á l f a j a i v a l, enum eráció, p o w erset, su b ran g e stb. L e h e tő sé g n y ilik a programozó számára uj tip u s d e f i n i á l á s á r a, s ő t a r r a, hogy u g y an azt az a d a to t k ü lö n böző s z itu á c ió k b a n különböző tip u s u k é n t h a s z n á lja te rm é sz e tese n szig o rú an e l l e n ő r z ö t t f e l t é t e l e k m e lle tt (union t i p u s ). A tip u so k lé te z é s e f e l v e t i a konverzió k é r d é s é t. Bizonyos s z itu á c ió k b a n c é ls z e r ű az au to m atik u s k o n v e rz ió, p é ld á u l i n t e g e r s z é l e s í t é s e r e a l - l é. Más s z itu á c ió k b a n jó, ha a program ozónak k e l l k é rn ie a tra n s z f o rm á c ió t egyik tip u s b ó l a m ásikba p l. k e r e k ité s vagy c s o n k ítá s. E r re á lta lá b a n s ta n d a rd függvények á lln a k re n d e lk e z é s re. A n y e lv ek k o e r c ió, k é n y s z e r ité s szempontjá b ó l k é t nagy t á b o r r a o s z th a tó k. A k o e rc á ló nyelvek élükön az ALGOL 68-al az au tom atikus k o e r c i ó t r é s z e s í t i k e lő n y b en, és ponto s a n k id o lg o z tá k annak a k e z e l é s é t, hogy m ilyen szövegkörnye-