Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Considering our limited human resources and time constraints, it is hard to give definitive and accurate estimates of the milestones we are going to release.

Tentative Roadmap

Groovy

...

2.

...

2

Groovy 12.8 2 is our previous the latest stable branch version of Groovy. Ongoing maintenance with minor incremental improvements will be delivered throughout 2012.

Feature set

You can learn more about the feature set by reading the Groovy 1.8 release notes.

Releases

  • Groovy 1.8-final: End of April 2011 (tick)
  • Groovy 1.8.1: End of July 2011 (tick)
  • Groovy 1.8.3: Early September 2011 (tick)
  • Groovy 1.8.4: October 2011 (tick)
  • Groovy 1.8.5: End of December 2011 (tick)
  • Groovy 1.8.6: February 2012 (tick)
  • Groovy 1.8.7: July 2012 (tick)
  • Groovy 1.8.8: September 2012 (tick)

Groovy 2.0

Groovy 2.0 is the main stable branch of the Groovy programming language. 

Feature set

Release mainly geared towards the alignments with the upcoming but delayed JDK 7.

  • work related to JDK 7
    • usage of invokedynamic and annonymous classloader (JDK7 features)
    • updates for JDK 7 language features (aka Project Coin)
  • modularity of Groovy (splitting Groovy in smaller JARs on a per feature basis) and extension modules
  • static type checking AST transform
  • static compilation AST transform

Releases

  • Groovy 1.9-beta-1: July 2011 (tick)
  • Groovy 1.9-beta-3: September 2011 (tick)
  • Groovy 1.9-beta-4: October 2011 (tick)
  • Groovy 2.0-beta-1: November 2011 (tick)
  • Groovy 2.0-beta-2: December 2011 (tick)
  • Groovy 2.0-beta-3: May 2012 (tick)
  • Groovy 2.0-rc-1: end of May 2012 (tick)
  • Groovy 2.0-rc-2: early June 2012 (tick)
  • Groovy 2.0-rc-3: mid June 2012 (tick)
  • Groovy 2.0-rc-4: end of June 2012 (tick)
  • Groovy 2.0-final: end of June 2012 (tick)
  • Groovy 2.0.1: end of July 2012 (tick)
  • Groovy 2.0.2: early September 2012 (tick)
  • Groovy 2.0.4: end of September 2012 (tick)
  • Groovy 2.0.5: October 2012 (tick)
  • Groovy 2.0.6: December 2012

Groovy 2.1

Groovy 2.1 is the next version after 2.0.

Feature set

  • Completion of the invoke dynamic support, in particular usage of invoke dynamic with constructors, and properties
  • @DelegatesTo transformation for improved DSL support and static type checking
  • Annotation aliases
    • ability to create custom annotations for specific AST transforms applications
      for example: @Canonical could be a composite alias annotation for @ToString / @TupleConstructor / @EqualsAndHashCode
  • Compilation configuration scripting
    • ability to create a script that further customize compilation with customizers, per-extension, per-sourceunit, etc

Releases

  • Groovy 2.1 beta: end of December 2012
  • Groovy 2.1 RC: early January 2013
  • Groovy 2.1 final: end of January 2012

Groovy 3.0 (2013)

Feature set

  • New Meta-Object Protocol
  • Rewrite the Groovy grammar from scratch with Antlr 4 (moved to Groovy 4)
  • Retrofitting Groovy closures to accommodate JDK 8 upcoming closures for interoperability

Groovy 4.0 (2014)

Feature set

...

  • Implicit closure coercion
  • @Memoized AST transformation to add memoization to methods
  • @Log4j2 AST transformation providing a Log4j2 logging variant
  • @BaseScript AST transformation to define the script's base script class
  • A DelegatingScript base script class to delegate all property accesses and methods calls to a delegatee object
  • Refinements to the type checking extensions (precompilation of extensions, new events, dynamic calls in static context)
  • Various GDK improvements
  • Groovysh improvements with tab completion (of imports, class names, method names, file names)

Releases

  • Groovy 2.2 finale: November 2013 (tick)

Groovy 2.3 (Q2 2014)

Feature set for consideration

  • Static traits
  • Finer-grained implicit closure coercion (depending on number and type of closure arguments)
  • Closure signature hints for APIs for better type inference and IDE tooling
  • @TailRecursive AST transformation for methods
  • Class-loading-less compilation 
    • using ASM when needed, to avoid loading/initializing classes needed during the compilation
  • Stub-less joint compilation
    • to avoid various problems with the stubs and the various compilation phases

Releases

  • Groovy 2.3 beta: February-March 2014
  • Groovy 2.3 release candidates: April 2014
  • Groovy 2.3 finale: May 2014

Groovy 3.0 (Q4 2014)

Feature set for consideration

  • New Meta-Object Protocol dedicated 
    • to fully leverage "invoke dynamic" (method handles, class values, etc)
    • make the sedimented dynamic features more coherent
    • to fix the private visibility conundrum 
    • to shield libraries from "monkey patching" with a notion of "realm"
  • Rewrite the Groovy grammar from scratch with Antlr 4
    • in particular adapt to the Java 8 language features
      • lambdas
      • method references
      • default methods in interfaces
      • annotations on types
      • repeated annotations
  • Java 8 / JDK 8 support
    • lambdas
    • method references
    • default methods in interfaces
    • annotations on types
    • repeated annotations
    • stream API
    • date / time API

Releases

  • Groovy 3.0 alpha: end of Q1 2014
  • Groovy 3.0 betas: Q2 and Q3 2014
  • Groovy 3.0 release candidates: mid Q4 2014
  • Groovy 3.0 final: end of Q4 2014

Groovy 4.0 (Q4 2015)

Feature set for consideration

  • No concrete plans at the moment

Other topics we could consider for later Groovy

  • true named arguments
  • compiler related:
    • investigate the integration of the Eclipse joint compiler to replace the Groovy stub-based joint compilerinvestigate making the groovyc compiler multithreaded
  • a treturn keyword for tail calls for closures and methods
    • Incremental compiler
  • Improved runtime performance
  • ability to pass expression trees / AST nodes as parameters (see C# 4's own expression tree)
  • lexical categories
  • a symbol concept, a bit like Ruby's :symbol, or like Java interned strings
  • co-routines and/or generators
  • tail-call recursion
  • pattern matching
  • parser combinators
  • a native template engine compiling to AST (faster, correct line numbers for error reporting, optimized outputting, etc.)
  • ...