Upload
kriemhild-rehrig
View
105
Download
0
Embed Size (px)
Citation preview
FoPra-Vortrag von
Bernadette Blum und Marvin Schiller
03.04.2003
Ü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
inspect
Browser-Ausgabe
Vom Wert zur Darstellung
(Wert, Typ)
Abstrakte Beschreibung
doc := simple | doc1 ^ ... ^docn
| #[doc1, ... , docn ]
create: value * type doc
Beispiel
Wert(1, 2)
#[ ]
^
^
“(“ “)“
“2“
“1“ “,“
Baumstruktur
strukturelle vs. abstrakte Typen
strukturelle Typen abstrakte Typen
create-Funktionalität einstufigeTransformations-
funktionen
Registrierung !
Typregistrierung
doc := simple
| doc1 ^ ... ^ docn
| #[doc1, ... , docn ]
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‘
doc‘ 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‘
doc‘ doc‘
4,int
3,int
2,int
1,int
doc
doc doc
docdocdoc doc
createInt
create
createVector
Filter (1)
Eingrenzung des Darstellungsbereichs
doc := simple
| doc1 ^ ... ^ docn
| #[doc1,....., docn ]
| limit
Ausblenden von Teilbäumen außerhalb des Darstellungsbereichs (vom Benutzer einstellbar)
Breitenlimit
Tiefenlimit
Filter (2)
simple : atomare Werte
doc1 ^ doc2 ^ doc3 : Konkatenation ZX Y
A
#[ doc1 , doc2 , doc3 ] : Akkumulation
• nur simples
• nicht nur simples
Layout
ZX Y
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)
(1)Wächter future-Wert [ N1 ]
Transientenverwaltung (2)
N1
N2
future
(1) (2)
(2)Wächter future-Wert N2 :: [ N1 ]
Transientenverwaltung (3)
X
X
future wurde Wert X zugewiesen
Wächter future-Wert [ N2 , N1 ]
Übersicht
Kontext
Motivation
Vom Wert zur Darstellung
Inkrementalität
Transientenverwaltung
Ausblick
Ausblick
Benutzung neuer Gtk-Schnittstelle in Alice
automatische Typreflektion
nur Wertübergabe an inspect-Funktion