1. Architektur einer Eclipse DLTK
IDE für Clojure
http://kenai.com/projects/clojure-ide
Matthias Köster, matthias.koester@gmail.com
Eclipse DemoCamp Berlin, 23.11.2009
2. Was ist Clojure?
http://clojure.org/
General-purpose, dynamic programming
language that targets the Java Virtual Machine
(and CLR...)
interactive development via REPL
efficient and robust infrastructure for
multithreaded programming
compiled language - compiles directly to JVM
bytecode, yet remains completely dynamic
easy access to the Java frameworks
optional type hints and type inference, to ensure
that calls to Java can avoid reflection.
3. Was ist DLTK?
http://www.eclipse.org/dltk/
Dynamic Languages Toolkit (DLTK) is a tool for
vendors, researchers, and end-users who rely on
dynamic languages.
set of extensible frameworks designed to reduce
the complexity of building full featured
development environments for dynamic
languages such as PHP and Perl.
6. Wie wird das Script Model
erzeugt?
ISourceParser parst Datei in eine ModuleDeclaration
ModuleDeclaration Container des DLTK AST
ISourceParser über Extension Point einhängen,
den Rest erledigt DLTK dann
Außerdem ISoureElementParser notwendig
Zweck mir unklar, aber Implementierung trivial ;-)
Ebenfalls über Extension Point einhängen
7. DLTK AST
Verwendung nicht
zwingend erforderlich
Verwendung sehr
empfehlenswert
meisten Features mit
AST nutzbar
Einsatz von EMF für AST
wird evaluiert
8. Erzeugung des ASTs
ANTLR generierter Parser
Zwei Phasen
ANTLR AST erzeugen
Mit Tree Grammar ANTLR AST in DLTK AST
konvertieren
Warum so umständlich?
Wollte schon immer eine ANTLR TreeGrammar
schreiben ;-)
Codegenerierung automatisch mit ANTLR IDE Plugin
9. Gratis Features mit AST DLTK
Outlinepage ableiten von
org.eclipse.dltk.internal.ui.editor.OutlinePage
Leere Factorymethode doCreateOutlinePage aus
org.eclipse.dltk.internal.ui.editor.ScriptEditor
überschreiben
ScriptExplorer automatisch
Clojure Perspektive definieren s.d. ScriptExplorer
sichtbar
Extension Point
org.eclipse.dltk.ui.modelLabelProvider
für Labels implementieren
10. Syntax Highlighting
Preference Page für
Syntax Coloring mit DLTK
Klassen
Syntax Highlighting
Klassisch mit
org.eclipse.jface.text.rul
es.IRule
ANTLR Lexer
Code abgeguckt
bei Xtext ;-)
11. Was der Editor sonst noch kann
ClojureEditor abgeleitet von
org.eclipse.dltk.internal.ui.editor.ScriptEditor
org.eclipse.jface.text.IAutoEditStrategy
Automatisch Klammern schließen
org.eclipse.jface.text.source.ICharacterPairMatcher
Markieren der öffnendenschließenden Klammer
Go To Matching Bracket
Go To Declaration
Und ja, Clojure ist ein LISP!
12. Code Completion
Informationen aus dem ScriptModel beziehen
Definierte Funktionen und Variablen
ScriptModel auch für Externe ModuleLibs
verfügbar
Extension Points
org.eclipse.dltk.core.completionEngine
org.eclipse.dltk.ui.scriptCompletionProposalComput
er
13. Fazit DLTK
✔ Mächtiges Framework
✔ Wenig Boilerplate Code
✔ Type Interference
✔ Sourcecode für mitgelieferte IDEs (TCL, Ruby,
Python) hilfreich
✔ Mit wenig Code (~ 3000 LOC) viel erreicht
✗ Sehr kleine Community
✗ Wenig aktuelle Dokumentation
14. Fazit ANTLR
✔ Mächtiges Parser Framework
✔ LL(*) Grammatik und generierter Code für
Menschen gut nachvollziehbar
✔ Treegrammar sehr interessant für Multipass
Compiler
✔ Gute Dokumentation
✔ Buch ”ANTLR Reference” von Terence Parr
✔ Sehr gutes Eclipse Plugin verfügbar
http://antlrv3ide.sourceforge.net/
15. Fazit Clojure
✔ Mein erstes Lisp
✔ Hat nicht so viele gleiche Klammern ;-)
✔ Funktionale Programme einfacher test- und
verifizierbar
✔ Erlang inspiriertes Agent Konzept sehr interessant
✔ Buch ”Programming Clojure” von Stuart Halloway
✔ Obwohl nocht recht jung, lebhafte Community
✔ Webframework compojure ~ Ruby on Rails