Presentation laddar. Vänta.

Presentation laddar. Vänta.

Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn.

Liknande presentationer


En presentation över ämnet: "Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn."— Presentationens avskrift:

1 Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn –Adress –Värde –Typ –Livslängd –Räckvidd (scope)

2 Anders Broberg, Programspråksteoridelen DVA Moment 2 2 Bindning Def: En bindnig är en association, såsom mellan ett attribut och en enhet, eller mellan en operation och en symbol Def: Bindningstid är den tid (tillfälle) som bindning sker Exempel på bindningstider –Språkdesign »En operator binds till en symbol –Språkimplementation »Binder typer till en representation –Kompileringstid »Binder en variabel till en typ i C och Java –Tid för laddning »Binder minnesceller till static variabler i C och variabler i FORTAN 77 –Exekveringen »Bindning av icke statiska variabler till minnesceller

3 Anders Broberg, Programspråksteoridelen DVA Moment 2 3 Statisk vs. Dynamisk bindning Def: en bindning är statisk om det inträffar för exekvering och bibehålls oförändrad genom hela exekveringen Def: En bindning är dynamisk om den sker under exekveringen eller förändras under exekveringen av programmet

4 Anders Broberg, Programspråksteoridelen DVA Moment 2 4 Typ-bindningar Innan en variabel kan refereras i ett program måste den bindas till en datatyp –Hur är typen specificerad? –När sker bindningen? Vid statisk bindning av typer till variabel –Explicit deklaration via en sats i programmet »int x; i C –Implicit deklaration är en ”default” mekanism för att specifiera typer på variabler »I FORTRAN 77 och tidigare så används första bokstaven i namnet som en sådan mekanism (i,j,k,l,m,n) är heltalsnamn

5 Anders Broberg, Programspråksteoridelen DVA Moment 2 5 Dynamisk typ-bindning Högersidan bestämmer typen på variabeln –A = 5 integer –A = 4.4 float –LIST <- 2 3 5 6 lista –LIST <- 17 heltal Finns i APL Fördel –Flexibilitet, man kan tex. Vid inläsning av data => dynamisk typ-bindning att all typer kan godtas utan test Nackdel –Tillförlitligheten påverkas negativt då färre fel kan upptäckas före exekvering

6 Anders Broberg, Programspråksteoridelen DVA Moment 2 6 Mer om bindning Typinferens –Används i ML, Miranda, Haskell »Typerna härleds utifrån kontexten som referensen sker »Det måste framgå i kontexten vad som menas implicit eller explicit Minnesbindning –När binds minnesadressen till variabeln »Allokering - att ta en cell från en pol av lediga celler´ »Deallokering - att lämna tillbaka celler till polen av lediga celler Explicit som i C, C++, Skräphantering så som i Java, ML En variabels livstid är tiden som den är bunden till en speciell minnescell

7 Anders Broberg, Programspråksteoridelen DVA Moment 2 7 Kategorier av variabler pga. Livstid Statisk Stackdynamisk Explicit ”heap”-dynamisk Implicit ”heap”-dynamisk

8 Anders Broberg, Programspråksteoridelen DVA Moment 2 8 Variabler med statisk minnesbindning Bindning till en minnescell före exekvering och behåller den under hela exekveringen –static variabler i C och alla variabler i FORTRAN 77 –Effektivt »(direktadressering är möjlig) »Ingen ”runtime overhead” pga. allokering och deallokering –Tillåter inte rekursion –Historiekänsliga underprogram –Inte så flexibelt

9 Anders Broberg, Programspråksteoridelen DVA Moment 2 9 Stackdynamisk Bindning till en minnescell för variabler skapas när variabeldeklarationer analyseras under exekvering –Om det är skalärer så binds alla attribut förutom adressen statiskt –Lokala variabler i Pascal och C i underprogram Detta tillåter rekursion Kostsam hantering av allokering och avallokering Inte historiekänsliga underprogram Ineffektiv referensmekanism (indirekt adressering)

10 Anders Broberg, Programspråksteoridelen DVA Moment 2 10 Explicit ”heap”-dynamisk Heap --högen är en samling med minnesceller som inte är så organiserade eftersom dess användning inte är förutsägbar Explicit allokering deallokering av celler från heapen Specificerad av programmeraren Bindnigen sker under exekveringen Namnlösa variabler Stödjer dynamisk minneshantering Ineffektiv och osäker stor risk för svåra fel/bugar

