FoPra-Vortrag von Bernadette Blum und Marvin Schiller 03.04.2003

Preview:

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

Recommended