Hi folks,

The performance subproject in our build was designed to check on
(among other things) compiler performance. The 'performanceTests' task
compiles a set of source files across numerous Groovy versions. Over
time, the number of source files it checks against has been diluted.
The exact history isn't too important, but the summary is something
like this:

* We have tried to keep the tests to just relying on the core subproject.
* We have tried to not rely on too many external dependencies.
* We have tried not to include any classes which have been impacted by
package changes, e.g. using XmlParser would require
groovy.util.XmlParser in early versions and groovy.xml.XmlParser in
later versions.
* We haven't included functionality included in later versions.
* Our approach when dropping further impacted files has been to just
remove them from the list of files compiled.

The end result is that the current performance test reveals very
little information. I think we need to add in numerous additional
files. I have also recently pruned down the versions we try to check
against. I don't think there is a lot of value in knowing performance
compared to Groovy 1.8.x.

I have just created a PR which adds a bunch of additional files - I
used a whole bunch of examples I created some years ago for PLEAC. I
believe the licensing is all legit. There are around 10000 lines of
Groovy source in those files. The alternative would be to pick our way
through the current source base and add selected files which meet all
of the criteria we have above.

Incidentally, results on Windows were:
> Task :performance:performanceTests
Groovy 2.4.21 Average 437.965ms ± 16.07ms
Groovy 4.0.5-SNAPSHOT Average 649.8199999999999ms ± 89.79ms (48.37% slower)
Groovy 4.0.4 Average 654.635ms ± 85.86ms (49.47% slower)
Groovy 2.5.18 Average 676.224ms ± 8.38ms (54.4% slower)
Groovy 3.0.12 Average 792.625ms ± 192.19ms (80.98% slower)

On Linux, the results were:
> Task :performance:performanceTests
Groovy 2.4.21 Average 473.17699999999996ms ± 24.47ms
Groovy 4.0.4 Average 648.592ms ± 129.15ms (37.07% slower)
Groovy current Average 649.4449999999999ms ± 126.79ms (37.25% slower)
Groovy 2.5.18 Average 683.147ms ± 12.6ms (44.37% slower)
Groovy 3.0.12 Average 796.938ms ± 225.73ms (68.42% slower)

Here, "current" is the version of the branch you are running on
(GROOVY_4_0_X for me). I also published the current branch (on
Windows) to the local Maven repo in case that made any difference.

The usual disclaimer about microbenchmarks applies. Also, remember,
this is testing oldish code - so not code rich in AST transforms or
using CompileStatic.

Thoughts about whether the Pleac examples are good to add or should we
move all of this to another repo?

Cheers, Paul.

Reply via email to