Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design
|
|
- Fritz Bergmann
- vor 5 Jahren
- Abrufe
Transkript
1 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) PD Dr. David Sabel 1 Software Transactional Memory Übersicht Logging Beispiele T. kombinieren Philosophen 2 WS 2013/14 Stand der Folien: 28. Januar 2014 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 2/30 Software Transactional Memory in Haskell Design in Haskell von Tim Harris und Simon L. Peyton Jones 2005 eingeführt Implementiert in der Bibliothek Control.Concurrent. Erstes Papier, dass retry und orelse einführt. Trennung von Operationen auf Transaktionsvariablen und normalem IO mithilfe des Typsystems Wie IO-Monade gibt es eine -Monade Transaktionen sind vom Typ a atomically :: a -> IO a überführt eine -Aktion in eine IO-Operation Semantik: Führt die Transaktion atomar aus. Beachte: Es gibt keine Umkehrung vom Typ IO a -> a! Halbwahrheit: unsafeioto :: IO a -> a Da eine Monade ist, kann die do-notation und auch >>=, >> und return verwendet werden. D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 3/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 4/30
2 Transaktionsvariablen TVar Transaktionen data TVar a =... newtvar :: a -> (TVar a) Erzeugt eine neue TVar mit Inhalt readtvar :: TVar a -> a Liest den den momentanen Wert einer TVar atomically ( do... Zugriffe auf TVar s... und... pure funktionale Berechnungen writetvar :: TVar a -> a -> () Schreibt einen neuen Wert in die TVar... aber kein IO! newtvario :: TVar a -> a -> IO (TVar a) Erzeugen einer TVar in der IO Monade ) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 5/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 6/30 retry Konflikterkennung: Lokales Logging saldo :: TVar Int 785 retry :: a Bricht die Transaktion ab und startet sie neu Implementierung: Neustart erst dann, wenn sich die Werte von TVars geändert haben Damit wird implizit blockiert! Thread 1 atomically ( do local <- readtvar saldo writetvar saldo (local + 1) ) TVar gelesen geschrieben saldo 7 8 Transaction log Thread 2 atomically ( do local <- readtvar saldo writetvar saldo (local - 3) ) TVar gelesen geschrieben saldo Transaction log Abort & Restart D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 7/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 8/30
3 Beispiel: Binäre Semaphore Beispiel: Unbounded Buffer type Semaphore = TVar Bool newsem :: Bool -> IO Semaphore newsem k = newtvario k -- k True/False wait :: Semaphore -> () wait sem = do b <- readtvar sem if b then writetvar sem False else retry signal :: Semaphore -> () signal sem = writetvar sem True type Buffer a = TVar [a] newbuffer :: IO (Buffer a) newbuffer = newtvario [] put :: Buffer a -> a -> () put buffer item = do ls <- readtvar buffer writetvar buffer (ls ++ [item]) get :: Buffer a -> a get buffer = do ls <- readtvar buffer case ls of [] -> retry (item:rest) -> do writetvar buffer rest return item D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 9/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 10/30 MVar innerhalb von implementieren MVar innerhalb von implementieren(2) takemvar-operation: type MVar a = TVar (Maybe a) MVar erzeugen: newemptymvar :: (MVar a) newemptymvar = newtvar Nothing takemvar :: MVar a -> a takemvar mv = do v <- readtvar mv case v of Nothing -> retry Just val -> do writetvar mv Nothing return val D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 11/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 12/30
4 MVar innerhalb von implementieren(3) Transaktionen kombinieren putmvar-operation: putmvar :: MVar a -> a -> () putmvar mv val = do v <- readtvar mv case v of Nothing -> writetvar mv (Just val) Just val -> retry >>=, >>, do erstellen aus Transaktionen zusammengesetzte Sequenzen. Beispiel: swapmvar :: MVar a -> b -> a swapmvar mv val = do res <- takemvar mv putmvar val return res swapmvar wird atomar ausgeführt, da es eine Transaktion ist. D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 13/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 14/30 Transaktionen kombinieren: Auswahl Nochmal zur MVar-Implementierung orelse :: a -> a -> a Kombiniert zwei Transaktion zu einer Wenn die erste Transaktion erfolgreich ist, dann auch die kombinierte Wenn die erste Transaktion ein retry durchführt, dann wird die zweite Transaktion durchgeführt. Wenn beide Transaktionen ein retry durchführen, so wird die gesamte Transaktion neu gestartet. Nichtblockierendes putmvar tryputmvar :: MVar a -> a -> Bool tryputmvar mv val = ( do putmvar mv val return True ) orelse (return False) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 15/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 16/30
5 orelse erweitern Speisende Philosophen in Aufbauend auf dem binären orelse kann man problemlos neue Kombinatoren definieren. merge :: [ a] -> a merge transactions = foldl1 orelse transactions foldl1 op [x] = x foldl1 op (x:xs) = x op (foldl e op xs) merge [t1,...,tn] ergibt (t1 orelse (t2 orelse (t3 orelse... ())) Die erste erfolgreich durchgeführte Transaktion bestimmt das Ergebnis. von Josef Svenningsson simulation n = do forks <- sequence (replicate n (newsem True)) outputbuffer <- newbuffer sequence_ [forkio (philosoph i outputbuffer (forks!!i) (forks!!((i+1) mod n))) i <- [0..n-1]] output outputbuffer output buffer = do str <- atomically $ get buffer putstrln str output buffer D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 17/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 18/30 Speisende Philosophen in (2) Eigenschaften von Haskells philosoph :: Int->Buffer String->Semaphore->Semaphore->IO () philosoph n out fork1 fork2 = do atomically $ put out ("Philosoph " ++ show n ++ " denkt.") atomically $ do wait fork1 wait fork2 atomically $ put out ("Philosoph " ++ show n ++ " isst.") atomically $ do signal fork1 signal fork2 philosoph n out fork1 fork2 Isolation: Strong (kein Zugriff auf Transaktionsvariablen außerhalb von Transaktionen) Granularität: Wortbasiert Update: Verzögert (Neue Werte werden ins Log geschrieben, erst beim commit in den Speicher) Concurrency Control: optimistisch (meint keine Locks auf die Speicherplätze) Synchronisation: Blockierend Conflict Detection: Late (erst beim commit) Nested Transaction: Nein (durch Typsystem verhindert) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 19/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 20/30
6 (2) Ideen bei : Werte Ausdrücke parallel aus In der reinen funktionalen Sprache Nicht in der IO-Monade Richtig, wenn der Wert der Ausdrücke sowieso gebraucht wird In der Bibliothek Control.Parallel: par :: a -> b -> b pseq :: a -> b -> b par erwartet zwei Argumente (par a b) Zeigt dem Laufzeitsystem an: Während b ausgewertet wird, darf a parallel ausgewertet werden Semantik: par a b = b! Laufzeitsystem darf a auswerten, muss aber nicht. Laufzeitsystem legt keinen Thread für a an, sondern einen Spark Sparks werden in eine FIFO-Queue abgelegt. Wenn ein Prozessor ungenutzt ist, wird nächster Spark dort abgearbeitet Ähnlichkeiten zu lazy futures D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 21/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 22/30 Parallelisieren Parallelisieren Beispiel let x = fib 100; y=fak 35 in par x (y+x) Compiler darf die Auswertung umstellen: (x+y) statt (y+x) Keine Parallelisierung! Lösung: pseq a b: Werte erst a aus, danach b let x = fib 100; y=fak 35 in par x (pseq y (y+x)) Beispiel let x = fib 100; y=fak 35 in par x (y+x) Compiler darf die Auswertung umstellen: (x+y) statt (y+x) Keine Parallelisierung! Lösung: pseq a b: Werte erst a aus, danach b let x = fib 100; y=fak 35 in par x (pseq y (y+x)) D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 23/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 24/30
7 Fibonacci-Zahlen berechnen Verzögerte Auswertung import Control.Parallel nfib :: Int -> Int nfib n n <= 1 = 1 otherwise = par n1 (pseq n2 (n1 + n2 + 1)) where n1 = nfib (n-1) n2 = nfib (n-2) Beachte: Ohne pseq wird nicht genügend parallelisiert: Beispiel Die verzögerte Auswertung führt oft dazu, dass weniger parallel berechnet wird, als der Programmierer annimmt. let x = map (+1) [ ] in par x s map (+1) [ ] wird ausgewertet zu (1+1):(map (+1) [ ] aber nicht weiter! Auswertung nur bis zur schwachen Kopfnormalform (WHNF)! D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 25/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 26/30 Strategien Komplexere Strategien type Strategy a = a -> () class NFData a where rnf :: Strategy a Strategie rnone: keine Auswertung rnone :: Strategy a rnone = () Strategie rwhnf: Auswertung bis zur WHNF: rwhnf :: Strategy a rwhnf a = pseq a () instance NFData a => NFData [a] where rnf [] = () rnf (x:xs) = rnf x pseq rnf xs Anwenden einer Strategie: using :: a -> Strategy a -> a using x s = (s x) pseq x D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 27/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 28/30
8 Beispiel: Quicksort Datenorientierter Parallelismus quicksort [] = [] quicksort (x:xs) = low ++ (x:high) using strategy where low = quicksort [y y <- xs, y < x] high = quicksort [y y <- xs, y >= x] strategy result = (rnf low) par (rnf high) par (rnf result) Strategie parallel auf eine Liste anwenden: parlist :: Strategy a -> Strategy [a] parlist strat [] = () parlist strat (x:xs) = strat x par (parlist strat xs) Paralleles map parmap :: Strategy b -> (a -> b) -> [a] -> [b] parmap strat f xs = map f xs using parlist strat D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 29/30 D. Sabel TIDS WS 2013/14 Nebenläufige Programmierung in Haskell 30/30
Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell
Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) 1 Software Transactional
MehrLock-freies nebenläufiges Programmieren durch Software Transactional Memory
Lock-freies nebenläufiges Programmieren durch Software Transactional Memory David Sabel Goethe-Universität, Frankfurt am Main 10. Juni 2013 Stand der Folien: Motivation Parallele, nebenläufige und verteilte
MehrProgrammtransformationen und Induktion in funktionalen Programmen
Programmtransformationen und Induktion in funktionalen Programmen Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 13. Januar 2009 Einschub: Monadisches IO verzögern Implementierung
MehrPraktikum Funktionale Programmierung Organisation und Überblick
Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung
MehrFunktionale Programmierung
Parallele LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 4. Juni 2009 Grundlagen Paralleles Rechnen ermöglicht eine schnellere Ausführung von Programmen durch
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine WWW
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrNebenläufige Programmierung: Praxis und Semantik
Stand der Folien: 17. Januar 2012 Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (1) WS 2011/12 Einführung in Haskell
MehrHaskell for Hackers... or why functional programming matters
... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:
MehrPraktische Informatik 3
Praktische Informatik 3 Christian Maeder WS 03/04 Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen Vorlesung vom 12.1.2004: Ein/Ausgabe in funktionalen Sprachen 3 Inhalt Wo ist das Problem?
MehrAdressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung
Adressen Adressen, Termine Studienleistung Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Büro und Email Raum 216, Robert-Mayer-Str. 11-15 sabel@ki.informatik.uni-frankfurt.de
MehrParadigmen der Programmierung
SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]
MehrPrüfung Funktionale Programmierung
Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2015 Prüfung Funktionale Programmierung Datum : 23.07.2015, 10:30 Uhr Bearbeitungszeit
MehrNebenläufige Programmierung in Haskell
Kapitel 1 Nebenläufige Programmierung in Haskell 1.1 I/O in Haskell In einer rein funktionalen Programmiersprache mit verzögerter Auswertung wie Haskell sind Seiteneffekte zunächst verboten. Fügt man Seiteneffekte
MehrPrüfung Funktionale Programmierung
Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IF, IB, IC Sommersemester 2014 Prüfung Funktionale Programmierung Datum : 16.07.2014, 12:30 Uhr Bearbeitungszeit
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (1) Funktionale Programmiersprachen (2)
Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (1) PD Dr. David Sabel WS 2013/14 Stand der Folien: 21. Januar
MehrGrundlegende Datentypen
Grundlegende Datentypen Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 22.10.2018 10:53 Grundlegende Datentypen 1/21 Typen in Haskell ist alles streng typisiert Haskell verfügt über
MehrFunktionale Programmierung. Monaden. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Funktionale Programmierung Monaden Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 09.10.2018 06:54 Inhaltsverzeichnis Eine Monade.................................... 2 Vergleich
MehrFortgeschrittene Funktionale Programmierung mit Haskell
Grundlagen GpH Par Fortgeschrittene Funktionale Programmierung mit Haskell Paralleles Rechnen Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München
MehrStackmaschine; Speicheradressierung
Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen
Mehr1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten
1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten Java-1. a), e) Java-2. --- gestrichen --- Java-3. keine Antwort ist richtig Java-4. a) Java-5. a), b)
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster
16:02:16 2017-01-17 1 [30] Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom 10.01.2017: Monaden als Berechnungsmuster Christoph Lüth Universität Bremen Wintersemester 2016/17 Frohes
MehrMulticore-Parallelität in Haskell
Universität Passau Fakultät für Mathematik und Informatik Multicore-Parallelität in Haskell Ausarbeitung im Rahmen des Seminars Multicore-Programmierung Stefan Boxleitner 20. Januar 2011 Betreut von Dr.
MehrPraktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen
Praktikum Funktionale Programmierung Teil 3: Abstrakte Maschinen Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 3: Abstrakte Maschinen Sommersemester 2015 D. Sabel
MehrSprachkonzepte der parallelen Programmierung
Sprachkonzepte der parallelen Programmierung Johannes Waldmann HTWK-FIMN 2. Mai. 2012 Johannes Waldmann (HTWK-FIMN) Sprachkonzepte der parallelen Programmierung 2. Mai. 2012 1 / 17 Die Zukunft ist parallel...
MehrFunktionale Programmierung. Monoide. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Funktionale Programmierung Monoide Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 03.12.2018 07:53 Inhaltsverzeichnis Abstraktion..................................... 1 Eine
MehrProgrammieren in Haskell
Programmieren in Haskell Monaden Programmieren in Haskell 1 Sequenzierung mit Dollar und Euro Die Atommüll-Metapher Maybe- und Listen-Monaden Return Die do-notation Monaden als Berechnungen Listenbeschreibungen
MehrReaktive Programmierung Vorlesung 13 vom : Software Transactional Memory
11:54:31 2017-06-15 1 [37] Reaktive Programmierung Vorlesung 13 vom 14.06.17: Software Transactional Memory Christoph Lüth, Martin Ring Universität Bremen Sommersemester 2017 RP SS 2017 2 [37] Fahrplan
MehrLazy Programming Wintersemester 2003 / 2004
1/43 Proseminar Programmiersysteme Author Benedikt Grundmann bgrund@ps.uni-sb.de Lazy Programming Wintersemester 2003 / 2004 Betreuer Andreas Rossberg rossberg@ps.uni-sb.de Professor Gert Smolka smolka@ps.uni-sb.de
MehrNebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen
Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Zugriff auf mehrere Ressourcen WS 2009/10 Deadlocks bei mehreren Ressourcen Transactional Memory Übersicht 1
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Zugriff auf mehrere Ressourcen. Deadlocks bei mehreren Ressourcen
Stand der Folien: 20. Dezember 2011 Deadlocks bei mehreren Ressourcen Übersicht Transactional Memory Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Zugriff
MehrProgrammieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren
MehrMotivation Von Funktoren, Komposition, Applikation Zu Monoiden Die Monade Zusammenfassung. Monaden für alle. Franz Pletz
Monaden für alle Franz Pletz Chaos Computer Club München 13. Juni 2010, GPN10 Wieso, weshalb, warum? einige von euch haben sich sicher schon mal Haskell angeschaut und sind an Monaden
MehrMonoide. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :54. Monoide 1/16
Monoide Funktionale Programmierung Prof. Dr. Oliver Braun Letzte Änderung: 09.10.2018 06:54 Monoide 1/16 Abstraktion gleichartige Strukturen sollten abstrahiert werden Beispiel: Collections in Haskell
MehrProgrammierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,
MehrFunktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp
MehrProgrammieren in Haskell
Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für s Wochenende Programmieren
MehrUnendliche Listen und Bäume
Funktionale Programmierung Unendliche Listen und Bäume Helga Karafiat, Steffen Rüther Übersicht Grundlage: Lazy Evaluation Konstruktion von unendlichen Strukturen Verwendung von unendlichen Listen Unendliche
MehrConcurrent Haskell with Futures. Vorlesung SAFP, WS 2017/18
Concurrent Haskell with Futures Vorlesung SAFP, WS 2017/18 Stand der Folien: 8. Februar 2018 Übersicht Der CHF-Kalkül 1 Der CHF-Kalkül Syntax Typisierung Semantik Gleichheit EFP SAFP Vorlesung SAFP, WS
MehrFunktionale Programmierung Mehr funktionale Muster
Mehr funktionale Muster Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 07.12.2017 06:56 Inhaltsverzeichnis Pattern Matching..................................
MehrEinführung in Haskell
Einführung in Haskell Axel Stronzik 21. April 2008 1 / 43 Inhaltsverzeichnis 1 Allgemeines 2 / 43 Inhaltsverzeichnis 1 Allgemeines 2 Funktions- und Typdefinitionen 2 / 43 Inhaltsverzeichnis 1 Allgemeines
MehrBerechnungsschemata: Funktion als Parameter abstrahiert Operation im Schema, wird bei Aufruf des Schemas konkretisiert
6. Funktionen als Daten, Übersicht Orthogonales Typsystem: Funktionen sind beliebig mit anderen Typen kombinierbar Notation für Funktionswerte (Lambda-Ausdruck): fn (z,k) => z*k Datenstrukturen mit Funktionen
MehrAnwendung (2. Versuch:-) Entkopplung der Locks
Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()
MehrHaskell für Mathematiker
Haskell für Mathematiker Joachim Breitner AG Seminar Topology 12. Mai 2016, Karlsruhe LEHRSTUHL PROGRAMMIERPARADIGMEN 1 KIT 19.2.2016 University of the Joachim State ofbreitner Baden-Wuerttemberg - Haskell
MehrPraktikum Funktionale Programmierung Teil 2: Typecheck und Transformation
Praktikum Funktionale Programmierung Teil 2: Typecheck und Transformation Dr. David Sabel Sommersemester 2015 Stand der Folien: SoSe 2015 Übersicht FP-PR Teil 2: Typecheck und Transformation Sommersemester
MehrGrundlegende Datentypen
Funktionale Programmierung Grundlegende Datentypen Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 14.11.2017 15:37 Inhaltsverzeichnis Typen........................................
MehrProgrammieren in Haskell Einstieg in Haskell
Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke
MehrStröme als unendliche Listen in Haskell
Ströme als unendliche Listen in Haskell Strom := Folge oder Liste von Daten, unbegrenzt viele Daten-Elemente. Ströme sind in Haskell als als (potentiell) unendliche Listen darstellbar und programmierbar
MehrGrundlagen der Programmierung 2. Unendliche Listen und Ströme(B)
Grundlagen der Programmierung 2 Unendliche Listen und Ströme(B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Mai 2006 Beispiel: scanl, scanr scanl berechnet das foldl
MehrÜbersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf
Übersicht Komplexitätsresultate Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Synchronisation (4) Drei Komplexitätsresultate Eine genaue Schranke für den Platzbedarf
MehrInformatik-Seminar Thema: Monaden (Kapitel 10)
Informatik-Seminar 2003 - Thema: Monaden (Kapitel 10) Stefan Neumann 2. Dezember 2003 Inhalt Einleitung Einleitung Die IO()-Notation Operationen Einleitung Gegeben seien folgende Funktionen: inputint ::
MehrGrundlegende Datentypen
Grundlegende Datentypen (Funktionale Programmierung) Prof. Dr. Oliver Braun Letzte Änderung: 18.03.2018 21:08 Grundlegende Datentypen 1/16 Typen in Haskell ist alles streng typisiert Haskell verfügt über
MehrFunktionale Programmiersprachen
Funktionale Programmiersprachen An den Beispielen Haskell und Erlang Übersicht Programmiersprachen λ-kalkül Syntax, Definitionen Besonderheiten von funktionalen Programmiersprache, bzw. Haskell Objektorientierte
MehrWS 2011/2012. Georg Sauthoff November 2011
WS 2011/2012 Georg 1 AG Praktische Informatik 22. November 2011 1 gsauthof@techfak.uni-bielefeld.de Vorstellung der abgaben aus den Tutorien. Sieb-Beispiel Siehe Tafel (Auswertungsbeispiel) Sieb-Beispiel
MehrFunktionale Programmierung
Monaden LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 30. April 2009 Monaden Eine Monade ist ein Programmier-Schema für sequentielle Berechnungen. In Haskell
MehrFunktionale Programmierung
Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 2 Teil II Typen mit Werten und Ausdruck, sogar listenweise 3 Haskell Programme Programm Module ein
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrFrank eine Programmiersprache mit Effekten
Frank eine Programmiersprache mit Effekten Tim Baumann Curry Club Augsburg 23. Februar 2017 1 / 30 Paper: GitHub: Do Be Do Be Do von Sam Lindley, Conor McBride und Craig McLaughlin https://github.com/cmcl/frankjnr
MehrInhalt Kapitel 5: Funktionen höherer Ordnung
Inhalt Kapitel 5: 1 Funktionen als Argumente 2 Funktionen als Werte einer Funktion 3 Currying 4 Grundlegende 88 Funktionen als Argumente Funktionen als Argumente: map Anwenden einer Funktion auf alle Einträge
MehrROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER
ROGER GILLIAR / MCS GMBH HASKELL FÜR JAVA PROGRAMMIERER interface ImportantService { Double getmoney(); } ... sollte stets ein so genannter Kontrakt definiert werden, über den die Bedeutung der verschiedenen
MehrParallelität und Nebenläufigkeit mit Haskell 1 / 68
Parallelität und Nebenläufigkeit mit Haskell Stefan Wehr (wehr@factisresearch.com) factis research GmbH, Freiburg im Breisgau 16. Mai 2013 parallel2013, Karlsruhe Parallelität und Nebenläufigkeit mit Haskell
MehrÜbungsblatt zu Haskell
Zweiter Haskell-Workshop im OpenLab Augsburg github.com/curry-club-aux/haskell-workshop Übungsblatt zu Haskell Learn You a Haskell for Great Good! 1 Mehr zu Monaden Aufgabe 1. Umgekehrte polnische Notation
MehrGliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung
Gliederung n Teil I: Einleitung und Grundbegriffe l 1. Organisatorisches l 2. Grundlagen von Programmiersprachen n Teil II: Imperative und objektorientierte Programmierung l 1. Grundelemente der Programmierung
MehrWir betrachten noch einmal den Datentyp für blattbeschriftete Binärbäume
Zustandsmonaden Wir betrachten noch einmal den Datentyp für blattbeschriftete Binärbäume data Tree a = L a Tree a :+: Tree a und wollen eine Funktion definieren, die die Knoten so eines Baums von links
MehrFunktionale Programmierung Grundlegende Datentypen
Grundlegende Datentypen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 06.11.2017 16:45 Inhaltsverzeichnis Typen........................................
MehrSoftware Transactional Memory
Software-Architektur Software Transactional Memory Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 11.07.2017 15:12 Inhaltsverzeichnis Transaktionaler Speicher..............................
MehrProgrammiersprachen im Multicore-Zeitalter: Haskell
Programmiersprachen im Multicore-Zeitalter: Haskell Colin Benner 30. Januar 2012 1 Einführung Mit der ständig wachsenden Anzahl verfügbarer Prozessor-Kerne wird das Schreiben paralleler Programme immer
MehrGeheimnisprinzip: (information hiding principle, Parnas 1972)
2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten
MehrKommerzielle Softwareentwicklung mit Haskell
Kommerzielle Softwareentwicklung mit Haskell Ein Erfahrungsbericht Stefan Wehr factis research GmbH, Freiburg im Breisgau 7. Oktober 2011, Hal6 in Leipzig Viele Fragen Wer sind wir? Wer bin ich? Wie setzen
MehrALP I. Funktionale Programmierung
ALP I Funktionale Programmierung Zusammengesetzte Datentypen in Haskell WS 2012/2013 Zusammengesetzte Datentypen Tupel List String Zusammengesetzte Datentypen Tupel-Datentyp Ein Tupel ist eine Ansammlung
MehrFunktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz
Funktionale Programmierung Das Funktionale Quiz 31.5.2005 Nenne eine Gemeinsamkeit zwischen Typklassen und OO-Klassen Das Funktionale Quiz Das Funktionale Quiz Nenne einen Unterschied zwischen Typklassen
MehrFunktionale Programmierung
Schleifen 1 Funktionale Programmierung Jörg Kreiker Uni Kassel und SMA Solar Technology AG Wintersemester 2011/2012 3 Teil I Jedem Anfang wohnt ein Zauber inne 4 Über mich Diplom in Informatik in Saarbrücken
MehrWorkshop Einführung in die Sprache Haskell
Workshop Einführung in die Sprache Haskell Nils Rexin, Marcellus Siegburg und Alexander Bau Fakultät für Informatik, Mathematik und Naturwissenschaften Hochschule für Technik, Wirtschaft und Kultur Leipzig
MehrProgrammierung und Modellierung mit Haskell
Grundlagen Par-Monade Programmierung und Modellierung mit Haskell Parallele Auswertung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität,
MehrPraktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte
16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Abschlussklausur 21. Februar 2014 Einführung
Mehr- Welche konkreten Invarianten müssen gelten? Berücksichtigen: Invarianten aus Modell und Implem.
234 Implementierung von Abstrakten Datentypen und Korrektheitskriterien Ziel: Zusammenhang zwischen Spezifikation (Modell!) und Implementierung(en) herstellen Spezifikation Implementierung abstraktes Modell?
MehrMemory Models Frederik Zipp
Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1
MehrProgrammieren in Haskell
Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen
MehrBasiskonstrukte von Haskell
Basiskonstrukte von Haskell PD Dr. David Sabel Goethe-Universität Frankfurt am Main 29. September 2015 Basistypen und Operationen Ganzzahlen: Int = Ganzzahlen beschränkter Länge Integer = Ganzzahlen beliebiger
MehrTyp-Polymorphismus. November 12, 2014
Typ-Polymorphismus Universität Bielefeld AG Praktische Informatik November 12, 2014 Das Haskell Typ-System Wir beginnen mit einer Wiederholung des Bekannten: In allen Programmiersprachen sind Typ-Konzepte
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Wintersemester 2012/13 Lösungsblatt Endklausur 9. Februar 2013
MehrTypklassen. Natascha Widder
Typklassen Natascha Widder 19.11.2007 Motivation Typklassen fassen Typen mit ähnlichen Operatoren zusammen ermöglichen überladenen Funktionen Definition Typklassen Deklarationsschema class Name Platzhalter
Mehr2.2.1 Algebraische Spezifikation (Fortsetzung)
2.2.1 Algebraische Spezifikation (Fortsetzung) Algebraische Spezifikation: Mengen Types Set, Bool, t Signature > creates :: Eq t => Set t > isempty :: Eq t => Set t -> Bool > insert :: Eq t => t -> Set
MehrHaskell im harten Alltag
Haskell im harten Alltag Stefan Wehr (wehr@cp-med.com) Twitter: @skogsbaer factis research GmbH 20. Juni 2014 Haskell im harten Alltag 1 / 39 Wer bin ich? Was machen wir? Haskell Benutzer seit 2003 Zunächst
MehrINFORMATIK FÜR BIOLOGEN
Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie
MehrKapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1
Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik
MehrAlgorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -
Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen
MehrWS 2011/2012. RobertGiegerich. November 12, 2013
WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen
Mehr1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08)
Fachschaft Informatikstudiengänge Fachrichtung 6.2 Informatik Das Team der Bremser 1. Probeklausur (Lösung) zu Programmierung 1 (WS 07/08) http://fsinfo.cs.uni-sb.de Name Matrikelnummer Bitte öffnen Sie
MehrTypklassen, Eingabe und Monaden In Haskell
Typklassen, Eingabe und Monaden In Haskell Felix Rahmati Jonathan Beierle 1 Einleitung In dieser Ausarbeitung befassen wir uns mit den Vorteilen einiger fortgeschrittener Konzepte der funktionalen Programmierung
MehrNebenläufige Programme mit Python
Nebenläufige Programme mit Python PyCon DE 2012 Stefan Schwarzer, SSchwarzer.com info@sschwarzer.com Leipzig, Deutschland, 2012-10-30 Nebenläufige Programme mit Python Stefan Schwarzer, info@sschwarzer.com
MehrWS 2011/2012. RobertGiegerich. November 12, 2013
WS 2011/2012 Robert AG Praktische Informatik November 12, 2013 Haskell-Syntax: Ergänzungen Es gibt noch etwas bequeme Notation für Fallunterscheidungen, die wir bisher nicht benutzt haben. Bisher kennen
MehrInduktion nach der Länge n von x
Allgemeiner: app (rev x) y = rev1 x y füralle Listenx, y. Beweis: n = 0 : Induktion nach der Länge n von x Dann gilt: x = []. Wirschließen: app (rev x) y = app (rev []) y = app (match [] with [] -> []...)
MehrProgrammierung und Modellierung
Programmierung und Modellierung Funktionen höherer Ordnung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 6 Funktionen höherer Ordnung 1. Funktionen als Parameter und Wert von
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Manuel Eberl, Lars Hupel, Lars Noschinski Wintersemester 2014/15 Lösungsblatt Endklausur 13. Februar 2015 Einführung in
MehrEinführung in die Informatik 2
Technische Universität München Fakultät für Informatik Prof. Tobias Nipkow, Ph.D. Lars Hupel, Lars Noschinski, Dr. Jasmin Blanchette Wintersemester 2013/14 Wiederholungsklausur 24. März 2014 Einführung
Mehr1 Funktionale vs. Imperative Programmierung
1 Funktionale vs. Imperative Programmierung 1.1 Einführung Programme einer funktionalen Programmiersprache (functional programming language, FPL) bestehen ausschließlich aus Funktionsdefinitionen und Funktionsaufrufen.
MehrWS 2012/2013. Robert Giegerich. 21. November 2012
WS 2012/2013 Robert AG Praktische Informatik 21. November 2012 Funktionen als Bürger erster Klasse Funktionen definieren kann man in jeder Programmiersprache. Eine funktionalen Programmiersprache erlaubt
Mehr