Frelsning 2 Variabler och datatyper Variabler Bindning Typkontroll
Föreläsning 2: Variabler och datatyper • • Variabler Bindning Typkontroll Några viktiga datatyper 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1
Variabler (i imperativa språk) En variabel i ett imperativt språk är en abstraktion över ett antal minnesceller som bildar en logisk enhet. Viktiga attribut hos variabler • namn eller identifierare • värde – minnescellernas innehåll • typ – bestämmer möjliga värden och operationer • adress – anger var i minnet cellerna ligger Två namn på samma adress kallas alias 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 2
Bindningar knyter attribut till variabler eller andra företeelser i ett program(språk) Bindningar sker vid olika bindningstider, t. ex. under • språkutvecklingen statisk bindning • språkimplementeringen • programkompileringen dynamisk bindning • programexekveringen 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 3
Typbindning De huvudsakliga valmöjligheterna: explicit deklaration implicit deklaration typinferens 2003 -10 -30 statisk typbindning dynamisk typbindning (ökad säkerhet genom statisk typkontroll) (ytterst flexibel) Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 4
Minnesbindning (”storage binding”) Minnesbindning sker genom allokering och avallokering. Tiden mellan dessa kallas för variabelns livslängd. statisk stackdynamisk (snabb, livslängd ober. av räckvidden historiekänsliga variabler) (allokeras från stacken när deklarationen nås, sparar minne, tillåter rekursion) explicit heap-dynamisk implicit heap-dynamisk (allokeras från högen via en explicit operator, t. ex. ”new”). Dynamiska datastrukturer (automatisk allokering vid värdetilldelningen, ytterst flexibel men känslig mot fel) 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 5
Typning och typkontroll • Statisk typkontroll är att föredra framför dynamisk (effektivitet, fel upptäcks inte först när det är för sent) • Språket är starkt typat om alla typfel upptäcks innan exekvering (statiskt (oftast) eller dynamiskt) • Om typkontroll används är typkompatibilitet en central fråga. De två extremfallen: Ø namnkompatibilitet – typ A är endast kompatibel med typ A Ø strukturell kompatibilitet – typ A är kompatibel med typ B om de har samma struktur. Svårare att implementera • båda medför problem Ø programmeraren bör få valmöjligheter Ø möjligheten att kunna definiera subtyper är nyttig 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 6
Fält (”array”) och post (”record”) Ett fält motsvarar en matematisk funktion A: I V som avbildar en ändlig indexmängd I på en mängd V av värden. En post motsvarar ett element (a 1, …, ak) i den cartesiska produkten T 1 … Tk av datatyper T 1, …, Tk. • I samband med fält används syntaxen A[i] istället för A(i) för att inte förväxla det med anrop • Värdena a 1, …, ak som är sparade i en post refereras till genom namn istället för index ( ökad läsbarhet) 2002 -11 -05 7
Pekare och referenstyper En pekares värde är adressen till en variabel. Variabeln i sig är ofta anonym, dvs har inget namn. • Indirekt adressering och dynamisk allokering av variabler • Skapa dynamiska datastrukturer (t. ex. träd, lista, tabell) • Operationer: (av)allokering, dereferensering, tilldelning var p, q: pointer to integer; new(p); /* allokering */ *p : = 42; /* dereferensering */ q : = p; /* tilldelning */ dispose(p); /* avallokering */ 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 8
Pekare och referenstyper Pekare är nyttiga men något farliga Ø avallokering kan skapa ”dangling pointers” Ø förlorade heap-dynamiska variabler (”garbage”) minnesläckage (”memory leakage”) Ø ibland för flexibel (pekare till vanliga variabler, aritmetiska operationer tillåtna) Bot: referenstyper och automatisk återvinning Ø referenser pekar till specifika typer, inga aritmetiska operationer tillåtna, implicit dereferensering Ø automatisk återvinning förhindrar dangling pointers och minnesläckage Ø Återvinning kan implementeras via referensräknare eller sophämtning 2003 -10 -30 Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 9
- Slides: 9