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

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

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

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

IN 211 programmeringsspråk H 99

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

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

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)

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

Velkommen til. INF våren 2016

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

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

2 Om statiske variable/konstanter og statiske metoder.

Velkommen til. INF våren 2017

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

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

2 Om statiske variable/konstanter og statiske metoder.

Semantisk Analyse del III

Dagens tema: Kjøresystemer II

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

IN1010 Objektorientert programmering Våren 2019

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

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

Velkommen til. IN1010 Objektorientert programmering Våren 2018

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

Skal bindes opp til en deklarasjon av samme navn

Programmeringsspråket C

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

Generiske mekanismer i statisk typede programmeringsspråk

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

INF1000 Eksamensforberedelser og -tips. Høst 2014 Siri Moe Jensen

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

Velkommen til MAT1030!

MAT1030 Diskret Matematikk

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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)

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Forelesning inf Java 1

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

UNIVERSITETET I OSLO

IN våren 2019 Onsdag 16. januar

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

VELKOMMEN TIL MAT-INF1100(L) Knut Mørken Rom 1033, Niels Henrik Abels hus

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF våren 2017

Anatomien til en kompilator - I

Datatyper og typesjekking

En snarvei til INF2100

IN våren 2018 Tirsdag 16. januar

Velkommen til INF5110 Kompilatorteknikk

Del 1 En oversikt over C-programmering

Velkommen til INF Kompilatorteknikk

IN 147 Program og maskinvare

Programmeringsspråket C

INF1000: Forelesning 7. Konstruktører Static

Programmeringsspråket C

INF1800 LOGIKK OG BEREGNBARHET

Datatyper og typesjekking

UNIVERSITETET I OSLO

Velkommen til INF2100

Datatyper og typesjekking

Diverse eksamensgaver

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Datatyper og typesjekking

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

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

Skal bindes opp til en deklarasjon av samme navn

UNIVERSITETET I OSLO

Forelesning inf Java 1

INF1000: Forelesning 7

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

UNIVERSITETET I OSLO

VELKOMMEN TIL MAT-INF1100(L) Knut Mørken Rom 1033, Niels Henrik Abels hus

Velkommen. Velkommen til INF2270. Datamaskinarkitektur. Motto: Datamaskinen på tvers

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

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

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

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

Kapittel 1 En oversikt over C-språket

AlgDat 10. Forelesning 2. Gunnar Misund

Runtimesystemer Kap 7 - I

VELKOMMEN TIL MAT-INF 1100

Velkommen til INF2100 Jeg er Dag Langmyhr

Obligatorisk Innlevering 2

Runtime-omgivelser Kap 7 - II

INF5110. Oblig 2 presentasjon

Feilmeldinger, brukerinput og kontrollflyt

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

INF1800 LOGIKK OG BEREGNBARHET

Semantisk Analyse del I

Velkommen til INF Kompilatorteknikk

Transkript:

Velkommen til kurset INF 3110/4110 Programmeringsspråk 1/24 Forelesning 1 20.8.2003

Først det praktiske Foreleser: Roger Antonsen E-post: rantonse@ifi.uio.no Kontor: rom 3403 Treffetid: etter avtale Undervisning Forelesninger: onsdager kl. 14:15-16:00 Gruppetimer: én dobbeltime per uke...og mye selvstudium! 10 studiepoeng 12 timer i uken Obligatorisk oppmøte i dag! Hjemmeside: http://www.ifi.uio.no/inf3110/h03/ Nyhetsgruppe: ifi.in211 Forelesning 1 20.8.2003 2/24

Kursets innhold «Metoder for språkbeskrivelse og semantikk, inklusive statiske og dynamiske aspekter, typing, implementasjon og kjøresystemer. Ulike typer programmeringsspråk, inklusive funksjonelle språk og PROLOG.» Anbefalte forkunnskaper «kunnskaper tilsvarende INF1020 - Algoritmer og datastrukturer/inf 110» rekursjon, lister, trær,... datastrukturer, algoritmer,... lese enkle C-programmer programmere Java Forelesning 1 20.8.2003 3/24

Pensum Ghezzi & Jazayeri: Programming language concepts (tredje utgave), John Wiley & sons, 1998. Krogdahl & Ore: Om syntaks og syntaksanalyse, kompendium 47. Kan kjøpes i bokhandelen. Kristoffersen: Funksjonell programmering i standard ML, kompendium 61. Kan leses og skrives ut fra kursets hjemmeside. I tillegg: Forelesninger, obligatoriske oppgaver og ukeoppgaver. Se hjemmesiden til kurset for detaljene! Forelesning 1 20.8.2003 4/24

