(Building) Flexible Functional Programming Interfaces. Von Amos Treiber

Ähnliche Dokumente
Funktionale Programmierung Einführung

Funktionale Programmiersprachen

Funktionale Programmierung (in Clojure)

Programmierparadigmen und Sprachen

Haskell for Hackers... or why functional programming matters

1. Grundkonzepte der logischen Programmierung 2. Syntax von Prolog 3. Rechnen in Prolog. IV.1 Grundkonzepte der logischen Programmierung - 1 -

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Beispiel: Hamming-Folge Erzeuge eine Folge X = x 0,x 2,... mit folgenden Eigenschaften: 1. x i+1 > x i für alle i

Funktionale Programmierung

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Einführung Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Ein Blick über den Tellerrand Funktionale Ideen in der praktischen Programmierung

Objekt-Funktionale Programmierung. am Beispiel von SCALA. Thorsten Jolitz

Programmiersprachen Proseminar

Programmierung Paradigmen und Konzepte

Gliederung. Programmierparadigmen. Aussagen. Aktuelle Entwicklungen. Aktuelle Entwicklungen. Aktuelle Entwicklungen Aussagen Köpfe. D.

Informatik Programmiersprachen eine kurze Übersicht

Sieben Wochen, sieben Sprachen

1 Funktionale vs. Imperative Programmierung

Inhalt. n Algorithmus. n Euklidscher Algorithmus. n Sortieren. n Programmiersprachen. n Entwicklungsschritte eines Programms.

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

Einführung in die Informatik

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

Scala & Lift. Ferenc Lajko

Notationen für Transformationsregeln

Modellierung und Programmierung 1

Inhaltsverzeichnis. Lothar Piepmeyer. Grundkurs funktionale Programmierung mit Scala ISBN:

1 Inhalt der Vorlesung B-PS1

Vorlesung Programmierung

Prof. Dr. Jürgen Giesl Lehr- und Forschungsgebiet Informatik 2. Proseminar - 1 -

Praxisorientierte Einführung in C++ Lektion: "Allgemeines"

Vorkurs Informatik WiSe 17/18

Computergrundlagen Turingmaschinen und Programmierung

Übersicht. Einführung in die Funktionale Programmierung: Einleitung & Motivation. Klassifizierung von Programmiersprachen (1)

Vorlesung Programmierung

Einführung in die Programmierung mit Java

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Lösungsvorschlag Serie 2 Rekursion

Vorlesung Programmierung

Vorkurs Informatik WiSe 16/17

Vorlesung Programmieren

Vorlesung Programmieren. Programmiersprachen-Paradigmen. Programmierparadigmen. Eine Programmiersprache dient dem Aufschreiben von Algorithmen

vii 4 t.scheme: Funktionale Programmierung Funktionen als Daten erster Klasse

Mixed Language Programming POLINA RAJKO - MIXED LANGUAGE PROGRAMMING 1/35

Programmierparadigmen: Funktionale Programmierung

Vorlesung Programmierung

SOLID für.net und JavaScript

JVM Functional Language Battle

10. Programmierungs-Phase: Objektorientierung Software Engineering

Bru ckenkurs Programmieren

Java Einführung Vererbung und Polymorphie. Kapitel 13

Anwendungen der Logik: Deklarative bzw. Logik-Programmierung in PROLOG

Software Entwicklung 1

Einführung in die Programmierung

13. Funktionale Konzepte in Java

11. Funktionale Konzepte in Java

Logische Programmierung

7. Programmierungs- Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Funktionale Programmierung

Das Doppelpack für die Informatik

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung in Funktionale Programmierung. Klassifizierung von Programmierparadigmen und -sprachen. Einleitung & Motivation

Aspektorientierte Programmierung. Modellierung und Programmierung 2

Matlab. Alexandra Mehlhase & Felix Böckelmann. 26. Juni Analysetechniken in der Softwaretechnik Technische Universität Berlin SS 2008

FORTRAN77. eine höllische Programmiersprache. Christian Sternecker. Sommersemester TU-München

Paradigmen zur Algorithmenbeschreibung

JVM Functional Language Battle

