IN 211 programmeringsspråk H 99

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

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

Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

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

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

Skal bindes opp til en deklarasjon av samme navn

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Semantisk Analyse del III

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

Anatomien til en kompilator - I

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

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

Generiske mekanismer i statisk typede programmeringsspråk

Runtimesystemer Kap 7 - I

UNIVERSITETET I OSLO

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

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

Anatomien til en kompilator - I

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

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

Runtime-omgivelser Kap 7 - I

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

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

UNIVERSITETET I OSLO

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Skal bindes opp til en deklarasjon av samme navn

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

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

Litt om Javas class-filer og byte-kode

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Velkommen til INF2100

IN 147 Program og maskinvare

Datatyper og typesjekking

Diverse eksamensgaver

Dagens tema: Kjøresystemer II

ML (kap 5 og 6) INF3110/4110. Variable i ML. Nye datatyper. Currying. Avanserte listeoperatorer. Typeanalyse

Forelesning inf Java 1

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

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

Velkommen til INF5110 Kompilatorteknikk

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

En snarvei til INF2100

Datatyper og typesjekking

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

Datatyper og typesjekking

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

2 Om statiske variable/konstanter og statiske metoder.

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

Datatyper og typesjekking

Dagens tema: 12 gode råd for en kompilatorskriver

Dagens tema: Sjekking

Plan: Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk. Innføring i ML. typer enkle funksjoner (Fortsetter med ML i to uker til)

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

Velkommen til INF2100 Jeg er Dag Langmyhr

Semantisk Analyse del I

Om Simula 67. Ekstraforelesning for IN105, 26/ Ole-Johan Dahl

IN1010 Objektorientert programmering Våren 2019

Runtimesystemer Kap 7 - I

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

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

Obligatorisk Innlevering 2

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Feilmeldinger, brukerinput og kontrollflyt

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Post-it spørsmål fra timen (Arv og subklasser)

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

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

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF1000: Forelesning 7. Konstruktører Static

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Velkommen til INF Kompilatorteknikk

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Hjemmeeksamen 2 i INF3110/4110

Velkommen til. INF våren 2016

INF1000: Forelesning 7

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

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

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

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

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

INF1000: noen avsluttende ord

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

Transkript:

IN 211 programmeringsspråk H 99 Forelesere: Dag Langmyhr (epost: dag@ifi.uio.no) Olaf Owe (epost: olaf@ifi.uio.no) Gruppelærere: Ragnhild Kobro (epost: ragnhilk) Igor Rafienko (epost: igorr) Sigurd Weisteen Larsen (epost: swl) Hjemmeside: in211/www docs/index.shtml http://www.ifi.uio.no/ in211/ 1

IN211 - kursinformasjon Forelesninger Forelesere Oppgaver Grupper Eksamen Annet Olaf Owe (olaf) Dag Langmyhr (dag) Læremidler og pensum Forelesningsplan Emnebeskrivelse Tid og sted Ukeoppgaver Oblig. oppgave nr 1,2,3 Gruppe nr. 1,2,3,5,6 Obligatorisk frammøte Dato Tidligere års oppgaver Beskjeder Nyhetsgruppe Info. H95,H96,H97,H98 Programvare Generelt Regler og netikette Jobbe hjemmefra via PC Studieadministrasjonen Driftsavdelingen Sist oppdatert 26.08.1999. 2

Læremidler og pensum Carlo Ghezzi og Mehdi Jazayeri: Programming Language Concepts. Tredje utgave. John Wiley & sons, 1998. Bjørn Kristoffersen: Funksjonell programmering i Standard ML. Kompendium nr 61. Stein Krogdahl & Chr.-Emil Ore: Om syntaks og syntaksanalyse. Kompendium nr 47. GENERELT: Syntaks-detaljene i de ulike språkene er ikke viktige. Man skal kunne lese og forstå programmer i utvalgte deler av: JAVA, Perl, ML, samt PROLOG, og dessuten kunne lage program-skisser i disse språkene ved å bruke hovedmekanismene i dem. Man skal vite litt om forskjellen mellom språkene over og SIMULA, FORTRAN, MODULA, ADA, C++, PASCAL, og Algol60. Du vil ikke bli bedt om å programmere i Ape eller Lisp. Andre språk, som Algol68, APL, SNOBOL, Smalltalk, CLU, EUCLID, og PL/1, er ikke pensum. 3

