Föreläsning 5 5DV086 - Programspråk



Relevanta dokument
Föreläsning 2. Operativsystem och programmering

Program & programmering

Föreläsning 1: Intro till kursen och programmering

Introduktion till programmering och Python Grundkurs i programmering med Python

Föreläsning 1: Intro till kursen och programmering

Imperativ programmering

Inledande programmering med C# (1DV402) Introduktion till C#

Grundkurs i programmering - intro

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

JAVAUTVECKLING LEKTION 1

OOP Objekt-orienterad programmering

Introduktion till programmering. Programspråk och paradigmer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Programmering för alla!

Kursupplägg. Examination. Föreläsning 1: Intro till kursen och. Kursmaterial. programmering. Kursboken: Programmera med a multimedia approach

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 3 Jody Foo,

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Tom Smedsaas,

Programmering i C++ Kompilering från kommandoraden

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 2 Jody Foo,

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 2 Jody Foo,

Studentportalen UNIX-konton (systemansvariga P4118) Lärare: Anna Eckerdal,

Programmering för alla!

Objektorienterad programmering

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Sista delen av kursen

Imperativ programmering. Föreläsning 4

TDDE44 Programmering, grundkurs

6. Ge korta beskrivningar av följande begrepp a) texteditor b) kompilator c) länkare d) interpretator e) korskompilator f) formatterare ( pretty-print

IT för personligt arbete F6

Exempel på typer av datorspråk EXCEL

Sista delen av kursen

Dela, koda och korrigera! Undervisningsmaterial inom digital kompetens

Föreläsning 3. Programmering, C och programmeringsmiljö

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Att komma igång. Föreläsning 1

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Programmeringsparadigm - en jämförelse

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2009

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Digitalt lärande och programmering i klassrummet

Innehålls förteckning

Kompilatorteknik. Görel Hedin Datavetenskap Lunds Tekniska Högskola. Temaföreläsning, Datorer i system, 2014

Imperativ programmering. Föreläsning 2

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Objektorienterad programmering i Java

Programmering A med Visual C

TDIU01 (725G67) - Programmering i C++, grundkurs

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Domänspecifika språk. TDP007 Konstruktion av datorspråk Föreläsning 5. Peter Dalenius Institutionen för datavetenskap

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Variabler, värden och typer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Mjukstart i programmering

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Programmering. Seminarier i datavetenskap, datorteknik och informationsteknik. Niklas Broberg

Att komma igång. Föreläsning 1

TDIU01 - Programmering i C++, grundkurs

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

TDP005 Projekt: Objektorienterat system

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Exempel på typer av datorspråk EXCEL

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

BER AKNINGSBARHET F OR DATALOGER. Kent Petersson. Institutionen for Datavetenskap Goteborgs Universitet / Chalmers Goteborg, Sweden

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.

Grundläggande logik och modellteori

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Ytterligare ett steg mot realisering av SystemJ

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Software Technology. Josef Svenningsson

TDP002 Imperativ programmering

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Variabler, värden och typer

Objektorienterad Programmering (TDDC77)

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Programmeringsteknik II

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

NetBeans 5.5. Avsikt. Projektfönster

PROGRAMMERINGSMETODIK

Föreläsning 1 & 2 INTRODUKTION

SKOLFS. beslutade den XXX 2017.

Seminarier i datavetenskap, datorteknik och informationsteknik

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Datastrukturer och algoritmer

Digitalt lärande och programmering i klassrummet

Konstruktion av datorspråk

Transkript:

Föreläsning 5 5DV086 - Programspråk Petter Ericson (pettter@cs.umu.se) Umeå University 6 februari, 2015

Haskell-frågor?

Haskell-tips do-syntax State-monaden

Dagens plan Programspråksteori Varför? Vad? Hur?

Varför? Enklare lära sig nya språk Enklare välja rätt språk Enklare uttrycka idéer Bättre koll på implementation Bättre utnyttja verktyg ni redan kan Allmänbildning

Varför? Vad används datorer till? Business (mainframe) Science (HPC m.m.) AI System Web (End-user programming)

Varför? Hur fungerar datorer? Harvard-arkitektur von Neumann-arkitektur En/flerkärnigt Nätverkat FPGA Olika abstraktionsnivåer Olika implementationer (Allt är elektronik)

Varför? Förstå inverkan på programspråk Alltid avvägningar Förstå varför vissa avvägningar gjorts

Vad? Historik (finns främst i boken) Bakgrund Analys/utvärdering

Historik Trender inom programspråk 50-talet: Hårdvara 60-talet: Senare delen: språken/metoder 70-talet: Senare delen: dataabstraktion 80-talet: Funktionell/logisk programmering 90-talet: OOP På sistone: Funktionell programmering igen, concurrency viktigare Mer i boken (kapitel 2 är intressant!)

Bakgrund Underliggande hårdvara/elektronik är viktig von Neumann-arkitektur: Data och instruktioner i samma minne CPU <= data/prg => minne Hexkod -> speedcode -> ASM -> imperativa språk Kännetecknande för imperativa språk Variabler minnesceller Tilldelning skicka data Iteration är effektivt

Fetch-execute-cykeln Program Counter (PC) = <minnesaddress för programmets första instruktion while 1 Hämta instruktionen vid PC PC += 1 tolka instruktionen utför instruktionen

Abstraktionslager

Bakgrund Överliggande abstraktion är viktig λ-kalkyl Allt är funktioner (inklusive nummer!) Kan göra allt en universell Turing-maskin kan (Church-Turing-tesen) AI -> Symboliskt tänk -> Lisp -> övriga funktionella språk Kännetecknande för funktionella språk Ingen uppfattning om specifika minnesceller Namngivna värden, inga variabler Listor och rekursion, inte iteration

Implementationer Kompilering till maskinkod Körs direkt på hårdvaran Potentiellt effektivast (beror lite på kompilator m.m.) Ren interpretering/tolkning Varje uttryck tolkas varje gång en instruktion utförs Generellt en magnitud långsammare än kompilerat Hybrid Kompilerat till IL (intermediate language) Virtual machine Just-in-time-kompilerat

Kompilering

Interpretering

Hybrid - IL

Hybrid - VM

Hybrid - JIT

KAFI

Programmeringsmiljö I början: allt manuellt Texteditor för källkod preprocessa kompilera länka Samlingsverktyg make -> automake -> cmake/maven/ant/foo/bar/baz RCS -> CVS -> SVN -> git, mercurial, etc. Utvecklingsmiljöer - IDE Enkla - Turbo Pascal, Think C, div. emacs-script, vim-plugin etc. Mer avancerade - Eclipse, Visual Studio, NetBeans, Delphi

Utvärderingskriterier Läsbarhet Skrivbarhet Tillförlitlighet Kostnad

Läsbarhet Givet ett program, hur enkelt är det att förstå? Viktigt för underhåll Påverkas av bl.a.: Enkelhet Ortogonalitet Syntax Inbyggda datatyper

Skrivbarhet Givet ett problem, hur enkelt är det att skriva ett program för? Viktigt för användbarhet Påverkas av bl.a.: Läsbarhet Abstraktionsmöjligheter Uttrycksfullhet

Tillförlitlighet Hur tidigt och tydligt kan felaktigheter hittas? Hur katastrofala är buggar? Viktigt för.. det mesta faktiskt Påverkas av bl.a.: Läsbarhet Skrivbarhet Stöd för undantag Stöd för alias Typkontroller

Kostnad Givet ett problem, hur mycket kostar det att utveckla ett program för det? Givet ett program, hur mycket kostar det att använda/hålla igång? Påverkas av bl.a.: Läsbarhet/skrivbarhet Tillförlitlighet Existerande verktyg Portabilitet Optimeringsmöjligheter

Beskriva syntax Reguljära lexem Kontextfria grammatiker...plus lite till

Backus-Naur Form BNF CFG N LHS LHS... LHS Relativt enkelt bygga parser från grammatik

EBNF Snyggare regler Liknar regex-utökningar

Attributgrammatiker EBNF/CFG klarar inte allt (kolla typer, att variabler är definierade etc.) Lösning: Sätt attribut på regler Ökar (beräknings)komplexiteten på språket Arbeta i flera steg

Beskriva semantik Kommer inte in tokmycket på det.. Finns ett antal olika sätt Informellt vanligast

Formell semantik Operational semantics Denotational semantics Axiomatic semantics