11 Anders Broberg, Programspråksteoridelen DVA Moment 2 11 Implicit ”heap”-dynamisk Allokering och deallokering sker genom tilldelning av satser Alla variabler i APL Väldigt flexibelt Mycket overhead, alla attribut är dynamiska Nästan omöjligt att upptäcka fel

12 Anders Broberg, Programspråksteoridelen DVA Moment 2 12 Typkontroll Måste generalisera begreppen operander och operatorer till att inkludera underprogram och tilldelningar Def: Typkontroll är en aktivitet som försäkrar att operander för en operator är av kompatibla typer Def: En kompatibel typ är en som är en legal för operatorn eller tillåts att under språkregler konverteras implicit, av kompilatorgenererad kod till en legal typ. Denna automatiska konvertering kallas för coercion Ett typfel är en applicering av en operator på en operand av felaktig typ Om all typbindning är statisk, kan nästan all typkontroll ske under kompilering (statiskt) Om typbindningen är dynamisk, måste typkontrollen ske dynamisk under exekveringen

13 Anders Broberg, Programspråksteoridelen DVA Moment 2 13 Starkt typade språk Ett språk är starkt typat om typfel alltid upptäcks Man upptäckter missanvändning av variabler som leder till typfel -> ökad tillförlitlighet FORTRAN 77 är inte starkt typat, –EQUIVALENCE Pascal är inte starkt typat –Variant records C och C++ är inte heller starkt typat –Unioner, typkontroll av parametrar kan undvikas Ada och Java är nästan starkt typade språk

14 Anders Broberg, Programspråksteoridelen DVA Moment 2 14 Dynamisk typbindning Ger mycket flexibilitet Till en kostnad för effektivitet och tillförlitligheten –Senarelagd felupptäckt

15 Anders Broberg, Programspråksteoridelen DVA Moment 2 15 Typkompabilitet Används vid typkontroll –Dvs inget typfel om operanderna inte är typkompatibla Två typer av typkompabiliet –Namnekvivalens »Två variabler har kompatibla typer om de är i samma deklaration eller använder samma typnamn »Lätt att implementera »Väldigt restriktivt angreppssätt »Delmängder av heltal (arrayindex) är inte kompatibla med heltal »Formella parametrar måste vara av samma typ som deras motsvarande aktuella parametrar (Pascal) –Strukturekvivalens »Två variabler är typkompatibla om de har identisk struktur »Svårare att implementera »Flexiblare

16 Anders Broberg, Programspråksteoridelen DVA Moment 2 16 Strukturekvivalens??? Cirkeldefinierade?? Två struct/record som bara skiljer i fältnamn?? Två arrayer som är lika stora men indexeras inom olika delområden av heltal Är två uppräkningstyper kompatibla om deras komponenter stavas olika Man kan inte skilja mellan typer av samma struktur

17 Anders Broberg, Programspråksteoridelen DVA Moment 2 17 Typkompabilitet i olika språk Pascal -vanligtvis struktur, men i några fall namnekvivalens (formella parametrar) C - strukurekvivalens, med undantag för records Ada - restriktiv form av namn –Härledda typer tillåter typer med samma struktur att vara skilja sig åt –Anonyma type är alla unika även i A,B: array (1..10) of INTEGER

18 Anders Broberg, Programspråksteoridelen DVA Moment 2 18 Scope (synlighet/räckvidd) Scope/räckvidd för en variabel är inom det område den är synlig (där det går att referera den) Icke lokala variabler(globala) i en programdel är de variabler som är synbara där men inte är deklarerade där Räckviddsregler för ett språk bestämmer hur referenser till namn är associerade till variabler Statisk räckvidd och dynamisk räckvidd

19 Anders Broberg, Programspråksteoridelen DVA Moment 2 19 Statisk räckvidd Baseras på programtexten Att koppla en namnreferens till en variabel så måste du (eller kompilatorn) hitta deklarationen av den Sökprocessen –Först lokalt –Sedan utöka räckvidden successivt tills man hittar en deklaration med det sökta namnet –Omslutande statiskt räcviddsområde kallas för statiska förfäder(static ancester) –Den närmsta förfader kallas för statisk förälder (static parent) Dölja variabler –Variabler med samma namn som ligger närmare en enhet döljer ”äldre” variabler –C++ och Ada tillåter access till dessa gömda variabler Block - en metod för att skapa statisk räckvidd inom en program enhet -- från Algol 60

20 Anders Broberg, Programspråksteoridelen DVA Moment 2 20 Evaluering av statisk räckvidd MAIN A C D B E

