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.

Groovy 2.

...

2

Groovy 2.1 2 is the latest stable version of Groovy.

Feature set

  • offers full support for the JDK 7 “invoke dynamic” bytecode instruction and API for improved performance,
  • goes beyond conventional static type checking capabilities with a special annotation to assist with documentation and type safety of Domain-Specific Languages,
  • adds static type checker extensions,
  • provides additional compilation customization options,
  • features a meta-annotation facility for combining annotations elegantly.

Releases

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

...

  • 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)
  • @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
  • Static traits or mixins
    • but dependent on stub-less joint compilation issues

...

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 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
    • Retrofitting Groovy closures to accommodate JDK 8 upcoming closures for interoperability

    ...

      • 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

    ...

    Other topics we could consider for later Groovy

    • add static "trait" capabilities
    • compiler related:
      • investigate the integration of the Eclipse joint compiler to replace the Groovy stub-based joint compilerinvestigate making the groovyc compiler multithreaded
      • Incremental compiler
    • a treturn keyword or dedicated AST transformation for tail calls for closures and methods
    • 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
    • pattern matching
    • parser combinators
    • a native template engine compiling to AST (faster, correct line numbers for error reporting, optimized outputting, etc.)
    • ...