Oversikt Syntaks analyse, regulære uttrykk, mønstergjenkjenning (Perl) 1 vt. Implementasjon av språk (run-time organisering, kompilering). 1 vt. Funksjonell programmering (ML) samt logikk programmering (PROLOG). 1 vt. Tre obligatoriske oppgaver: Programmering i Java, Perl og i ML. 4

Formål Gi oversikt over ulike programmerings-språk og mekanismer i disse, samt å gi forståelse av disse sett fra innsiden. Ulike paradigmer: - objekt-orientering - imperativ programmering - funksjonell programmering - mønstergjenkjenning - logikk programmering 5

Historikk: aktuelle språk språk bygger på ================================= FORTRAN COBOL 1960 APL ALGOL60 algol60 LISP lambda kalkyle SIMULA67 Algol60 + klasser ALGOL68 1970 PASCAL modern. av algol60 PROLOG C SCHEME Lisp, statisk skop MODULA pascal + modulbegrep 1980 ADA pascal + modula + C 1990 C++ ML Perl Java C + klasser Lisp, statisk typing C++, Simula 6

Oversetting vs. To ulike måter å eksekvere programmer på: Interpretering Oversetting Vi snakker om fasene: Oversetting > linking > kjøring Merk at kilde-koden, dvs. programmet, blir oversatt til kode i et annet (gjerne mer lav-nivå og eksekverbart) språk. Interpretering Programmet blir ikke oversatt, men analysert og evaluert direkte 7

Statiske og dynamiske aspekter Statiske egenskaper de som er kjent ved oversetting, eller senest ved linking. Dynamiske egenskaper de som først er kjent ved kjøring. Typiske eksempler navnet på en variabel: statisk verdien på en variabel: dynamisk typen til en variabel: ofte statisk, men dynamisk i noen språk (som LISP) 8

Statiske og dynamiske bindinger Binding mellom entitet og egenskap. Hva er egenskapene til en entitet? Eksempel på entiteter variabel, prosedyre/funksjon/metode/operasjon blokk, type, klasse, prosedyre-instans, objekt Eksempel på egenskaper navn, skop, levetid, verdi, type, klasse Typisk problem: Hvordan bindes en bruks-forekomst av en variabel/prodedyre til den tilsvarende deklarasjon. 9

Skop Skopet til en variabel: den delen av programteksten der den er kjent (har et navn). Tilsvarende kan vi snakke om skopet til andre navngitte enheter, som prosedyrer/funksjoner, typer, klasser, unntak osv.: Skop-reglene sier hvordan en bruksforekomst av et navn x bindes til en bestemt deklarasjon av x. Eksempler på statiske skop-regler Pascal/Ada/ML : Skopet begynner ved deklarasjonsstedet. Simula : Skopet begynner ved begin av den blokken (eller prosedyren) entiteten er deklarert i. Java : Som Simula, for klasse-attributter. Som Pascal, for lokale variable i en setningsliste. I disse språkene vil en redeklarasjon av x skygge for ytre x er. Vi snakker om hull i skopene. Skopet slutter ved slutten av den blokken der x er deklarert. 10

Eksempel: Pascal/Ada/ML SIMULA ytre x ytre y ytre x ytre y BEGIN----------------------------------------------------- VAR x---------------------- VAR y------------------------------ BEGIN ------------------------------------------------- VAR x------------------- PROC P BEGIN----------------------------------------------- VAR y------------------------ END-------------------------------------------------..x..y.. END----------------------------------------------------..x..y.. END------------------------------------------------------- Variabeldeklarasjoner er her markert med VAR. Merk: I alle tilfellene er det snakk om statiske skop. 11

Gjensidig rekursjon BEGIN PROC P BEGIN IF... THEN CALL P ELSE CALL Q END PROC Q BEGIN CALL P END END Skopet til prosedyrer i Pascal: P er deklarert før Q. Da kan ikke prosedyren Q kalles inne i P (!). Pascals løsning på dette: proc Q(...); FORWARD; -legges inn først i deklarasjonssekvensen. I Simula trengs ingen slik ad-hoc mekanisme! 12

