(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