anchor.diff:  |
   |===
   
  +[[Groovy3.0releasenotes-GDKimprovements]]
  +== GDK improvements
  +
  +Groovy adds many extension methods to existing Java classes. In Groovy 3, about 80 new such extension methods were added.
  +We highlight just a few here:
  +
  +=== `average()` on arrays and iterables
  +
  +[source,groovy]
  +--------------------------------------
  +assert 3 == [1, 2, 6].average()
  +--------------------------------------
  +
  +=== `takeBetween()` on Strings, CharSequences and GStrings
  +
  +[source,groovy]
  +--------------------------------------
  +assert 'Groovy'.takeBetween( 'r', 'v' ) == 'oo'
  +--------------------------------------
  +
  +=== `shuffle()` and `shuffled()` on arrays and iterables
  +
  +[source,groovy]
  +--------------------------------------
  +def orig = [1, 3, 5, 7]
  +def mixed = orig.shuffled()
  +assert mixed.size() == orig.size()
  +assert mixed.toString() ==~ /\[(\d, ){3}\d\]/
  +--------------------------------------
  +
  +=== `collect{ }` on `Future`
  +
  +[source,groovy]
  +--------------------------------------
  +Future<String> foobar = executor.submit{ "foobar" }
  +Future<Integer> foobarSize = foobar.collect{ it.size() } // async
  +assert foobarSize.get() == 6
  +--------------------------------------
  +
  +=== `minus()` on `LocalDate`
  +
  +[source,groovy]
  +--------------------------------------
  +def xmas = LocalDate.of(2019, Month.DECEMBER, 25)
  +def newYear = LocalDate.of(2020, Month.JANUARY, 1)
  +assert newYear - xmas == 7 // a week apart
  +--------------------------------------
  +
   [[Groovy3.0releasenotes-Miscimprovements]]
   == Miscellaneous improvements
   
  
positive.code: assert null == personInfo?['name']
  --------------------------------------
  
  === ARM Try with resources
  
  Groovy often provides better alternatives to Java 7's `try`-with-resources statement for Automatic Resource Management (ARM).
  
negative.code: 
  ===  Interface default methods
  
  Java 8 supports adding default implementations to interfaces.
  Groovy's traits mechanism provides a more powerful set of OO abstractions
  for _inheriting_ implementation behavior, but Java users are now familiar with default methods,
  so Groovy now supports the same syntax:
  
  [source,groovy]
  --------------------------------------
  