Gruppeundervisningen Arne Martin Güettler (arneh@ifi.uio.no) Ellef Gjelstad (ellefg@ifi.uio.no) begynner i uke 36 (3.-5. september)! Ukeoppgaver (over det som ble gjennomgått uken før på forelesning). Vurdering Avsluttende skriftlig eksamen på 3 timer. Tre obligatoriske innleveringer, hvor to av disse blir vurdert. Vekting: sannsynligvis 20%/20%/60%. Det var det praktiske! Forelesning 1 20.8.2003 5/24

Programmeringsspråk FORTRAN, ALGOL 60, COBOL, APL, LISP, SNOBOL4, PL/I, BASIC, SIMULA 67, Algol 68 Pascal, PROLOG, C, Mesa, Setl, Concurrent Pascal, Scheme, CLU, Euclid, Modula-2 Ada, Smalltalk, OPS5, ICON, C++, CLIPS, ML, Oberon-2, Eiffel, CLOS, Modula-3 Tcl/Tk, Perl, Python, Java (hentet fra boka s.15) hvorfor er det så mange programmeringsspråk? hva er et programmeringsspråk? hvordan beskriver man et programmeringsspråk? hva er forskjellene mellom ulike programmeringsspråk? Forelesning 1 20.8.2003 6/24

Det er gode grunner til at det er så mange språk: Oppgavene man ønsker å løse er forskjellige mph. størrelse, kompleksitet, innhold,... Det er forskjellige krav til hastighet, plass, sikkerhet,... Programmerere er ulike! Informatikken er ennå en ung vitenskap. En beskrivelse av et (programmerings-) språk består av to hovedkomponenter: Syntaktiske regler forteller hva slags form et lovlig program skal ha. Semantiske regler sier noe om hva de ulike setningene i språket betyr. Forelesning 1 20.8.2003 7/24

Noen ulike paradigmer Objekt-orientert programmering klasser og objekter (velkjent stoff) Imperativ programmering variable, tilordninger, sekvenser, tilstander Funksjonell (applikativ) programmering alt er funksjoner,verdier og typer (ikke tilordning) Logisk (deklarativ) programmering hva istedenfor hvordan Forelesning 1 20.8.2003 8/24

I dette kurset forstå hvordan man beskriver et språk helt presist; syntaksanalyse, grammatikker, BNF, språkklasser, automater,... forstå de underliggende mekanismene bedre / hva som skjer når et program blir eksekvert; kjøretidssystemer, statiske og dynamiske aspekter,typemekanismer,... programmeringserfaring; spesielt funksjonell programmering i ML, også noe PROLOG Forelesning 1 20.8.2003 9/24

Vi skal se på hvilke relevante egenskaper ved språk som gjør de like eller ulike. Hva er essensen ved et programmeringsspråk? Hvordan kan vi skille språkene fra hverandre? Vi begynner med å se på: binding og variable Forelesning 1 20.8.2003 10/24

Binding Programmer består av enheter (entiteter) med tilhørende egenskaper (attributter). Eksempler: En variabel har et navn og en type. En rutine har et navn og formelle parametre (med typer). En setning har assosierte aksjoner. Det å sette verdien til en slik egenskap kalles binding. Dette er en av de essensielle egenskapene som skiller programmeringsspråk fra hverandre. La oss se noen eksempler på når binding kan skje. Forelesning 1 20.8.2003 11/24

Binding kan skje i språkdefinisjonen I Java representerer int et heltall som er et kjent matematisk begrep. Dermed vet vi hvordan +, * etc. skal oppføre seg. i implementasjonen I C er det implementasjonen som bestemmer hvor mange byte som brukes for en int. Forelesning 1 20.8.2003 12/24

Binding kan skje under kompileringen I Pascal er typen Integer predefinert, men kan omdefineres i et program. Dvs. ved språkimplementasjonen er bindingen til Integer gitt, men denne endres ved kompilering. under kjøringen I de fleste programmeringsspråk er variable bundet til en verdi under kjøringen, og denne bindingen kan endres mange ganger underveis. De tre første bindingene kalles statiske bindinger, den siste kalles dynamisk binding. Forelesning 1 20.8.2003 13/24

Variable Sett fra en programmerers synspunkt, har en variabel følgende egenskaper: navn - en streng av tegn for å kunne referere til variabelen skop - de deler av programmet hvor variabelen er kjent levetid type adresse i lageret - («l-value») verdi-(«r-value») Navn En variabel får navnet i en deklarasjon. Noen språk (som Perl, PHP, Fortran, Scheme) krever ingen eksplisitt deklarasjon. Variablen blir deklarert implisitt første gang den påtreffes. Forelesning 1 20.8.2003 14/24

