(building) flexible functional programming interfaces von ... · grundlegendes paradigma:...

25
(Building) Flexible Functional Programming Interfaces Von Amos Treiber

Upload: lykiet

Post on 14-Aug-2019

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

(Building) Flexible Functional Programming Interfaces

Von Amos Treiber

Page 2: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

2

Gliederung● Funktionale Programmierung

– Einführung– Aspekte– Vergleich: Funktional vs Imperativ

● „Bending the language towards the problem“(1)● Application: Scala

– Beispiel: Html Producer● Konklusion

(1) http://www.ibm.com/developerworks/library/j-ft20/

Page 3: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

3

Funktionale ProgrammierungEinfü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

Page 4: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

4

● 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

Funktionale ProgrammierungEinführung - Geschichtliches

Bilder: http://ictville.com/wp-content/uploads/2013/02/twitter-logo.pnghttp://www.wordstream.com/images/linkedin-logo.jpg

Page 5: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

5

Funktionale ProgrammierungEinführung - Einordnung

Programmierung

Imperativ

Prozedural(FORTRAN, C)

Objektorientiert(C++, Java)

Deklarativ

Logisch(Prolog)

Funktional(Haskell, Erlang)

● Imperativ: Wie● Deklarativ: Was?

● Grundlegendes Paradigma: Evaluation von mathematischen Funktionen

● Einfacher Grundstein● Verhindern von States (imperatives Paradigma)

Page 6: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

6

● 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

Funktionale ProgrammierungAspekte

Page 7: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

7

● 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)

Funktionale ProgrammierungAspekte

(2)http://www.ibm.com/developerworks/library/j-ft1/

Page 8: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

8

Funktionale ProgrammierungAspekte

● Evaluation: strict(eager) oder non-strict(lazy)Bsp.: println( length [3,4,1/0])=> strict: error!=> lazy: 3=> „unendliche“ Datentypen

● Typ-System: typed oder untyped lamda calculus

Page 9: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

9

● 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)

Funktionale ProgrammierungAspekte – Funktional/Imperativ

(3)http://www.ibm.com/developerworks/java/library/j-ft2/index.htm

Page 10: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

10

● Closure Beispiel in Scala:

Page 11: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

11

● Closure Beispiel in Scala:

=>

Page 12: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

12

● Closure Beispiel in Scala:

=>

=>

Page 13: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

13

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

Funktionale ProgrammierungFunktional vs Imperativ

Page 14: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

14

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(1) http://www.ibm.com/developerworks/library/j-ft20/

Page 15: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

15

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.htmlhttps://upload.wikimedia.org/wikipedia/de/thumb/e/e1/Java-Logo.svg/170px-Java-Logo.svg.png

Page 16: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

16

● Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ)

● Rein funktionale Programmierung möglich● Auch eine rein Objekt-orientierte Sprache: Alles ist

ein Objekt

Application: Scala

Page 17: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

17

● Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ)

● Rein funktionale Programmierung möglich● Auch eine rein Objekt-orientierte Sprache: Alles ist

ein Objekt

Application: Scala

Programmierung

Imperativ

Prozedural(FORTRAN, C)

Objektorientiert(C++, Java)

Deklarativ

Logisch(Prolog)

Funktional(Haskell, Erlang)

Page 18: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

18

● Vereinigt Paradigmen: Objektorientiert (Imperativ) und Funktional (Deklarativ)

● Rein funktionale Programmierung möglich● Auch eine rein Objekt-orientierte Sprache: Alles ist

ein Objekt

Application: Scala

Programmierung

Imperativ

Prozedural(FORTRAN, C)

Objektorientiert(C++, Java)

Deklarativ

Logisch(Prolog)

Funktional(Haskell, Erlang)

Scala

Page 19: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

19

● Beispiel für „Bending the language towards the problem“(1)

● Baumstruktur => baumstrukturierter Code

Functional InterfacesHtml Producer

(1) http://www.ibm.com/developerworks/library/j-ft20/Bild: http://www.washington.edu/lst/help/web/html/images/tree3.jpg

Page 20: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

20

● Bottom-up:

Functional InterfacesHtml Producer

Page 21: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

21

● Top-down:

Page 22: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

22

● Top-down:

Page 23: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

23

● 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

Konklusion

(1) http://www.ibm.com/developerworks/library/j-ft20/

Page 24: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

24

Vielen Dank für die Aufmerksamkeit!

Page 25: (Building) Flexible Functional Programming Interfaces Von ... · Grundlegendes Paradigma: Evaluation von mathematischen Funktionen Einfacher Grundstein Verhindern von States (imperatives

25

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

● http://de.wikipedia.org/wiki/Dom%C3%A4nenspezifische_Sprache