Einführung Grapefruit im Detail Abschluss Funktionale GUI-Programmierung in Haskell mit Grapefruit Wolfgang Jeltsch Brandenburgische Technische Universität Cottbus Lehrstuhl Programmiersprachen und Compilerbau Haskell in Leipzig 2, Juli 2007 Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
24
Embed
Funktionale GUI-Programmierung in Haskell mit Grapefruit · Rein funktionale GUI-Programmierung Forschung zu rein funktionaler GUI-Programmierung seit über 15 Jahren viele Bibliotheken:
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
EinführungGrapefruit im Detail
Abschluss
Funktionale GUI-Programmierung in Haskell mitGrapefruit
Wolfgang Jeltsch
Brandenburgische Technische Universität CottbusLehrstuhl Programmiersprachen und Compilerbau
Haskell in Leipzig 2, Juli 2007
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
AbschlussGUI-Programmierung in HaskellGrapefruit
GUI-Programmierung in Haskell heute
in der Praxis imperative Bibliotheken mit etwasfunktionalem Flair:
Gtk2HswxHaskell
und anderedaher nur unzureichende Nutzung der Vorteile von Haskell
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
AbschlussGUI-Programmierung in HaskellGrapefruit
Rein funktionale GUI-Programmierung
Forschung zu rein funktionaler GUI-Programmierungseit über 15 Jahrenviele Bibliotheken:
fortschrittliche Konzepte umgesetzti.A. nicht für den produktiven Einsatz geeignetviele Projekte auch wieder eingeschlafen
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
AbschlussGUI-Programmierung in HaskellGrapefruit
Grapefruit-Entwicklungsziele
Aufgreifen bewährter Ideen und Entwicklung neuer TechnikenPraxistauglichkeitnatives Look-and-FeelPlattform für Forschung zu Spezifikation und Verifikationgrafischer Oberflächen
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
AbschlussGUI-Programmierung in HaskellGrapefruit
Eckdaten zur Entwicklung
Entwicklung seit Ende Februar 2007 an der BTU Cottbusderzeitige Entwickler:
Wolfgang Jeltsch (wissenschaftlicher Mitarbeiter)Matthias Reisner (Student)
momentaner Stand:zentrale Konzepte umgesetztnoch sehr kleine Auswahl an GUI-Komponenten
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
AbschlussGUI-Programmierung in HaskellGrapefruit
Architektur
Grapefruit-Kern
Gtk2Hs-Adapter
GTK+
Gtk2Hs
Anwendung
Nutzung des Gtk2Hs-Toolkits als BasisTrennung von allgemeinem und toolkitspezifischem Code(Portierung auf andere Toolkits geplant)
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
Beispiel: MastermindTM-ähnliches Spiel Codebreaker
1243 Add
1243 3 01365 2 04623 2 01432 1 24635 1 1
Hinzufügeknopf aktiv, wenn gültigeKombination im Eingabefeldbeim Drücken dieses Knopfes Einfügender Kombination in die VersuchslisteAnzeige stellt immer Versuchezusammen mit Feedbacks darSpielfeld ist aktiv, wenn dieVersuchsliste nicht den Code enthält
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
Weitere Funktionen zur Arbeit mit Listensignalen(Auswahl)
elem :: element → ListSignal element → Signal Boollength :: ListSignal element → Signal Intreverse :: ListSignal element → ListSignal elementfilter :: (element → Bool)
→ (ListSignal element → ListSignal element)sort :: Ord element ⇒
ListSignal element → ListSignal element
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
Zeitaufwand:für Initialisierung: O(1) bzw. O(n log n)
für Aktualisierung: O(1), O(log n) bzw. O(
log2 n)
Wolfgang Jeltsch Funktionale GUI-Programmierung in Haskell mit Grapefruit
EinführungGrapefruit im Detail
Abschluss
Zusammenfassung
problemnahe Beschreibung von Oberflächen:Beschreibung zeitlicher Abläufe als zentrales KonzeptArrows und Arrow-Syntax zur Beschreibung der Interaktionvon Komponenten