0
What’s new in Groovy 1.6?

Guillaume Laforge
Groovy Project Manager / SpringSource
Guillaume Laforge
Groovy Project Manager — SpringSource

  >   Working on Groovy since 2003
  >   JSR-241 Spec Lead

  >  ...
What’s new in Groovy 1.6?
Article Published by InfoQ

  >   This presentation was prepared with the examples I’ve
      us...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
Groovy in a Nutshell
Simplify the Life of Java Developers
   >   Groovy is a dynamic language for the Java Virtual
       ...
Features at a Glance
Lots More Than This!
  >   Fully Object-Oriented
  >   Joint compiler: seamless Java integration
  > ...
A Taste of Groovy — Take 1
A Normal Java Program
  >   public class HelloWorld {
          private String name;
          ...
A Taste of Groovy — Take 2
A Valid Groovy Program
  >   public class HelloWorld {
          private String name;
         ...
A Taste of Groovy — Take 3
A Groovier Program!

  >   class HelloWorld {
          String name
          String greet() { ...
The Groovy Web Console
A Groovy Playground


  >   Groovy works nicely on Google App Engine
         You can also deploy ...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
Performance Improvements
Both Runtime & Compile-Time
  >   The Groovyc compiler is 3x to 5x faster
         With a clever...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
Multiple Assignment
Assign Multiple Variables at Once
   >   Newly defined variables
          def (a, b) = [1, 2]
      ...
More Optional Return
In if/else and try/catch Blocks
   >   The return keyword is optional for the last expression of
    ...
Annotation Definition
The Missing Bit of Java 5 Support

   >   Groovy support for Java 5 features is now complete with
  ...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
Meta-What?
Meta-Programming
  >   The ability of a language to modify itself

  >   Groovy 1.6 introduces AST Transformati...
AST Transformations in Groovy 1.6
Implement Patterns through Transformations
  >   Several transformations finds their way...
@Singleton
(Anti-)Pattern Revisited

   >   The evil Java singleton
          public class Evil {
               public s...
@Immutable
The Immutable… Boiler-Plate Code
  >   To properly implement immutable classes
         No mutators (state mus...
@Lazy
Not Just for Lazy Dudes!

   >   When you need to lazy evaluate / instantiate complex data
       structures for cla...
@Delegate
Not Just for Managers!

  >   You can delegate to fields of your class
         Think multiple inheritance
    ...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
Grab a Grape
Groovy Advanced Packaging Engine
  >   Helps you distribute scripts without dependencies
  >   Just declare y...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
@Bindable (1/2)
Event-Driven Made Easy
  >   Speaking of boiler-plate code… property change listeners
  >


      import j...
@Bindable (2/2)
Event-Driven Made Easy
  >   Groovy’s solution
         class MyBean {
              @Bindable String pro...
Griffon
The Swing MVC Framework

  >   Leverages Groovy’s SwingBuilder
      and Grails’ infrastructure
         http://g...
Swing Console Improvements

  >   The console can be run as an applet
  >   Code indentation support
  >   Script drag’n d...
2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone    31
                                        ...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
ExpandoMetaClass DSL
Less Repetition
  >   EMC is a way to change the behavior of types at runtime

  >   Before
        ...
Runtime Mixins
Inject New Behavior to Types at Runtime

  >   class FlyingAbility {
          def fly() { quot;I'm ${name}...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
javax.script.* Scripting APIs
Groovy Scripting Engine Built-In
   >   In Groovy 1.6, the JSR-223 / javax.script.* scriptin...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
JMX Builder (1/2)
Domain-Specific Language for JMX
  >   Simplify JMX handling with a Builder pattern approach
  >   Decla...
JMX Builder (2/2)
Examples
   >   Create a connector server
          def jmx = new JmxBuilder()
           jmx.connector...
Agenda
         >   Groovy Overview
         >   Performance Improvements
         >   Syntax Enhancements
         >   Co...
OSGi Readiness

  >   The Groovy JAR contains OSGi metadata
         Can be reused in OSGi containers out-of-the-box

  >...
Summary
Summary
Just Remember that Groovy Rocks! :-)
  >   Groovy 1.6 provides
         Important performance gains
         Eff...
What’s new in Groovy 1.6?




Guillaume Laforge
glaforge@gmail.com
Upcoming SlideShare
Loading in...5
×

Whats New In Groovy 1.6?

1,089

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,089
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Whats New In Groovy 1.6?"

  1. 1. What’s new in Groovy 1.6? Guillaume Laforge Groovy Project Manager / SpringSource
  2. 2. Guillaume Laforge Groovy Project Manager — SpringSource > Working on Groovy since 2003 > JSR-241 Spec Lead > Initiator of the Grails web framework > Co-author of Groovy in Action > Speaker: JavaOne, QCon, JavaPolis/Devoxx, JavaZone, Sun Tech Days, SpringOne/The Spring Experience, JAX, DSL DevCon, and more… 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 2 2
  3. 3. What’s new in Groovy 1.6? Article Published by InfoQ > This presentation was prepared with the examples I’ve used in my article written for InfoQ > http://www.infoq.com/articles/groovy-1-6 > Read this article for more detailed explanations of all the new features in Groovy 1.6 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 3 3
  4. 4. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 4 4
  5. 5. Groovy in a Nutshell Simplify the Life of Java Developers > Groovy is a dynamic language for the Java Virtual Machine  With a Meta-Object Protocol  Compiles down to bytecode > Open Source Apache licensed project > Relaxed grammar derived from the Java 5 grammar  Borrowed some good ideas from Smalltalk/Python/Ruby  Java 5 features out of the box: annotations, generics, static imports, enums…  Flat learning curve 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 5 5
  6. 6. Features at a Glance Lots More Than This! > Fully Object-Oriented > Joint compiler: seamless Java integration > Closures: reusable blocks of code / anonymous functions > Properties: forget about getters and setters > Optional typing: your choice! > BigDecimal arithmetic by default for floating point > Handy APIs  XML, JDBC, JMX, template engine, Swing UIs > Strong ability for authoring Domain-Specific Languages  Syntax-level “builders”  Adding properties to numbers: 10.dollars  Operator overloading: 10.meters + 20.kilometers 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 6 6
  7. 7. A Taste of Groovy — Take 1 A Normal Java Program > public class HelloWorld { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public String greet() { return quot;Hello quot; + name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName(quot;Groovyquot;); System.out.println( helloWorld.greet() ); } } 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 7 7
  8. 8. A Taste of Groovy — Take 2 A Valid Groovy Program > public class HelloWorld { private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public String greet() { return quot;Hello quot; + name; } public static void main(String[] args) { HelloWorld helloWorld = new HelloWorld(); helloWorld.setName(quot;Groovyquot;); System.out.println( helloWorld.greet() ); } } 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 8 8
  9. 9. A Taste of Groovy — Take 3 A Groovier Program! > class HelloWorld { String name String greet() { quot;Hello $namequot; } } def helloWorld = new HelloWorld(name: quot;Groovyquot;) println helloWorld.greet() 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 9 9
  10. 10. The Groovy Web Console A Groovy Playground > Groovy works nicely on Google App Engine  You can also deploy Grails applications > You can play with Groovy in the web console  http://groovyconsole.appspot.com/ 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 10 10
  11. 11. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 11 11
  12. 12. Performance Improvements Both Runtime & Compile-Time > The Groovyc compiler is 3x to 5x faster  With a clever class lookup cache > Certain online micro-benchmarks show 150% to 460% increase in performance compared to Groovy 1.5  Thanks to advanced call-site caching techniques  Beware of micro-benchmarks! > Makes Groovy one of the fastest dynamic languages available 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 12 12
  13. 13. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 13 13
  14. 14. Multiple Assignment Assign Multiple Variables at Once > Newly defined variables  def (a, b) = [1, 2] assert a == 1 assert b == 2 > Assign to existing variables  def lat, lng (lat, lng) = geocode(‘Paris’) > The classical swap case  (a, b) = [b, a] > Extra elements ⇒ not assigned to any variable > Less elements ⇒ null into extra variables 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 14 14
  15. 15. More Optional Return In if/else and try/catch Blocks > The return keyword is optional for the last expression of a method body  But if/else & try/catch didn’t return any value > def method() { if (true) 1 else 0 } assert method() == 1 > def method(bool) { try { if (bool) throw new Exception(quot;fooquot;) 1 } catch(e) { 2 } finally { 3 } } assert method(false) == 1 assert method(true) == 2 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 15 15
  16. 16. Annotation Definition The Missing Bit of Java 5 Support > Groovy support for Java 5 features is now complete with the missing annotation definition > Nothing to show here, it’s just normal Java :-) > Note that the sole dynamic language supporting annotation is… Groovy  Opens the door to EJB3 / JPA / Spring annotations / Guice / TestNG… 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 16 16
  17. 17. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 17 17
  18. 18. Meta-What? Meta-Programming > The ability of a language to modify itself > Groovy 1.6 introduces AST Transformations  Abstract Syntax Tree > Goodbye to a lot of boiler-plate technical code! > Two kinds of transformations  Global transformations  Local transformations: triggered by annotations 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 18 18
  19. 19. AST Transformations in Groovy 1.6 Implement Patterns through Transformations > Several transformations finds their way  @Singleton — okay, not really a pattern ;-)  @Immutable, @Lazy, @Delegate  @Newify  @Category and @Mixin  @PackageScope  Swing’s @Bindable and @Vetoable  Grape’s @Grab > Let’s have a look at some of them! 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 19 19
  20. 20. @Singleton (Anti-)Pattern Revisited > The evil Java singleton  public class Evil { public static final Evil instance = new Evil (); private Evil () {} Evil getInstance() { return instance; } } > In Groovy:  @Singleton class Evil {} > There’s also a « lazy » version  @Singleton(lazy = true) class Evil {} 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 20 20
  21. 21. @Immutable The Immutable… Boiler-Plate Code > To properly implement immutable classes  No mutators (state musn’t change)  Private final fields  Defensive copying of mutable components  Proper equals() / hashCode() / toString() for comparisons or for keys in maps, etc. > In Groovy  @Immutable final class Coordinates { Double lat, lng } def c1 = new Coordinates(lat: 48.8, lng: 2.5) def c2 = new Coordinates(48.8, 2.5) assert c1 == c2 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 21 21
  22. 22. @Lazy Not Just for Lazy Dudes! > When you need to lazy evaluate / instantiate complex data structures for class fields, mark them as @Lazy  class Dude { @Lazy pets = retriveFromSlowDB() } > Groovy will handle the boiler-plate code for you 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 22 22
  23. 23. @Delegate Not Just for Managers! > You can delegate to fields of your class  Think multiple inheritance  class Employee { def doTheWork() { quot;donequot; } } class Manager { @Delegate Employee slave = new Employee() } def god = new Manager() assert god.doTheWork() == quot;donequot; > Damn manager who will get all the praise… 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 23 23
  24. 24. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 24 24
  25. 25. Grab a Grape Groovy Advanced Packaging Engine > Helps you distribute scripts without dependencies > Just declare your dependencies with @Grab  Will look for dependencies in Maven or Ivy repositories > @Grab(group = 'org.mortbay.jetty', module = 'jetty-embedded', version = '6.1.0') def startServer() { def srv = new Server(8080) def ctx = new Context(srv , quot;/quot;, SESSIONS); ctx.resourceBase = quot;.quot; ctx.addServlet(GroovyServlet, quot;*.groovyquot;) srv.start() } 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 25 25
  26. 26. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 26 26
  27. 27. @Bindable (1/2) Event-Driven Made Easy > Speaking of boiler-plate code… property change listeners > import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeListener; public class MyBean { private String prop; PropertyChangeSupport pcs = new PropertyChangeSupport(this); public void addPropertyChangeListener(PropertyChangeListener l) { pcs.add(l); } public void removePropertyChangeListener(PropertyChangeListener l) { pcs.remove(l); } public String getProp() { return prop; } public void setProp(String prop) { pcs.firePropertyChanged(quot;propquot;, this.prop, this.prop = prop); } } 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 27 27
  28. 28. @Bindable (2/2) Event-Driven Made Easy > Groovy’s solution  class MyBean { @Bindable String prop } > Interesting in Griffon and Swing builder  textField text: bind { myBean.prop } > Also of interest: @Vetoable 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 28 28
  29. 29. Griffon The Swing MVC Framework > Leverages Groovy’s SwingBuilder and Grails’ infrastructure  http://griffon.codehaus.org > Don’t miss the Griffon BOF! 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 29 29
  30. 30. Swing Console Improvements > The console can be run as an applet > Code indentation support > Script drag’n drop > Add JARs in the classpath from the GUI > Execution results visualization plugin > Clickable stacktraces and error messages > Not intended to be a full-blown IDE, but handy 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 30 30
  31. 31. 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 31 31
  32. 32. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 32 32
  33. 33. ExpandoMetaClass DSL Less Repetition > EMC is a way to change the behavior of types at runtime > Before  Number.metaClass.multiply = { Amount amount -> amount.times(delegate) } Number.metaClass.div = { Amount amount -> amount.inverse().times(delegate) } > Now in Groovy 1.6  Number.metaClass { multiply { Amount amount -> amount.times(delegate) } div { Amount amount -> amount.inverse().times(delegate) } } 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 33 33
  34. 34. Runtime Mixins Inject New Behavior to Types at Runtime > class FlyingAbility { def fly() { quot;I'm ${name} and I fly!quot; } } class JamesBondVehicle { String getName() { quot;James Bond's vehiclequot; } } JamesBondVehicle.mixin FlyingAbility assert new JamesBondVehicle().fly() == quot;I'm James Bond's vehicle and I fly!quot; 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 34 34
  35. 35. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 35 35
  36. 36. javax.script.* Scripting APIs Groovy Scripting Engine Built-In > In Groovy 1.6, the JSR-223 / javax.script.* scripting engine for Groovy is bundled  import javax.script.* def manager = new ScriptEngineManager() def engine = manager.getEngineByName(quot;groovyquot;) assert engine.evaluate(quot;2 + 3quot;) == 5 > To evaluate Groovy scripts at runtime in your application, just drop the Groovy JAR in your classpath! 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 36 36
  37. 37. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 37 37
  38. 38. JMX Builder (1/2) Domain-Specific Language for JMX > Simplify JMX handling with a Builder pattern approach > Declaratively expose Java/Groovy objects as MBeans > JMX's event model support  Inline closures to create event handler & broadcaster  Closures for receiving event notifications > Provides a flexible registration policy for MBean > Exposes attribute, constructors, operations, parameters, and notifications > Simplified creation of connector servers & clients > Support for exporting JMX timers > http://groovy.codehaus.org/Groovy+JmxBuilder 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 38 38
  39. 39. JMX Builder (2/2) Examples > Create a connector server  def jmx = new JmxBuilder() jmx.connectorServer(port:9000).start() > Create a connector client  jmx.connectorClient(port:9000).connect() > Export a bean  jmx.export { bean new MyService() } > Defining a timer  jmx.timer(name: quot;jmx.builder:type=Timerquot;, event: quot;heartbeatquot;, period: quot;1squot;).start() > JMX listener  jmx.listener(event: quot;…quot;, from: quot;fooquot;, call: { event -> …}) 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 39 39
  40. 40. Agenda > Groovy Overview > Performance Improvements > Syntax Enhancements > Compile-Time Metaprogramming > The Grape Module System > Swing-Related Improvements > Runtime Metaprogramming Additions > JSR-223 Scripting Engine Built-In > JMX Builder > OSGi Readiness 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 40 40
  41. 41. OSGi Readiness > The Groovy JAR contains OSGi metadata  Can be reused in OSGi containers out-of-the-box > Tutorials on Groovy and OSGi  http://groovy.codehaus.org/OSGi+and+Groovy  Will show you how to load Groovy as a service, write, publish and consume Groovy services, and more 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 41 41
  42. 42. Summary
  43. 43. Summary Just Remember that Groovy Rocks! :-) > Groovy 1.6 provides  Important performance gains  Efficient compile-time metaprogramming hooks  New useful features (JMX, javax.script.*, etc.)  A script dependencies system  Various Swing-related improvements  Several runtime metaprogramming additions > Get it now!  http://groovy.codehaus.org/Download 2009 CommunityOne Conference: EAST | developers.sun.com/events/communityone 43 43
  44. 44. What’s new in Groovy 1.6? Guillaume Laforge glaforge@gmail.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×