2. JAVA-Programmierung. Informatik II für Verkehrsingenieure

Multiparadigmen- Programmiersprachen

Einführung in die Programmierung

Scala. Funktionale (Zustandslose) Objekte

JVM Functional Language Battle

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 1. Einführung und Grundbegriffe

Konsequent agile Entwicklung mit funk4onaler Programmierung. Michael Sperber

Erste Java-Programme (Scopes und Rekursion)

Paradigmen zur Algorithmenbeschreibung

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe

Software-Entwicklung

Programmierparadigmen

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Vererbung und Traits

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Grundlagen der Programmierung in C Klassen

XML Verarbeitung mit einer in Haskell eingebetteten DSL. Manuel Ohlendorf (xi2079)

H.1 FORMI: An RMI Extension for Adaptive Applications H.1 FORMI: An RMI Extension for Adaptive Applications

Informatik-Seminar. Auftakt. Informatik. Grundlagen

Informatik. Studiengang Chemische Technologie. Michael Roth Hochschule Darmstadt -Fachbereich Informatik- WS 2012/2013.

Transkript:

(Building) Flexible Functional Programming Interfaces Von Amos Treiber

Gliederung Funktionale Programmierung Einführung Aspekte Vergleich: Funktional vs Imperativ Bending the language towards the problem (1) Application: Scala Beispiel: Html Producer Konklusion 2 (1) http://www.ibm.com/developerworks/library/j-ft20/

Funktionale Programmierung Einführung - Geschichtliches 1930er: Lamda-Kalkül 1950er: Lisp λ 1977: Can Programming Be Liberated From the von Neumann Style? 1987: Haskell In den letzten Jahren gesteigertes Interesse: Scala Clojure Functional Java Bild: http://upload.wikimedia.org/wikipedia/commons/4/43/haskell-logo-variation.png 3

Funktionale Programmierung Einführung - Geschichtliches Früher eher in akademischen Bereichen populär Heute: mehr Nutzung in Industrie Scala: Twitter und Erlang: Telekommunikationssysteme in 1980er, ähnliche Nutzung bei T-mobile und Facebook Lisp in frühen Apple Macintosh Computern Bilder: http://ictville.com/wp-content/uploads/2013/02/twitter-logo.png http://www.wordstream.com/images/linkedin-logo.jpg 4

Funktionale Programmierung Einführung - Einordnung Imperativ: Wie Deklarativ: Was? Programmierung Imperativ Deklarativ Prozedural (FORTRAN, C) Objektorientiert (C++, Java) Logisch (Prolog) Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Funktional (Haskell, Erlang) Verhindern von States (imperatives Paradigma) 5

Funktionale Programmierung Aspekte Keine States => Keine Variablen Rekursion statt Iteration Coding Style: Komposition von Funktionen Keine einzelnen Schritte => Reihenfolge egal => Resultat wird nicht benötigt? Kann gelöscht werden 6

Funktionale Programmierung Aspekte Higher-order functions: Funktionen als Parameter oder als Rückgabe => Annahmen über Komposition des Programms => dynamische und adaptive Systeme First-class functions: Funktionen wie Objekt behandelt => Focus on results, not steps (2) (2)http://www.ibm.com/developerworks/library/j-ft1/ 7

Funktionale Programmierung Aspekte Evaluation: strict(eager) oder nonstrict(lazy) Bsp.: println( length [3,4,1/0]) => strict: error! => lazy: 3 => unendliche Datentypen Typ-System: typed oder untyped lamda calculus 8

(3)http://www.ibm.com/developerworks/java/library/j-ft2/index.htm Funktionale Programmierung Aspekte Funktional/Imperativ Closure: A closure is a function that carries an implicit binding to all the variables referenced within it (3) Einfach: Funktion, die Variablen/Objekte außerhalb ihres Scopes nutzt Oft mit Higher-order functions wie map genutzt, um Mechanismen portabel zu machen Allow the runtime to manage state (3) 9

Closure Beispiel in Scala: 10

Closure Beispiel in Scala: => 11

Closure Beispiel in Scala: => => 12