Skop Enhver variabel (og deklarasjon) har sitt skop, dvs. den delen av programmet hvor den er synlig. Enhver forekomst er kun i skopet til én deklarasjon med samme navn. 1 #include <stdio.h> 2 int x = 1; 3 4 void f() 5 { 6 printf("x = %d\n", x); 7 } 8 9 int main() 10 { 11 int x = 2; 12 f(); 13 } Skopet begynner vanligvis der hvor variabelen deklareres og strekker seg til et punkt som bestemmes av det aktuelle språket. Eksempel i C: Skrives det ut 1 eller 2? Forelesning 1 20.8.2003 15/24

Problem med skop a la C Hvordan kan to funksjoner kalle hverandre når de først er kjent etter deklarasjonen? Løsningen er å tillate separat deklarasjon av signaturen. 1 float f2(int a, int b); 2 3 int f1(float x) 4 { 5... f2(...,...)... 6 } 7 8 float f2(int a, int b) 9 { 10... f1(...)... 11 } Forelesning 1 20.8.2003 16/24

Språkets skopregler forteller hva skopet er. De vanligste er: C Skopet starter ved deklarasjonsstedet. Simula Skopet starter ved begin i blokken. Java Som C for lokale variable og som Simula for klasseatributter. Perl Som C for variable og som Simula for funksjoner. Alle disse språkene (unntatt Perl) har statisk skop. Alle disse skopene varer til blokkens avslutning (med end eller }). For alle språkene gjelder at lokale redeklarasjoner kan gi «hull» i skopet. Forelesning 1 20.8.2003 17/24

Skop i hele blokken (SIMULA) 1 begin 2 integer x = 1; 3 4 begin 5 procedure P1; 6 begin 7 OutText("indre x = "); OutInt(x, 0); OutImage; 8 end; 9 10 integer x = 2; 11 12 P1; 13 end; 14 15 OutText("ytre x = "); OutInt(x, 0); OutImage; 16 end x=1 x=1 x=1 x=2 x=2 x=2 x=2 x=2 x=2 x=2 x=2 x=2 x=2 x=1 x=1 x=1 Resultatet av kjøringen: indrex= ytre x = Forelesning 1 20.8.2003 18/24

Statisk skop (også kalt leksikalsk skop) Skopet kan avgjøres ved å se på den syntaktiske strukturen til programmet. For hver variabelforekomst i programmet kan man finne en unik deklarasjon som hører til forekomsten. Kan gjøres uten å kjøre programmet; det er det vi mener med statisk. Dynamisk skop Noen språk har dynamisk skop, med regelen: En forekomst binder til den sist evaluerte deklarasjon som ikke er avsluttet. Skopet er dermed bestemt av kjøringen, og kan ikke avgjøres på forhånd. (LISP) Forelesning 1 20.8.2003 19/24

Levetid En variabels levetid er den tiden den opptar plass i lageret. Dette er normalt den tiden programmet er i variabelens skop, men det er unntak: En variabel lever selv om den midlertid er skjult av en annen variabel. Noen språk har nøkkelord som gir utvidet levetid (som static ijavaogc). Ved å bruke dynamisk allokering (new i Java,malloc i C)får brukeren full kontroll over levetiden. Forelesning 1 20.8.2003 20/24

Type En variabels type angir et sett av verdier og mulige operasjoner på disse. De fleste språk har statisk typing - typen bindes ved kompilering Noen språk har dynamisk typing - typen kan forandres under kjøring Det blir snart mer om dette. Forelesning 1 20.8.2003 21/24

1 x=y; Adresse i lageret («l-value») Variable som forekommer på venstre side av tilordningsoperatoren = står vanligvis for adressen i lageret. Hvor en variabel plasseres i lageret er oftest dynamisk bestemt. Verdien («r-value») Variable som forekommer på høyre side av tilordningsoperatoren = står vanligvis for innholdet eller verdien til variabelen, dvs. det som lageret inneholder. 1 x=x+2; Forelesning 1 20.8.2003 22/24

En variabels verdi er det mest dynamiske vi har, men selv der finnes unntak: I noen språk kan man definere konstanter som er kjent under kompileringen (som #define i C). Noen språk kan «fryse» en variabel slik at verdien siden ikke endres (som final ijava). Initialverdi Hvilken verdi har en variabel når den opprettes? Noen muligheter: en tilfeldig verdi (gitt av hva som lå der før) en fast verdi (0 i Simula) en initialverdi må alltid oppgis (Modula-3) det er umulig å bruke en variabel før den har fått en verdi (Java) Forelesning 1 20.8.2003 23/24

Oppsummering Dette var (grovt sett) 2.2 og 2.3 i læreboken. Kapittel 1 er selvstudium. 27/8 Typer. Les kapittel 3 frem til 3.3.1. ML. Begynn på ML-kompendiet. 3/9 Fortsetter med ML. 10/9 Ingen forelesning. 17/9 Fortsetter med ML. Forelesning 1 20.8.2003 24/24