On 9/18/26 17:06, Daniel Sun wrote:
I'm inclined to support setting JDK 21 as the baseline for Groovy 7. A few 
thoughts on why this strikes the right balance:

1) Cleaner GEP-19 integration: Standardizing on java.lang.MatchException avoids 
synthetic exception shims or falling back to IncompatibleClassChangeError. 
Jochen makes a very fair point about the constraints of SwitchBootstraps in 
dynamic Groovy. However, for @CompileStatic, having direct access to 
SwitchBootstraps.typeSwitch allows us to emit standard invokedynamic bytecode 
instead of generating nested instanceof cascades.

For me the question is if we want to support isCase here or not. Records could have isCase, enums/class could have a static isCase - both even in static compilation. I have actually not checked if the last RC kept that.

But yes... if we can make sure the switch has a specific form we can use that... I still think though we should look at the idea of these and then consider doing our own version to cover more cases. But if we spin our own version, we can also put these JDK bootstrapper behind our own bootstrap and call them depending on the JDK version. So even if we use them, we do not have to use them directly.

As for MatchException. I am even in the unclear about how to properly use that exception properly and for more than reporting. So fail to say if a substitute exception (not error) is something to avoid beyond a mere "because Java does it so".

2) Retiring dual-track runtime paths: Groovy 6 already serves JDK 17 users 
well. Bumping to 21 allows us to drop compatibility fallbacks—such as 
thread-pool fallbacks for virtual threads in async concurrency, or redundant 
DGM dispatch logic overlapping with Sequenced Collections.

virtual threads are opt-in in Groovy 6. And if we really want to always use virtual threads is a bit of an open question to me.
The redundant dispatch logic in DGM you would have to explain to me though.

3) Pragmatic ecosystem pacing: JDK 25 is likely too aggressive for mainstream 
enterprise adoption, while staying on JDK 17 would keep unnecessary technical 
debt in the compiler. JDK 21 gives us a stable LTS foundation without leaving 
most users behind.

if with technical debt you mean the bootstrappers, then I do not agree. If you mean something else, please explain

bye Jochen

Reply via email to