F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper
F. Drewes, Inst. f. datavetenskap2 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 av 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
F. Drewes, Inst. f. datavetenskap3 Bindningar Bindningar knyter attribut till variabler eller andra företeelser i ett program(språk) Bindningar sker vid olika bindningstider, t.ex. under språkutvecklingen språkimplementeringen programkompileringen programexekveringen statisk bindning dynamisk bindning
F. Drewes, Inst. f. datavetenskap4 Typbindning De huvudsakliga valmöjligheterna: typinferens explicit deklarationimplicit deklaration dynamisk typbindning (ytterst flexibel) statisk typbindning (ökad säkerhet genom statisk typkontroll)
F. Drewes, Inst. f. datavetenskap5 Minnesbindning (”storage binding”) Minnesbindning sker genom allokering och avallokering. Tiden mellan dessa kallas för variablens livstid. statisk (snabb, livstid oberoende av räckvidden historik- känsliga variabler) stackdynamisk (allokeras från stacken när deklarationen nås, sparar minne, tillåter rekursion) explicit heap-dynamisk (allokeras från högen via en explicit operator, t.ex. ”new”) implicit heap-dynamisk (automatisk allokering vid värdetilldelningen, ytterst flexibel men känslig mot fel)
F. Drewes, Inst. f. datavetenskap6 Typisering 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 typiserat om inget uttryck som innehåller typfel kan exekveras utan att felet upptäcks Om typkontroll används är typkompatibilitet en central fråga. De två extremen: namnkompatibilitet – typ A är endast kompatibel med typ A strukturell kompatibilitet – typ A är kompatibel med typ B om de har samma struktur båda medför problem programmeraren bör få valmöjligheter mögligheten att kunna definiera subtyper är nyttig
F. Drewes, Inst. f. datavetenskap7 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,…,a k ) i den cartesiska produkten T 1 … T k av datatyper T 1,…,T k. 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,…,a k som är sparade i en post refereras till genom namn istället för index ( ökad läsbarhet)
F. Drewes, Inst. f. datavetenskap8 Pekare och referenstyper En pekares värde är adressen av en variabel. Variablen 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 */
F. Drewes, Inst. f. datavetenskap9 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