Hi .+,

I just saw this 2 week old comment on Grails 7/Groovy 4 INDY performance (bold by me; https://github.com/apache/grails-core/issues/15293#issuecomment-3676632134):

Thanks for raising this issue, we also hit the problem of a massive performance hit using Grails 7/Groovy 4 on our large codebase, and were partially rectifying that by converting more of our code to either @CompileStatic or just to Java. *Every Groovy upgrade has given us challenges with compile performance, runtime performance, language behaviour changes* etc *so our long term goal is to switch to pure Java* which I believe will be more stable and perform better. The tip of disabling indy has been very helpful because it's allowed us to get over the issue for now and in fact due to the rework we've done, our app is faster than before!

Even though in our large codebase we were able to successfully steer around this issue by going partially @CompileStatic, I feel like Groovy 5 being INDY-only could pose more of a risk for the future of the Groovy language than previous changes, if more companies/orgs with larger Groovy applications/frameworks decide to switch to Java.

=>

1. *To fix the root cause of performance drop-off:* /Could a Grails
   application be used to try out the INDY performance improvements
   Jochen suggested in August/ ?
    1. (As I said before, our code needs to be closed source and we
       therefore alas cannot supply the needed test case.)
2. *To make switching to new Groovy major versions faster/easier
   under @CompileStatic/@TypeChecked:* One of the main sources of
   problems when doing the switch to a new major Groovy version we
   encounter, is that Groovy continues to be /ever more strict with
   regards to generics arguments/.
    1. A non-negligible part of the work to get the two base modules of
       our framework to compile under @CompileStatic was adding "as
       List<SomeClass>" or similar to our code, to get Groovy to accept it.
    2. I know covariance in general is a complicated & intricate
       problem, but can we instead find a Groovy solution here
       following "make the frequent case simple/fast, make the rare
       case correct", and instead of being more strict/, do things like
       e.g. a List<ChildOfGoo> being accepted as a List<Goo>/ ?
        1. Some cases can of course be solved by using List<T extends
           Goo>, but alas even this does not always work in more
           complex generics constructs.
            1. (In some cases it would help to keep the code
               Groovy-compact, if Groovy had its own more compact
               syntax for the List<? extends Goo> variety, e.g.
               List<Goo*> (i.e. appending a "*" after the type) ...)


A Groovy Happy New Year to everyone, Cheers,
mg

Reply via email to