Upload
lykiet
View
223
Download
0
Embed Size (px)
Citation preview
(Building) Flexible Functional Programming Interfaces
Von Amos Treiber
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/
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
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
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)
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
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/
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
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
10
● Closure Beispiel in Scala:
11
● Closure Beispiel in Scala:
=>
12
● Closure Beispiel in Scala:
=>
=>
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
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/
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
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
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)
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
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
20
● Bottom-up:
Functional InterfacesHtml Producer
21
● Top-down:
22
● Top-down:
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/
24
Vielen Dank für die Aufmerksamkeit!
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