Groovy – eine dynamische Ergängzung zu Java

Werbung
Groovy –
eine dynamische Ergängzung zu Java
Johannes Hellrich
12. Juni 2013
Johannes Hellrich
Groovy
1 / 30
Alternativen zu Java
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Domain Speciffic Languages
Weitere Features
Groovy in der Praxis
Status
Verbreitung
Im JULIE Lab
Einstieg
Johannes Hellrich
Groovy
2 / 30
Alternativen zu Java
Eine JVM – viele Sprachen
“The legacy of Java will be the platform, not the language.”
Martin Fowler (Mitbegründer der Agilen Softwareentwicklung)
Johannes Hellrich
Groovy
3 / 30
Alternativen zu Java
Vor-und Nachteile Javas
Stärken Javas:
“Write once, run anywhere”
Großes Ökosystem
Schwächen Javas:
Viel Code für wenig Effekt (sehr explizit)
Veraltete Methoden in Standardbibliothek
Zögerliche Weiterentwicklung
Johannes Hellrich
Groovy
4 / 30
Alternativen zu Java
Vor-und Nachteile Javas
Stärken der JVM:
“Write once, run anywhere”
Großes Ökosystem
Schwächen Javas:
Viel Code für wenig Effekt (sehr explizit)
Veraltete Methoden in Standardbibliothek
Zögerliche Weiterentwicklung
Johannes Hellrich
Groovy
4 / 30
Alternativen zu Java
Vor-und Nachteile Javas
Stärken der JVM:
“Write once, run anywhere”
Großes Ökosystem
Schwächen Javas:
Viel Code für wenig Effekt (sehr explizit)
Veraltete Methoden in Standardbibliothek
Zögerliche Weiterentwicklung
→ Trend zu alternativen Sprachen wie Clojure, Scala und Groovy
Johannes Hellrich
Groovy
4 / 30
Alternativen zu Java
Alternativen zu Java
Clojure Lisp, stark funktional, dynamisch
Scala Eigenständige Syntax, Komplexes Typensystem, Support
für funtkionales und objektorientiertes Programmieren
Groovy Syntax baut auf Java auf, berücksichtigt viele
Konventionen (JavaBeans), von populären
Skriptsprachen beeinflusst, teilweiser Support für
funtkionales Programmieren, Ziel Java zu ergänzen statt
es zu ersetzen
Johannes Hellrich
Groovy
5 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Ein Java Programm
Johannes Hellrich
Groovy
6 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Ein Groovy Programm I
Johannes Hellrich
Groovy
7 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Ein Groovy Programm II
Typische Abhängigkeiten automatisch importiert
Semikola unötig
Felder automatisch private und Methoden public
Implizite Getter/Setter (überschreibbar)
Johannes Hellrich
Groovy
8 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Ein Groovy Programm III
Slash-Syntax für reguläre Ausdrücke
Direkte Erstellung von Listen und Maps
Direkter Zugriff auf Listen und Maps
Johannes Hellrich
Groovy
9 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Ein Groovy Programm IV
Typangaben unnötig (optionaler Check während Kompilierung)
each und Varianten zur Iteration
Closures (vgl. Funktionspointer/Annonyme Innere Klassen)
Johannes Hellrich
Groovy
10 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Performance
Seit Version 2.0 bietet Groovy die @CompileStatic Annotation
Statische Kompilierung für Klassen oder einzelne Methoden
static ternary
static if
instance ternary
instance if
Groovy dynamisch
4352ms
4267ms
4577ms
4592ms
Groovy statisch
926ms
911ms
1681ms
1604ms
Java
924ms
917ms
917ms
969ms
Fibonacci Benchmark von http://objectscape.blogspot.de/
2012/08/groovy-20-performance-compared-to-java.html
Johannes Hellrich
Groovy
11 / 30
Groovy – Möglichkeiten der Sprache
Groovy und Java im Vergleich
Interoperabilität Grooy–Java
Kompiliertes Groovy ist normaler Java Bytecode mit dem
Groovy.jar als Abhängigkeit
Java Klassen können Groovy Klassen erweitern
Groovy Klassen können Java Klassen erweitern
Das Gleiche gilt für die Implementierung von Interfaces
Groovy selbst kann in ein JAR eingebunden werden, so dass am
Ziel nur Java installiert sein muss
Johannes Hellrich
Groovy
12 / 30
Groovy – Möglichkeiten der Sprache
Domain Speciffic Languages
Domain Speciffic Languages (DSL)
Möglichkeit Operationen/Zusammenhänge einer Domäne
vereinfacht zu beschreiben
Oft rein Deklarativ
Auch für Personen mit wenig Programmierkenntnissen
verwendbar
Alternative zu XML o.ä.
Johannes Hellrich
Groovy
13 / 30
Groovy – Möglichkeiten der Sprache
Domain Speciffic Languages
Beispiel ohne DSL
fragebogen = new Fragebogen(title:"Kfz-Umfrage")
frage = new Frage(typ:Fragetyp.EINFACHAUSWAHL,
frage: "Welche Marke?")
frage.antwortHinzufügen("Opel")
...
fragebogen.frageHinzufügen(frage)
frage = new Frage(typ:Fragetyp.TEXTEINGABE, frage:
"Modelbezeichnung?")
fragebogen.frageHinzufügen(frage)
frage = new Frage(typ:Fragetyp.MEHRFACHAUSWAHL,
frage: "Welche Ausstattungsmerkmale?")
frage.antwortHinzufügen("Klimaanlage")
...
fragebogen.frageHinzufügen(frage)
nach http://raik-bieniek.blogspot.de/2011/03/
interne-dsl-mit-groovy-teil-2.html
Johannes Hellrich
Groovy
14 / 30
Groovy – Möglichkeiten der Sprache
Domain Speciffic Languages
Beispiel mit DSL
fragebogen "Kfz-Umfrage"
frage einfachauswahl, "Welche Marke?"
antwort "Opel"
antwort "Renault"
antwort "BMW"
frage texteingabe, "Modelbezeichnung?"
frage mehrfachauswahl, "Welche Ausstattungsmerkmale?
antwort "Klimaanlage"
antwort "Navigationssystem"
antwort "ESP"
nach http://raik-bieniek.blogspot.de/2011/03/
interne-dsl-mit-groovy-teil-2.html
Johannes Hellrich
Groovy
15 / 30
Groovy – Möglichkeiten der Sprache
Domain Speciffic Languages
Technische Hintergründe zu DSLs
Klammern sind optional, außer sie dienen der Disambiguierung
Groovy erlaubt es (da dynamisch) auch nicht implementierte
Methoden/Felder aufzurufen
Das Verhalten für diese kann durch Metaprogrammierung (oder
bei Skripten die Bindingvariable) überschrieben werden (default:
Exception)
Johannes Hellrich
Groovy
16 / 30
Groovy – Möglichkeiten der Sprache
Weitere Features
Groovy Parallel Systems (GPars)
Bietet schon seit mehreren Jahren die für Java 8 (ursprünglich 7)
versprochenen Parallelisierungsoptionen
Unterstützt verschiedene Paradigmen:
fork/join
Prallel Arrays (parallelisiert automatisch Operationen)
Aktoren (message passing)
Agenten (serialisieren parallele Variablenzugriffe)
Dataflow (reaktiv, vgl. Tabellenkalkulation)
Kern des Systems in Java, Benutzung über API oder DSL
Offizielle Seite: http://gpars.codehaus.org/
Kurze Übersicht mit Erklärung der Paradigmen:
www.ibm.com/developerworks/library/j-gpars/
Johannes Hellrich
Groovy
17 / 30
Groovy – Möglichkeiten der Sprache
Weitere Features
GPars Beispiel
Johannes Hellrich
Groovy
18 / 30
Groovy – Möglichkeiten der Sprache
Weitere Features
Annotationen
Annotationen verändern den Parsebaum des Programmes und
können z.B. Methoden in diesen einfügen
Deklarative Möglichkeit Pattern zu benutzen ⇒ eindeutig und
wartungsfreundlich
Beispiele:
@Singleton (für Klassen)
@Immutable (für Klassen)
@Lazy (für Felder)
Johannes Hellrich
Groovy
19 / 30
Groovy – Möglichkeiten der Sprache
Weitere Features
Diverse Features
Viele Verbesserungen an der Standardbibliothek
Begrenztes Überladen von Operatoren möglich
0, “”, leere Listen usw. sind false
GroovyMarkup und GPath erlauben es XML wie normale Objekte
zu behandeln xml.node.child.text()
GStrings erlauben das einbinden von Variablen wie in der Shell:
println(“variable hat den Wert $variable”)
?.-Operator zum automatischen Abfangen von
NullPointerException bei aneinandergeketteten Methoden
Johannes Hellrich
Groovy
20 / 30
Groovy in der Praxis
Status
2. offizielle Sprache der JVM
Johannes Hellrich
Groovy
21 / 30
Groovy in der Praxis
Status
Geschichte und Supporter
Erfinder: James Strachan (2003)
Aktueller Hauptentwickler: Guillaume Laforge
Firma im Hintergrund: VMware (Cloud/Virtualisierung), davor
SpringSource (Java Spring Framework)
Johannes Hellrich
Groovy
22 / 30
Groovy in der Praxis
Verbreitung
Verbreitung
Grails Groovy-Webframework, verwendet z.B. für Sky.com,
Wired.com und Teile von LinkedIn
Gradle Alternative zu Ant/Maven, kompatibel mit Maven
Repositories, versucht die “vernünftigen” Defaults von
Maven mit der Konfigurierbarkeit von Ant zu verbinden
EPO Das Europäische Pattentamt verwerdet Groovy für eine
Data Flow Plattform, die den Austausch mit anderen
Patentämtern erleichtert
Stellen Laut LinkedIn gibt es für Groovy und Scala in
Deutschland einige wenige Stellen (2-3), für Clojure
keine, Java ist weit verbreiteter (350)
Johannes Hellrich
Groovy
23 / 30
Groovy in der Praxis
Verbreitung
Literatur
Amazon listet 47 Bücher (Java 4k)
Standardwerk: “Groovy in Action”
Alt aber gezielt für Umsteiger “Groovy für Java Entwickler”
Johannes Hellrich
Groovy
24 / 30
Groovy in der Praxis
Im JULIE Lab
Bisher: Kleinere Skripts
Genutzt für JenAge
Direkter Import von Abhängigkeiten via Maven durch Grape
Nur ca. 50% des Codes eines vergleichbaren Java Programms
Johannes Hellrich
Groovy
25 / 30
Groovy in der Praxis
Im JULIE Lab
Zukunft: Skripte / Tests !
Groovy ist ähnlich Ausdrucksstark wie Python oder Perl, dabei
aber näher an der gewohnten Java Syntax und kann direkt mit
bestehenden Java Bibliotheken interagieren ⇒ ideale
Skriptsprache für uns
Metaprogrammierung und DSLs erleichtern das Schreiben von
Tests (Mock-Objekte, Deklarativer Ansatz)
Johannes Hellrich
Groovy
26 / 30
Groovy in der Praxis
Im JULIE Lab
Zukunft: Einbindung in größere Projekte?
Groovy ist sehr geeignet um verschiedene Bibliotheken und z.B.
Nutzeranfragen zu verbinden
Entsprechendes Design ist in der C(++) Welt sehr verbreitet, wo
viele große Projekte (u.a. die meisten Spiele) intern eine
Skriptsprache wie Python oder Lua benutzen und nur
rechenaufwändige Operationen direkt in C(++) stattfinden
Ich möchte diesen Designansatz zu testen, er sollte gleichzeitig
die Modularisierbarkeit fördern (man muss autarke Java
Bibliotheken erstellen) und die Entwicklung beschleunigen
Ein möglicher Einsatzzweck: Reader/Consumer, das Konvertieren
von und nach XML ist mit Groovy sehr komfortabel und im
Vergleich zu Parsern sowieso sehr schnell
Johannes Hellrich
Groovy
27 / 30
Groovy in der Praxis
Einstieg
Einstieg
Offizielle Seite: http://groovy.codehaus.org/
Quickstart: http://groovy.codehaus.org/Quick+Start
Johannes Hellrich
Groovy
28 / 30
Groovy in der Praxis
Einstieg
Entwicklungsumgebungen
groovysh – interaktive shell
groovyConsole – rudimentäre IDE
Eclipse Plugin
Johannes Hellrich
Groovy
29 / 30
Groovy in der Praxis
Fazit
Fazit
Groovy
... ist abstrakter und hat sinnvollere Defaults als Java
... bietet viele (Syntax-)Features Jahre vor Java
... ist dabei voll Java-kompatibel und in der Syntax nah verwandt
... ist die ideale Skriptsprache in einer Java-lastigen Umgebung
... hat das Potential Java Entwicklung zu beschleunigen
Johannes Hellrich
Groovy
30 / 30
Herunterladen