This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/groovy-dev-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 7c6f45ca 2026/07/15 03:53:40: Generated dev website from
groovy-website@5c83f33
7c6f45ca is described below
commit 7c6f45ca8d31c64d17bc284fbaf6aa3f15039101
Author: jenkins <[email protected]>
AuthorDate: Wed Jul 15 03:53:40 2026 +0000
2026/07/15 03:53:40: Generated dev website from groovy-website@5c83f33
---
search/search-index.json | 2 +-
wiki/GEP-27.html | 16 ++++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/search/search-index.json b/search/search-index.json
index 45dbba65..10af223a 100644
--- a/search/search-index.json
+++ b/search/search-index.json
@@ -891,7 +891,7 @@
{
"id": "wiki/GEP-27.html",
"title": "The Apache Groovy programming language - Developer docs -
GEP-27",
- "content": "The Apache Groovy programming language - Developer docs -
GEP-27 Socialize Discuss on the mailing list Groovy on X Groovy on Bluesky
Groovy on Mastodon Groovy on LinkedIn Events and conferences Source code on
GitHub Report issues in Jira Stack Overflow questions Slack Community You are
using an outdated browser. Please upgrade your browser to improve your
experience. Apache Groovy™ Learn Documentation Download Support
Contribute Ecosystem Blog posts Socialize GE [...]
+ "content": "The Apache Groovy programming language - Developer docs -
GEP-27 Socialize Discuss on the mailing list Groovy on X Groovy on Bluesky
Groovy on Mastodon Groovy on LinkedIn Events and conferences Source code on
GitHub Report issues in Jira Stack Overflow questions Slack Community You are
using an outdated browser. Please upgrade your browser to improve your
experience. Apache Groovy™ Learn Documentation Download Support
Contribute Ecosystem Blog posts Socialize GE [...]
"url": "wiki/GEP-27.html",
"site": "dev"
},
diff --git a/wiki/GEP-27.html b/wiki/GEP-27.html
index 1ee6c8ac..939a4881 100644
--- a/wiki/GEP-27.html
+++ b/wiki/GEP-27.html
@@ -873,6 +873,15 @@ proof and, for iteration intrinsics, knowledge of the
callee.</p>
<code>Closure</code> cases are one mechanism selecting different wrappers.</p>
</div>
<div class="paragraph">
+<p>Convergence also runs the other way: generated closure classes (S0 —
everything packing declines)
+can adopt the packed dispatch discipline without being packed. The compiler
knows every <code>doCall</code>
+signature at emission time, so it can emit a
<code>call(Object…​)</code> override on the closure class that
+arity-switches directly to the right <code>doCall</code> (with the
MOP-transparency guard inlined). The
+Java/GDK path then becomes plain virtual dispatch — capability-clean under
JPMS, no reflection —
+and the runtime’s reflective <code>doCall</code> cache in
<code>Closure.call</code> demotes to serving only legacy jars
+and hand-written subclasses. That cache is a bridge, not a destination.</p>
+</div>
+<div class="paragraph">
<p>A related follow-up surfaced in review: <code>MethodClosure</code> (from
<code>.&</code> method references) is the same
shape — a <code>Closure</code> whose target is a known method that cannot
honour a delegate — but it dispatches
by name with runtime overload selection and <strong>silently ignores</strong>
a caller-set delegate, whereas
@@ -1397,6 +1406,13 @@ dispatch of closure classes does not: the hosting
class’s own <code>invoke
its lookup — the capability model Java lambdas use — and handing the closure
across a module
boundary is the grant. This deliberately moves enforcement from invocation
time to creation time.</p>
</li>
+<li>
+<p>Packing is independent of Groovy’s call-site strategy: its
<code>invokedynamic</code>/constant-dynamic usage
+is JDK bootstrap machinery (the same category as
<code>LambdaMetafactory</code> for statically compiled
+lambdas), emitted regardless of the <code>indy</code> setting — verified
byte-identical class counts and
+behaviour under classic (<code>indy=false</code>) compilation, where the
dynamic path flows through the
+classic call-site caches to the same dispatch tables.</p>
+</li>
</ul>
</div>
</div>