Top Banner
(Building) Flexible Functional Programming Interfaces Von Amos Treiber
25

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

Aug 14, 2019

Download

Documents

lykiet
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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