21 Anders Broberg, Programspråksteoridelen DVA Moment 2 21 Dynamsik räckvidd Baseras på anropssekvensen i programmet och inte dess textuella layout Man söker tillbaka genom anropande underprogram tills man hittar en deklaration av en variabel main var x interger; Sub1 var x integer; … call sub2 end sub1 sub2 … x = y*x+15; end sub2 call sub1 end main

22 Anders Broberg, Programspråksteoridelen DVA Moment 2 22 Utvärdering av dynamsik räckvidd (Scoping) Den främsta fördelen är bekvämlighet för programmeraren Den största nackdelen är att det blir svårare att läsa programmet dvs. läsbarheten påverkas negativt Samma användning av en variabel i ett subprogram kan referera till olika icke lokala variabler vid olika anrop av subprogram Räckvidd (scope) och livslängd (lifetime) är två begrepp som är nära relaterade, men de är två olika begrepp –Statisk räckvidd är ett spatialt begrepp meddans livslängd är ett temporalt begrepp

23 Anders Broberg, Programspråksteoridelen DVA Moment 2 23 Referensomgivning för en sats Den samling av namn som är synliga i satsen kallas för referensomgivning Statisk räckvidd –Alla lokala variabler plus alla variabler som är synliga i alla omslutande ”räckvidder” Dynamisk räckvidd –Alla lokala variabler plus alla synliga variabler i alla aktiva underprogram

24 Anders Broberg, Programspråksteoridelen DVA Moment 2 24 Namngivna konstanter En variabel som binds tills sitt värde bara när det binds till minnesadressen –För att öka läsbarheten och det gör det lättare att modifiera i koden man behöver bara ändra på ett ställe där konstanten deklareras Pascal tillåter bara tecken inga uttryck; –CONST PI = 3.1415 Modula-2 och FORTRAN 90 : tillåter konstantvärdes uttryck Ada, C++ och Java: tillåter att definiera konstanter med vilka uttryck som helst Både statiska bindning av konstanter manifestade

25 Anders Broberg, Programspråksteoridelen DVA Moment 2 25 Variabelinitiering Binda ett värde till en variabel vid samma tillfälle som variabel är binds till minnet kallas för initiering Detta sker oftast i variabeldeklarationen –Ada »Sum:FLOAT := 0.0; –C » int antal= 0;

26 Anders Broberg, Programspråksteoridelen DVA Moment 2 26 Datatyper FORTRAN 1 (1956) - hade INTEGER, REAL, arrays Ada (1983) - Gav programmeraren möjlighet att skapa unika typer för varje kategori av variabel –Närmar oss abstrakta datatyper En deskriptor är en samling av attribut till en variabel (namn, typ,adress,..) –Om alla attributen är statiska behövs deskriptorn bara vid kompileringen annars så behövs hela eller delar av den under exekveringen. Designfrågor för alla datatyper –Hur skall man referera till variabler (syntaxen)? »X=3.14; »X:= 3.14; »Y = x+3; –Vilka operationer är definierade för och hur är de specificerade?

27 Anders Broberg, Programspråksteoridelen DVA Moment 2 27 Primitiva datatyper Sådana datatyper som inte kan definieras i termer av andra datatyper (enkla datatyper), heltal, flyttal, sanningsvärden Heltal (integer) –Nästan alltid en exakt avbildning av hårdvaran så avbildningen är nästan trivial »0001 0001 17 »0000 0000 0 Decimal (special flytal) –Används i ”busiess applications (COBOL?) »Lagrar ett fixt antal decimaler Bättre noggrannhet Begränsat omfång minnesslöseri

28 Anders Broberg, Programspråksteoridelen DVA Moment 2 28 Mer primitiva datatyper Flyttal –Modellerar reella tal, men är endast en aproximation –Språk för vetenskapliga beräkning brukar åtminstone ha två flyttalstyper ibland fler –Vanligtvis lika som hårdvaran men inte alltid en del språk så som Ada tillåter noggrannhets spec. i koden. »Type SPEED is digits 7 range 0.0..1000.0; »Type voltage is delta 0.1 range 12.0..34.5; –Implementationsmässigt så delas ett flyttal upp i en decimaldel och en exponentdel »Decimaldelen styr noggrannhet »Exponentdelen styr storleken Boolean -sanningsvärden –sant eller falskt, o eller 1 –Kan implementeras som bitas, men oftast används en hel byte –Ökar läsbarheten i koden om true/false finns »Jämför med C där 0 är falskt och allt annat är sant i ett ”sanningsuttryck”


Ladda ner ppt "Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn."

Liknande presentationer


Google-annonser