0
Guillaume Laforge / Groovy Project Manager / SpringSource


What’s new in Groovy 1.6?
All the novelties of the latest vers...
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’...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
Groovy in a Nutshell
Simplify the Life of Java Developers

      Groovy is a dynamic language for the Java Virtual
  >
   ...
Features at a Glance
     Fully Object-Oriented
 >

     Joint compiler: seamless Java integration
 >

     Closures: reus...
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 ...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
Performance Improvements
Both Runtime & Compile-Time

     The Groovyc compiler is 3x to 5x faster
 >

         With a cle...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
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
  >
   ...
Annotation Definition
The Missing Bit of Java 5 Support


      Groovy support for Java 5 features is now complete
  >
   ...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
Meta-What?
Meta-Programming

     The ability of a language to modify itself
 >



     Groovy 1.6 introduces AST Transfor...
AST Transformations in Groovy 1.6
Implement Patterns through Transformations

      Several transformations finds their wa...
@Singleton
(Anti-)Pattern Revisited

      The evil Java singleton
  >
          public class Evil {
      

            ...
@Immutable
The Immutable… Boiler-Plate Code

      To properly implement immutable classes
  >

          No mutators (sta...
@Lazy
Not Just for Lazy Dudes!


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

      You can delegate to fields of your class
  >

          Think multiple inheritance...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
Grab a Grape
Groovy Advanced Packaging Engine

      Helps you distribute scripts without dependencies
  >

      Just dec...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
@Bindable (1/2)
Event-Driven Made Easy

      Speaking of boiler-plate code… property change listeners
  >
      import ja...
@Bindable (2/2)
Event-Driven Made Easy

      Groovy’s solution
  >

          class MyBean {
      
              @Binda...
Griffon
The Swing MVC Framework


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


   The console can be run as an applet
 >

 > Code indentation support

 > Script drag’n drop...
31
     31
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
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 ${...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
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 Enha...
JMX Builder (1/2)
Domain-Specific Language for JMX

      Simplify JMX handling with a Builder pattern approach
  >

     ...
JMX Builder (2/2)
Examples
     Create a connector server
 >

         def jmx = new JmxBuilder()
     
         jmx.conn...
Agenda
             Groovy Overview
         >

             Performance Improvements
         >

             Syntax Enha...
OSGi Readiness


     The Groovy JAR contains OSGi metadata
 >

         Can be reused in OSGi containers out-of-the-box
 ...
Guillaume Laforge / Groovy Project Manager / SpringSource


Summary



                                                   ...
Summary
Just Remember that Groovy Rocks! :-)

      Groovy 1.6 provides
  >

          Important performance gains
      ...
Guillaume Laforge / Groovy Project Manager / SpringSource


Question & Answers



                                        ...
Upcoming SlideShare
Loading in...5
×

Whats New In Groovy 1.6?

4,061

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,061
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
75
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Transcript of "Whats New In Groovy 1.6?"

  1. 1. Guillaume Laforge / Groovy Project Manager / SpringSource What’s new in Groovy 1.6? All the novelties of the latest version! 1
  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… 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 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 > 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  5 5
  6. 6. Features at a Glance Fully Object-Oriented > Joint compiler: seamless Java integration > Closures: reusable blocks of code / anon 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 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() ); } } 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() ); } } 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() 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/  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 > 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 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 > 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 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 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… 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 > 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  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! > 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 {}  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 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 > 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… > 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 > 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() } 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 > 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); } } 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 > 28 28
  29. 29. Griffon The Swing MVC Framework Leverages Groovy’s SwingBuilder > and Grails’ infrastructure http://griffon.codehaus.org  Don’t miss the next session on! > 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 > 30 30
  31. 31. 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 > 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) } } 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; 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 > 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! 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 > 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 > 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 -> …}) 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 > 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 41 41
  42. 42. Guillaume Laforge / Groovy Project Manager / SpringSource Summary 42
  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  43 43
  44. 44. Guillaume Laforge / Groovy Project Manager / SpringSource Question & Answers 44
  1. A particular slide catching your eye?

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

×