Funktionale Programmierung Funktional vs Imperativ States (pure:) nicht existent Existent und wichtig Manipulation First class functions Instanzen von Strukturen/Klassen Reihenfolge unwichtig wichtig Flow control Funktionsaufrufe (Rekursion) Schleifen, Function (method) calls CPU-Verbrauch Eher höher Eher niedriger Vorteile Keine Fehler durch States, einfache Abstrahierung => besseres structured Programming (Deklarativ), einfaches Testen durch Isolation, In der Regel kürzer Viele Befehle/Datenstrukturen (z.b. Arrays) so in Hardware implementiert, meist intuitiver, stärkere Anwendung und Popularität in der Industrie 13

Functional Interfaces Bending the language towards the problem (1) Arbeit vieler Entwickler: Problemstellung muss in Sprache übersetzt werden Sprachen erzwingen Herangehensweise Domain-specific language (DSL) => [Developers] bend the language more towards their problem rather than the problem toward their language (1) Eines der Konzepte von Scala 14 (1) http://www.ibm.com/developerworks/library/j-ft20/

Application: Scala Entwickelt am École polytechnique fédérale de Lausanne Ab 2001: Scala Scala = Scalable language Läuft auf JVM Schöpfer Martin Odersky: 2-Fache Reduktion in Aufwand zu Java (4) (4)http://al3x.net/2008/05/10/scala-lift-off-martin-odersky-keynote.html Bilder: http://al3x.net/2008/05/10/scala-lift-off-martin-odersky-keynote.html https://upload.wikimedia.org/wikipedia/de/thumb/e/e1/java-logo.svg/170px-java- Logo.svg.png 15

Application: Scala Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ) Rein funktionale Programmierung möglich Auch eine rein Objekt-orientierte Sprache: Alles ist ein Objekt 16

Application: Scala Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ) Rein funktionale Programmierung möglich Auch eine rein Objekt-orientierte Sprache: Alles ist ein Objekt Programmierung Imperativ Deklarativ Prozedural (FORTRAN, C) Objektorientiert (C++, Java) Logisch (Prolog) Funktional (Haskell, Erlang) 17

Application: Scala Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ) Rein funktionale Programmierung möglich Auch eine rein Objekt-orientierte Sprache: Alles ist ein Objekt Programmierung Imperativ Deklarativ Prozedural (FORTRAN, C) Objektorientiert (C++, Java) Logisch (Prolog) Scala Funktional (Haskell, Erlang) 18

Functional Interfaces Html Producer Beispiel für Bending the language towards the problem (1) Baumstruktur => baumstrukturierter Code (1) http://www.ibm.com/developerworks/library/j-ft20/ Bild: http://www.washington.edu/lst/help/web/html/images/tree3.jpg 19

Functional Interfaces Html Producer Bottom-up: 20

Top-down: 21

Top-down: 22

Konklusion Funktionale Programmierung: Paradigma, dessen Kern (mathematische) Funktionen sind und das States vermeidet Scala ist eine moderne funktionale Sprache, die imperative und funktionale Paradigmen vereinigt Bending the language toward the problem (1): Mit Scala Tools und Interfaces erstellen, die dem Problem entsprechen (1) http://www.ibm.com/developerworks/library/j-ft20/ 23

Vielen Dank für die Aufmerksamkeit! 24

Quellen http://www.scala-lang.org/node/104 http://www.ibm.com/developerworks/library/j-ft1/ http://www.ibm.com/developerworks/library/j-ft20/ http://en.wikipedia.org/wiki/functional_programming http://en.wikipedia.org/wiki/closure_%28computer_science%29 http://docs.scala-lang.org/de/tutorials/scala-for-java-programmers.html http://en.wikipedia.org/wiki/scala_(programming_language) http://en.wikipedia.org/wiki/lamda_calculus http://al3x.net/2008/05/10/scala-lift-off-martin-odersky-keynote.html http://developmentality.wordpress.com/2010/07/15/an-introduction-to-scala/ http://de.wikipedia.org/wiki/first-class-funktion http://de.wikipedia.org/wiki/lazy_evaluation http://msdn.microsoft.com/en-us/library/bb669144.aspx 25 http://de.wikipedia.org/wiki/dom%c3%a4nenspezifische_sprache