Dynamiske skop-regler Dynamiske språk med lokale variable. To muligheter: En forekomst av x binder til den deklarasjon av x som sist er evaluert. En forekomst av x binder til den deklarasjon av x som sist er evaluert og som ligger i en uavsluttet blokk. Lisp har litt av begge variantene. BEGIN VAR x := 1 PROC P(); BEGIN skriv(x) END BEGIN VAR x := 2 CALL P END CALL P END Statisk resultat: 1og1 Dynamisk resultat: 2 og 1 alternativt: 2 og 2 13

Eksempel: interpretasjon av et dynamisk språk VAR x: Int FUNC f(y:int):int; RETURN x+y; x := 2; skriv(f(5)); PROC P(); BEGIN VAR x:bool; x:= true; skriv(f(5)) END CALL P Resultat: 2+5 true+5 14

Livstid Livstiden til en variabel : den tiden variablen har en verdi (som ligger et sted og tar plass.) Statisk livstid : Kan peke ut det stedet i programteksten der den først får verdi og det stedet der verdien kan fjernes. Simula eksempel BEGIN REF(C) x; BEGIN REF(C) y; y :- NEW C; x :- y; END IF... THEN x :- none; END REF-variablene x og y har statisk livstid, C-objektet har dynamisk livstid. 15

Mer om livstid Statisk skop gir statisk livstid. Dynamisk skop gir dynamisk livstid. Variable med statisk livstid: Kompilatoren kan beskrive allokering/ de-allokering av variablenes plassforbruk. Dynamiske objekter krever (dynamisk) søppeltømming, dvs. bestemme hvilke objekter som er døde (kan ikke nåes ved å følge pekere) og så frigjøre den plassen de opptar. I Simula: søppeltømming startes når run-time systemer trenger mer plass. I Java: kontinuerlig søppeltømming. 16

Type-analyse Statisk typeanalyse - typen av alle variable og uttrykk kan bestemmes ved tekstlig analyse. Statisk typeanalyse gir gode syntaksfeilmeldinger, avslører mange feil som ellers er vaskelig å finne. Dynamisk typeanalyse kan gi større frihet ved programmering. Eks: sortering uten å kjenne element-typen. VAR x: Int... VAR x: Bool x Under kjøring(run-time): Dynamisk typeanalyse: må sjekke ganske mye. Statisk typeanalyse: må sjekke ganske lite. 17

Simula eksempel: subklasser CLASS Stud; BEGIN Text navn END; Stud CLASS HStud; BEGIN Text veileder END; Stud CLASS LStud; BEGIN Int antvt EN; REF(Stud) s; REF(HStud) eva; REF(LStud) jo; s :- NEW Stud; HStud LStud eva:- NEW Stud; HStud LStud s.veileder s QUA HStud.veileder jo.navn jo.antvt jo.veileder jo QUA HStud.veileder Merk: sålangt er analysen statisk! @ @ @ @ @ 18

Virtuell binding La HStud og LStud begge få passenede versjoner av Bool proc ferdig eva.ferdig s.ferdig s QUA LStud.ferdig INSPECT s WHEN HStud DO..s.ferdig.. WHEN LStud DO..s.ferdig.. Dersom ferdig defineres som en virtuell funksjon i klassen Stud, vil vi få dynamisk binding! 19

Ada: print(5) print(true) Overlasting Antall og (statisk) type av parametrene bestemmer hvilken prosedyre som velges. Java: overlasting + virtuell binding av alle metoder. 20

Run-Time Organisering Ved kjøring må vi for hver program-enhet ha lagret en/et kodesegment som inneholder koden for enheten (dvs. setningene i oversatt form) aktiveringsblokk som inneholder alle nødvendige data (verdier av lokale variable, parametre, og evt. systemvariable). Statisk Allokering i Fortran Plassbehovet er kjent. Antall aktive blokker er kjent. Plassering bestemmes statisk. 21