Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Like dokumenter
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Dagens tema: Kjøresystemer II

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

Runtime-omgivelser Kap 7 - II

Runtimesystemer Kap 7 - I

Runtime-omgivelser Kap 7 - I

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Runtimesystemer Kap 7 - I

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Fiktiv eksamensbesvarelse IN 211 høsten 2001

Anatomien til en kompilator - I

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Anatomien til en kompilator - I

Semantisk Analyse del III

2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

UNIVERSITETET I OSLO

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Diverse eksamensgaver

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

2 Om statiske variable/konstanter og statiske metoder.

Løsningsforslag til eksamen i IN 211 høsten 2002

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Hjemmeeksamen 2 i INF3110/4110

IN 147 Program og maskinvare

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Skal bindes opp til en deklarasjon av samme navn

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Skal bindes opp til en deklarasjon av samme navn

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Programmeringsspråket C Del 3

Generiske mekanismer i statisk typede programmeringsspråk

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

UNIVERSITETET I OSLO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

UNIVERSITETET I OSLO

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Forelesning inf Java 5

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

Forelesning inf Java 5

INF1000: Forelesning 4. Mer om arrayer Metoder

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

MED SVARFORSLAG UNIVERSITETET I OSLO

Løsningsforslag til eksamen i IN 211 høsten 2001

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

IN 147 Program og maskinvare

Del 4 Noen spesielle C-elementer

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Obligatorisk Innlevering 2

Velkommen til INF2100 Jeg er Dag Langmyhr

INF Noen oppgaver til kap. 8

Kap. 8 del 1 kodegenerering INF5110 Vår2007

Objekter og referanser

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Del 3. Pekere RR 2016

6108 Programmering i Java. Leksjon 5. Tabeller. Roy M. Istad 2015

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Kapittel 1 En oversikt over C-språket

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Litt om Javas class-filer og byte-kode

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Vektorer. Dagens tema. Deklarasjon. Bruk

Dagens tema: 12 gode råd for en kompilatorskriver

INF1000: noen avsluttende ord

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

INF2810: Funksjonell Programmering

Transkript:

