20
Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner .NET Projektstudium, BTU Cottbus

Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Embed Size (px)

Citation preview

Page 1: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

LibraJune 2005 Community Technology Preview

Peter Bachmann

Kirill OsenkovSteffen Büchner

.NET Projektstudium, BTU Cottbus

Page 2: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Libra als Framework...

• ...für Code Repräsentierung

• operiert mit Abstrakten Syntax-Bäumen• interne Darstellung: Hierarchien von Blöcken

while

< ++

a

AnweisungenBedingung

a 10

while (a < 10)

{

a++;

}

Page 3: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Libra als Forschung

• Suche nach bereits existierenden Ansätzen

• Idee existiert bereits seit 1970: syntax-gesteuerter Code Editor

• Bisher existierende Lösungen unpraktisch• Idee aber dennoch richtig: Intentional Programming

Page 4: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Libra als Experiment

• Spielwiese zum Ausprobieren

• Suche nach einer bequemeren Code Darstellung

• Analyse von Benutzbarkeit existierender Entwicklungsumgebungen

Page 5: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Projektverlauf

Teilprojekte:

1. Canvas.dll (grafische Bibliothek)

2. LibraCore.dll (Definition von Blöcken)

3. LibraClient.exe (Test-Umgebung für C# Code)

4. XmlEditor.exe (Test-Umgebung für XML)

Heute:

• Vier Projekte in C#.NET (Visual Studio 2005 Beta 2)

• 11 400 C# Code Zeilen

• 180 Klassen und Schnittstellen

Page 6: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Canvas.dll• Status: fast fertig implementiert

• stellt ein .NET UserControl “DrawWindow” zur Verfügung, womit man schnell und unabhängig von einer konkreten Grafikbibliothek zeichnen kann

Page 7: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

DrawWindow Eigenschaften

• gepuffert (double-buffering)

• verwendet intern wahlweise GDI oder GDI+ (Benutzung von OpenGL und DirectX später auch möglich: flexible Schnittstelle IRenderer)

• erweiterbare Scrollbar auf Basis von Shapes

Es fehlen noch die Funktionen zum Arbeiten mit Bitmaps.

Page 8: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Canvas Shapes

Canvas.dll stellt auch “Shape” Funktionalität zur Verfügung:

• Basisklassen für visuelle Objekte, die auf DrawWindow gezeichnet werden können

Page 9: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

LibraCore.dll

• stellt Klassen zur Verfügung, mit welchen man Blockhierachien modellieren kann• zu jeder Blockhierarchie existiert ein RootBlock, der als Repräsentant für die gesamte Hierarchie dient• beinhaltet CodeWindow, welches beliebige modellierte Blockhierarchien, mittels DrawWindow, visualisieren kann

Page 10: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

CodeWindow

Page 11: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Klassenhierarchie

Page 12: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

• IBlock unterstützt elementare Operationen auf Blöcken

• Beispiele:

AcceptVisitor(IVisitor v)

Parent, Root und Draw()

• AbstractBlock ist die Standardimplementierung, von der alle weiteren Blöcke in Libra erben

•AbstractContainerBlock ist die Standardbasisklasse für alle Blöcke die Kinder enthalten können (z.B. NamespaceBlock)

Basisschnittstelle IBlock

Page 13: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Entwurfsmuster: Visitor

• um die Funktionalitäten kapseln zu können und schnell und übersichtlich neue hinzuzufügen, haben wir uns für dieses Entwurfsmuster entschieden

• durch Visitoren kann man neue Funktionalitäten, wie z.B. das Kompilieren oder die statische Analyse, hinzufügen ohne an der Klassenhierarchie etwas ändern zu müssen

•streng typisierte Softwarearchitektur, so ist kein Casting nötig, alles zur Kompilierungszeit bekannt

•Beispiele: DrawVisitor, LayoutVisitor und XMLGeneratingVisitor

Page 14: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Editieren von Blockhierarchien

Page 15: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

ActionManager

• IAction stellt eine Transaktion auf Blöcken dar

• der ActionManager verwaltet Objekte vom Typ IAction, er speichert diese chronologisch und stellt so eine sehr flexible und einfach zu nutzende Basis für Undo/Redo zur Verfügung

• alle Transaktionen auf Blöcken werden durch Actions, wie z.B. AddBlocksAction und RemoveBlockAction gekapselt (ausgelagert), und somit können wir neue Transaktionen hinzufügen ohne an den Basisklassen von LibraCore etwas ändern zu müssen

Page 16: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Entwurfsmuster: Composite

• durch dieses Entwurfsmuster lassen sich sich sehr komplexe Transaktionen als einfaches IAction auffassen somit bleibt die komplexität vor dem späteren Verwender von LibraCore verborgen

• dieses Entwurfsmuster wird auch bei den Block-Klassen verwendet (AbstractContainerBlock)

Page 17: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Anwendungbeispiele

•Libra ist als Framework für Quelltexteditoren aller Art gedacht

•(fast) jede Programmiersprache lässt sich als eine (Libra-) Blockhierarchie modellieren

•Zum Experimentieren und als Präsentationsbeispiel implementieren wir parallel die Unterstützung für zwei Sprachen: C# und XML

Page 18: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Wie geht’s weiter?

Mit C# und XML Testprojekten muss noch experimentiert werden, um die notwendige Funktionalität zu gewährleisten (z.B. Benutzbarkeit, Arbeit mit Tastatur und Maus, Navigation, Selektierung, Drag & Drop, etc.).

Erst nachdem die Testbeispiele zufriedenstellend laufen, werden die jeweiligen Hierarchien um fehlende Blöcke ergänzt.

So wird sichergestellt, dass die meiste Arbeit vor dem “Losprogrammieren” passiert – so erleichtert man sich die Aufgabe, Hierarchien am Ende zu ergänzen.

Idealerweise kann der C# Quellcode für die fehlenden Blöcke eventuell automatisch nach der vorgegebenen Grammatik erzeugt werden.

Als Super-Aufgabe (für viele Jahre) könnte man sich die automatisierte Generierung von Libra-basierten Editoren für beliebige Programmiersprachen vorstellen, wenn die Grammatik vorgegeben ist.

Page 19: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

Aber das ist noch nicht alles...

Blöckenhierarchie alleine reicht nicht, um einen guten Editor zu bauen.

Man braucht noch:

• Name resolution system, Typ-Informationen

• Integration mit modernen Entwicklungsumgebungen

• Compiler, Debugger, statische Analyse

• und vieles mehr

Das ganze ist natürlich extrem aufwendig, aber... machbar!

Das Wesentliche ist der neue Ansatz, neue Art und Weise mit Code zu arbeiten. Gerade dies soll Libra-Framework demonstrieren.

Page 20: Libra June 2005 Community Technology Preview Peter Bachmann Kirill Osenkov Steffen Büchner.NET Projektstudium, BTU Cottbus

expect Libra Beta 1...

...coming soon...