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 233d69a8 2026/07/12 14:35:44: Generated dev website from
groovy-website@28ee6f4
233d69a8 is described below
commit 233d69a8e6c88778e3db6d5936f843eea2579ab7
Author: jenkins <[email protected]>
AuthorDate: Sun Jul 12 14:35:44 2026 +0000
2026/07/12 14:35:44: Generated dev website from groovy-website@28ee6f4
---
search/search-index.json | 4 ++--
wiki/GEP-27.html | 21 +++++++++++++++++++--
wiki/geps.html | 2 +-
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/search/search-index.json b/search/search-index.json
index 66c64395..27d0cb25 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"
},
@@ -933,7 +933,7 @@
{
"id": "wiki/geps.html",
"title": "The Apache Groovy programming language - GEPs",
- "content": "The Apache Groovy programming language - GEPs 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 GEPs GEP-1 GEP-2 GEP- [...]
+ "content": "The Apache Groovy programming language - GEPs 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 GEPs GEP-1 GEP-2 GEP- [...]
"url": "wiki/geps.html",
"site": "dev"
},
diff --git a/wiki/GEP-27.html b/wiki/GEP-27.html
index 710147d1..d2128875 100644
--- a/wiki/GEP-27.html
+++ b/wiki/GEP-27.html
@@ -147,7 +147,7 @@
<strong>Last modification</strong>
</td>
<td class="hdlist2">
-<p>2026-07-12</p>
+<p>2026-07-13</p>
</td>
</tr>
</table>
@@ -779,7 +779,8 @@ closures rather than lambdas — now implemented in the code
generator (GROOVY-1
for Groovy 6.0 as a stretch goal. It covers the hard cases: no-capture and
captured closures (by
value; written captures via shared <code>Reference</code>, including
<code>=`/`+</code>), <strong>arbitrary-depth nested
closures</strong>, implicit <code>it</code>, under both
<code>@CompileStatic</code> and dynamic compilation, correctly declining
-closures that use <code>delegate</code>/<code>owner</code>/<code>super</code>.
All three safety mechanisms from <em>Guarding the
+closures that use <code>delegate</code>/<code>owner</code>/<code>super</code>,
or that carry default parameter values (multi-arity —
+see <em>Excluded and deferred features</em>). All three safety mechanisms from
<em>Guarding the
dynamic trust assertion</em> are implemented and validated: the mandatory
<code>PackedClosure</code> runtime
guard, the compile-time escape decline, and the <code>@PackedClosures(mode =
WARN | STRICT)</code> decline
diagnostics. The two headline capabilities are done:</p>
@@ -846,6 +847,17 @@ proof and, for iteration intrinsics, knowledge of the
callee.</p>
<p>Fold the lambda and closure code paths behind the single hoist backend, so
the SAM and
<code>Closure</code> cases are one mechanism selecting different wrappers.</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
+<code>PackedClosure</code> binds a fixed <code>MethodHandle</code> and
<strong>rejects</strong> one. The two are worth <em>contract</em>-aligning
+(a shared "known-target, delegate-inert" marker and consistent delegate
handling), and both could
+share the per-arity handle-selection primitive that default-parameter packing
(see <em>Excluded and
+deferred features</em>) also needs. Their dispatch models differ enough,
though — a fixed handle versus
+runtime overload selection — that fully merging them into one path is not a
goal; this is tracked as a
+separate initiative.</p>
+</div>
</div>
<div class="sect2">
<h3 id="_default_on_hardening">Default-on hardening</h3>
@@ -1256,6 +1268,11 @@ stretch goal) builds on the shared backend proven in
phases 1–2; phases 4–5
<td class="tableblock halign-left valign-top"><p class="tableblock">Kept on
the class-based path initially; hoisting them requires carrying the
deserialisation machinery to the enclosing class.</p></td>
</tr>
<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Packing
default-parameter (multi-arity) closures</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">Deferred</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A single
hoisted method cannot reproduce the arity-overloaded dispatch a default
parameter generates, so these decline to S0 today. A future slice would hoist
one method per arity (reusing the existing default-fill codegen) and have the
adapter select a <code>MethodHandle</code> per arity at call time — the same
primitive the <em>MethodClosure</em> alignment above would share.</p></td>
+</tr>
+<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Object
elision (S3)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Deferred
(Groovy 7)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The most
aggressive step; needs escape proof and, for iteration, callee
knowledge.</p></td>
diff --git a/wiki/geps.html b/wiki/geps.html
index bdcdbc42..f83d6530 100644
--- a/wiki/geps.html
+++ b/wiki/geps.html
@@ -63,7 +63,7 @@
</ul>
</div>
</div>
- </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li class='active'><a href='#gep'>GEPs</a></li><li><a
href='#GEP-1' class='anchor-link'>GEP-1</a></li><li><a href='#GEP-2'
class='anchor-link'>GEP-2</a></li><li><a href='#GEP-3'
class='anchor-link'>GEP-3</a></li><li><a href='#GEP-4'
class='anchor-link'>GEP-4</a></li><li><a href='#GEP-5'
class='anchor-link'>GEP-5</a></li><li><a href='#GEP-6' [...]
+ </div><div id='content' class='page-1'><div
class='row'><div class='row-fluid'><div class='col-lg-3'><ul
class='nav-sidebar'><li class='active'><a href='#gep'>GEPs</a></li><li><a
href='#GEP-1' class='anchor-link'>GEP-1</a></li><li><a href='#GEP-2'
class='anchor-link'>GEP-2</a></li><li><a href='#GEP-3'
class='anchor-link'>GEP-3</a></li><li><a href='#GEP-4'
class='anchor-link'>GEP-4</a></li><li><a href='#GEP-5'
class='anchor-link'>GEP-5</a></li><li><a href='#GEP-6' [...]
<div class='row'>
<div class='colset-3-footer'>
<div class='col-1'>