Dagens tema Kjøresystemer (Ghezzi&Jazayeri.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive metoder (C1 og C) Minnebehovet vil her være statisk kjent, og kompilatoren kan gi hver variabel en fast plass i minnet. Vi lar hver metode få sin egen aktiveringsblokk med plass til lokale variable. Vi trenger også plass til returadressen. Separat kompilering (C ) Under kompilering kan en variabel nå ikke tilordnes til en bestemt lokasjon. Vi må istedenfor beregne variablens offset i forhold til starten på den aktuelle aktiveringsblokken. Linkeren vil så samle all informasjonen og tilordne absolutte adresser. Forelesning 11 5.11.003 Forelesning 11 5.11.003 /5 Repetisjon: Statiske språk uten rekursive metoder (C1 og C) Minnebehovet vil her være statisk kjent, og kompilatoren kan gi hver variabel en fast plass i minnet. Vi lar hver metode få sin egen aktiveringsblokk med plass til lokale variable. Vi trenger også plass til returadressen. Separat kompilering (C ) Under kompilering kan en variabel nå ikke tilordnes til en bestemt lokasjon. Vi må istedenfor beregne variablens offset i forhold til starten på den aktuelle aktiveringsblokken. Linkeren vil så samle all informasjonen og tilordne absolutte adresser. Repetisjon: Rekursive metoder (C3) For hver metode trenger vi like mange aktiveringsblokker som antall rekursive kall. Minnebehovet er dermed ikke lenger statisk kjent. Vi organiserer derfor minnet som en stakk av aktiveringsblokker. Vi trenger da to systemvariable : current, en peker til gjeldende aktiveringsblokk (ligger i D[0]). free, en peker til første ledige plass på stakken (ligger i D[1]). Forelesning 11 5.11.003 /5 Forelesning 11 5.11.003 3/5

Repetisjon: Rekursive metoder (C3) I tillegg har hver aktiveringsblokk en peker, dynamisk link (), tilbake til forrige aktiveringsblokk: < returadresse (RP) > < dynamisk link () > < lokale variable > Returverdier Vi lar en eventuell returverdi ligge mellom de to aktiveringsblokkene til kalleren og den som blir kalt. Metodekall Følgende må gjøres av kalleren: 1. Sette av plass til returverdien.. Lagre returpekeren. 3. Sette den nye blokkens dynamiske link til gjeldende aktiveringsblokk. 4. Sette current til å peke på den nye aktiveringsblokken. 5. Sette free til å peke på neste ledige plass. 6. Sette ip til å være første instruksjon i metoden som kalles. Forelesning 11 5.11.003 4/5 Forelesning 11 5.11.003 5/5 Metoderetur Følgende må gjøres av metoden som returnerer: 1. Slette aktiv aktiveringsblokk.. La forrige aktiveringsblokk bli aktiv. 3. Hoppe tilbake til kallstedet. C4: Språk med blokker To varianter: C4 : Tillater lokale variable i en sammensatt setning. C4 : Alle deklarasjoner (også av metoder) kan plasseres inne i lokale blokker. Hvorfor blokkstruktur? Kontrollere skopet til variable. Definere variables levetid. Dele programmet i hensiktsmessige biter. Forelesning 11 5.11.003 6/5 Forelesning 11 5.11.003 7/5

C4 : Indre lokale deklarasjoner Her kan vi ha lokale variable i en sammensatt setning: 1 void f() // Blokk 1 { 3 int a, b; 4 5 : 6 if (a < b) { // Blokk 7 int temp = a; 8 a = b; b = temp; 9 } // Slutt blokk 10 : 11 while (a > b) { // Blokk 3 1 int x, y; 13 : 14 if (...) { // Blokk 4 15 int z; 16 : 17 } // Slutt blokk 4 18 } // Slutt blokk 3 19 } // Slutt blokk 1 For å få oversikt over selve blokkstrukturen kan vi lage et static nesting tree : Blokk Blokk 1 Blokk 3 Blokk 4 Implementasjon Dette krever minimale utvidelser i forhold til C3. To måter å gjøre det på: Statisk sette av plass til alle variable i aktiveringsblokken til den omsluttende prosedyren. (Figur på tavla.) Dynamisk tildeling av minne når man går inn i ny blokk. Forelesning 11 5.11.003 8/5 Forelesning 11 5.11.003 9/5 C4 : Metoder inni metoder Alle deklarasjoner (også av metoder) kan plasseres inne i lokale blokker. Eksempel (Hvilke metoder kan kalles hvor?) 1 void f1() { 3 () 4 { 5 f3() 6 { 7 } 8 } 9 } 10 11 void main() 1 { 13 } Anta at vi har en kallsekvens som gir opphav til følgende run-time stakk: main f1 f3 current Hvilke variable skal dette siste kallet på kunne få tak i? Hvordan kan finne frem til disse variablene? Forelesning 11 5.11.003 10/5 Forelesning 11 5.11.003 11/5

Statisk link Hver aktiveringsblokk må også inneholde en peker, statisk link (SL), til aktiveringsblokken for omkringliggende blokk: < returadresse (RP) > < dynamisk link () > < statisk link (SL) > < lokale variable > I SIMPLESEM finner vi verdien til en variabel angitt ved avstand, offset ved å følge statisk link avstand ganger og legge til offset. Verdien til en variabel kan da skrives D[ fp(avstand) + offset], der fp-funksjonen (for frame pointer ) er definert ved: fp(d)==if d = 0 then D[0] else D[ fp(d 1)+] En variabel vil alltid kunne nås i en bestemt avstand fra den aktuelle blokken: Hvordan sette statisk link? En lokal variabel har avstand = 0. Variabel deklarert i direkte omsluttende blokk: avstand = 1.... Hver referanse til en variabel gjøres om til et par: avstand, offset under kompileringen. Forelesning 11 5.11.003 1/5 Forelesning 11 5.11.003 13/5 Kontekstvektor For å spare tid, har noen systemer en kontekstvektor som peker til de aktiveringsblokkene som for tiden er synlige: main f1 f3 0 Fordeler og ulemper + Variabelaksessen blir raskere. current KV 1 3 Dynamisk allokering Størrelsen kjent ved aktivering Eksempel: 1 begin integer n; 3 n := inint; 4 begin 5 integer array dynarray(1:n); 6... 7 end; 8 end Størrelsen på aktiveringsblokken er først kjent ved aktivering. Det blir mer jobb ved hvert metodekall og -retur. Forelesning 11 5.11.003 14/5 Forelesning 11 5.11.003 15/5

Dynamisk allokering Abstrakt implementasjon: Ved kompilering: Hver dynamisk array får en deskriptor med plass til peker til starten av arrayen, samt nedre og øvre grenser. All array-aksessering oversettes til å gå via denne deskriptoren. Under kjøring: Ved evaluering av en dynamisk array-deklarasjon: øk aktiveringsblokken med nødvendig plass, og oppdater verdiene i deskriptoren. Full dynamisk allokering 1 struct node { int info; 3 node* left; 4 node* right; 5 }; 6... 7 node* n = new node; Problem: Levetiden til et objekt er generelt ikke avhengig av blokken hvor objektet opprettes! Løsning: Vi setter av et eget område i lageret til denne typen data. Dette området kalles en heap. D: stakk heap Forelesning 11 5.11.003 16/5 Forelesning 11 5.11.003 17/5 Vi skal se på følgende eksempel: Parameteroverføring Hvordan overføres parametre? Hva slags mekanismer finnes det? Hvordan kan disse implementeres? 1 int a = 1; 3 void f(int x) 4 { 5 x = x+1; 6 } 7 8 void main() 9 { 10 f(a); 11 } 0 1 SIMPLESEM: D < current > < free > < a > 0 1 3 f: < RP > < > < SL > < x > Forelesning 11 5.11.003 18/5 Forelesning 11 5.11.003 19/5

Referanseparametre Her sendes det over en referanse til hvilken lagercelle parameteren ligger i. (Call by reference.) Overføring av aktuell parameter a ved metodekall: set D[1]+3, Bruk av formell parameter x inne i f: set D[D[0]+3], D[D[D[0]+3]] + 1 Verdiparametre Her sender man med en kopi av parameteren. (Call by value.) (Det betyr at hvis den endres i metoden, vil den aktuelle parameteren forbli uendret.) Overføring av a: set D[1]+3, D[] Bruk av x: set D[0]+3, D[D[0]+3] + 1 Forelesning 11 5.11.003 0/5 Forelesning 11 5.11.003 1/5 Resultatparametre Dette er det «motsatte» av verdiparametre: Den lokale kopien i metoden kopieres over til den aktuelle parameteren når metoden returnerer. (Call by result.) Overføring av aktuell parameter a etter metoderetur: set, D[D[1]+3] Bruk av formell parameter x inne i f: set D[0]+3, D[D[0]+3] + 1 Verdi-resultatparametre Dette er en kombinasjon av de to foregående, og effekten er nesten den samme som referanseparametre. (Se boken for moteksempler.) Navneparametre «Selve uttrykket» sendes over og beregnes på nytt hver gang det brukes. Tekstlig substitusjon. (Call by name.) 1 PROCEDURE bytt(x,y) BEGIN 3 INTEGER temp = x; 4 x:=y; 5 y:=temp; 6 END Se på kallet bytt(i, a[i]). Hvis parametrene overføres ved name kan kallet forstås slik: 1 PROCEDURE bytt(x,y) BEGIN 3 INTEGER temp = i; 4 i := a[i]; 5 a[i] := temp; 6 END som ikke helt er det samme som å bytte om to tall! Forelesning 11 5.11.003 /5 Forelesning 11 5.11.003 3/5

Aliasing To variable (uttrykt i samme programenhet) kalles aliaser hvis deres verdier ligger på samme sted i lageret. Aliasing kan oppstå ved bruk av pekere: p1:- new C(...); p:-p1; referanseoverføring: 1 void p(x,y) { x=1; 3 y=; 4 } 5 p(v,v); Aliasing navneoverføring: (se forrige foil) ikke-lokale variable: 1 int v; void p(x) { 3 x=4; 4 v++; 5 } 6 p(v); Verdiparametre kan ikke gi opphav til alias. Forelesning 11 5.11.003 4/5 Forelesning 11 5.11.003 5/5