Architektur einer Eclipse DLTK IDE für Clojure
Upcoming SlideShare
Loading in...5
×
 

Architektur einer Eclipse DLTK IDE für Clojure

on

  • 2,936 views

Präsentation DemoCamp Berlin, 23.11.2009

Präsentation DemoCamp Berlin, 23.11.2009

Statistics

Views

Total Views
2,936
Views on SlideShare
2,928
Embed Views
8

Actions

Likes
0
Downloads
14
Comments
0

1 Embed 8

http://www.slideshare.net 8

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Architektur einer Eclipse DLTK IDE für Clojure Architektur einer Eclipse DLTK IDE für Clojure Presentation Transcript

  • 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
  • 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.
  • 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.
  • Architektur: ScriptBuilder Hello.clj ScriptBuilder(ScriptNature) Source Source Parser ElementParser AST ScriptModel defn Demo-project hello [] Hello.clj hello[n] n print Hello1.clj hello2[n] n hello2[n] ANTLR DLTK
  • Aufbau eines DLTK Script Projects  IScriptModel  IScriptProject  IScriptFolder  ISourceModule  IType  IField  IMethod  IProjectFragment
  • 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
  • DLTK AST  Verwendung nicht zwingend erforderlich  Verwendung sehr empfehlenswert  meisten Features mit AST nutzbar  Einsatz von EMF für AST wird evaluiert
  • 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
  • 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
  • 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 ;-)
  • 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!
  • 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
  • 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
  • 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/
  • 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