SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Gregor Biswanger
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?Robin Sedlaczek
 
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best PracticesGFU Cyrus AG
 
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript   Imperative Programmierung Mit Der Delphi KonsoleSchüLerscript   Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript Imperative Programmierung Mit Der Delphi Konsoleguestcf99
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
 

Was ist angesagt? (9)

C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Codesmells
CodesmellsCodesmells
Codesmells
 
Froscamp2010_padre
Froscamp2010_padreFroscamp2010_padre
Froscamp2010_padre
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
 
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript   Imperative Programmierung Mit Der Delphi KonsoleSchüLerscript   Imperative Programmierung Mit Der Delphi Konsole
SchüLerscript Imperative Programmierung Mit Der Delphi Konsole
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 

Ähnlich wie Architektur einer Eclipse DLTK IDE für Clojure

The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?Robin Sedlaczek
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Rubyschlauch
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesGregor Biswanger
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in ActionRobin Sedlaczek
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Robin Sedlaczek
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureSascha Koch
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickPhilipp Burgmer
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionRobin Sedlaczek
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETGFU Cyrus AG
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtAndreas Schreiber
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisJörn Dinkla
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumNicholas Dille
 

Ähnlich wie Architektur einer Eclipse DLTK IDE für Clojure (20)

The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAYPLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Ruby
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit Clojure
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NET
 
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen IBit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
GPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der PraxisGPU-Computing mit CUDA und OpenCL in der Praxis
GPU-Computing mit CUDA und OpenCL in der Praxis
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 

Architektur einer Eclipse DLTK IDE für Clojure

  • 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.
  • 4. 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
  • 5. Aufbau eines DLTK Script Projects  IScriptModel  IScriptProject  IScriptFolder  ISourceModule  IType  IField  IMethod  IProjectFragment
  • 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