FoPra-Vortrag von Bernadette Blum und Marvin Schiller
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
Kontext erste Pretty Printer für LISP 1980: Derek Oppen: Pretty Printing generischer Algorithmus am Lehrstuhl Prof. Smolka: 1994: Bernhard Latz: Eine Benutzerschnittstelle für Oz Oz-Browser in Oz 1996: Konstantin Popov: Der Oz Browser 2000: Thorsten Brunklaus: Der Oz Inspektor -... Alice- bzw. Oz-Browser in Oz
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
Komplexität von Alice-Werten graphisches Browser-Tool – Implementierung in Alice Motivation [1, 2, 3, 4] [(1, 2), (3, 4), (5, 6)] horizontale Anordnung vertikale Anordnung Alice-Werte nicht selbstbeschreibend explizite Typinformation
Flexibilität / Interaktivität Anpassung an Benutzerpräferenzen benutzerdefinerte Typen Schnelligkeit Inkrementelles Update Ziele
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
layout draw Layout Zeichnen create Erzeugung interner Darstellung inspectBrowser-Ausgabe Vom Wert zur Darstellung (Wert, Typ)
Abstrakte Beschreibung doc := simple | doc 1 ^... ^doc n | #[doc 1,..., doc n ] create: value * type doc
Beispiel Wert (1, 2) #[ ] ^ ^ ( ) 2 1, Baumstruktur
strukturelle vs. abstrakte Typen strukturelle Typenabstrakte Typen create-Funktionalität einstufige Transformations- funktionen Registrierung !
Typregistrierung doc := simple | doc 1 ^... ^ doc n | #[doc 1,..., doc n ] doc = doc | value * type register: typename * (value * type doc) unit createDoc
Beispiel #[(1, 2), (3, 4)] register(vector, createVector) register(int, createInt) (int * int) vector
Beispiel #[ ] ^ ^ #[ ], (1, 2), int * int (3, 4), int * int #[(1, 2), (3, 4)], (int * int) vector createVector
Beispiel #[(1, 2), (3, 4)], (int * int) vector doc (1, 2), int * int (3, 4), int * int createVector
Beispiel #[(1, 2), (3, 4)], (int * int) vector doc (1, 2), int * int (3, 4), int * int doc 4, int 3, int 2, int 1, int create createVector
Beispiel #[(1, 2), (3, 4)], (int * int) vector doc (1, 2), int * int (3, 4), int * int doc 4, int 3, int 2, int 1, int doc createInt create createVector
Filter (1) Eingrenzung des Darstellungsbereichs doc := simple | doc 1 ^... ^ doc n | #[doc 1,....., doc n ] | limit
Ausblenden von Teilbäumen außerhalb des Darstellungsbereichs (vom Benutzer einstellbar) Breitenlimit Tiefenlimit Filter (2)
simple : atomare Werte doc 1 ^ doc 2 ^ doc 3 : Konkatenation ZXY A #[ doc 1, doc 2, doc 3 ] : Akkumulation nur simples nicht nur simples Layout ZXY X Y Z limit:
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
Inkrementalität der Darstellung Benutzer will Teilbaum verändern
Inkrementalität der Darstellung neue Konstruktion, Layout, Zeichnen neues Layout, Zeichnen Unterbäume verschieben
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
Transientenverwaltung (1) N1 future (1) Wächter future-Wert[ N1 ]
Transientenverwaltung (2) N1 N2 future (1) (2) Wächter future-WertN2 :: [ N1 ]
Transientenverwaltung (3) XX future wurde Wert X zugewiesen Wächter future-Wert[ N2, N1 ]
Übersicht Kontext Motivation Vom Wert zur Darstellung Inkrementalität Transientenverwaltung Ausblick
Benutzung neuer Gtk-Schnittstelle in Alice automatische Typreflektion nur Wertübergabe an inspect-Funktion