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 2fec262d 2026/07/15 06:53:49: Generated dev website from
groovy-website@608e2e6
2fec262d is described below
commit 2fec262d34fe588ae8ff54401953a2b617df7358
Author: jenkins <[email protected]>
AuthorDate: Wed Jul 15 06:53:49 2026 +0000
2026/07/15 06:53:49: Generated dev website from groovy-website@608e2e6
---
search/search-index.json | 2 +-
wiki/GEP-27.html | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 1 deletion(-)
diff --git a/search/search-index.json b/search/search-index.json
index 52b00c14..d7f294fc 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 d778c05a..3b3a3999 100644
--- a/wiki/GEP-27.html
+++ b/wiki/GEP-27.html
@@ -1210,6 +1210,67 @@ out under real work (further lane micro-tuning was
assessed against those shapes
in-situ effect). Ratios are measured against a current baseline that includes
the <code>Closure.call</code>
fast-path improvements (GROOVY-12164/12165), i.e. against generated classes at
their fastest.</p>
</div>
+<div class="sect3">
+<h4 id="_self_hosting_a_whole_groovy_module_built_with_the_flag">Self-hosting:
a whole Groovy module built with the flag</h4>
+<div class="paragraph">
+<p>As an end-to-end check, Groovy’s own <code>groovy-macro</code> module
was compiled with
+<code>groovy.target.closure.pack</code> on — no source change, since its hot
files are already
+<code>@CompileStatic</code>, so packing is automatic — and its test suite run
against the packed classes:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 60%;">
+<col style="width: 20%;">
+<col style="width: 20%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><code>groovy-macro</code>
module</th>
+<th class="tableblock halign-left valign-top">Baseline</th>
+<th class="tableblock halign-left valign-top">Packed</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Classes in
the module</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">148</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><strong>44</strong> (−70%)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Closure
classes</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock">115</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><strong>11</strong> (104 packed, 90%)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compiled
bytecode</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">520
KB</p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><strong>228 KB</strong> (−56%)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Module
test suite</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">—</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>66
/ 66 pass</strong> against the packed classes</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The 11 residual closure classes are exactly the expected declines: five are
one nested-closure
+family (the Groovy 7 owner-retargeting case), two are in the single
non-<code>@CompileStatic</code> file (a
+builder, so the automatic flag correctly skips it), and four are flat closures
that visibly escape.
+The dominant source is <code>ASTMatcher</code> (113 → 9 closure classes),
whose packed form load-verifies
+under <code>-Xverify:all</code>.</p>
+</div>
+<div class="paragraph">
+<p>Two timings on this real module, both controlled (interleaved runs,
medians): the <strong>cold</strong> test suite
+ran ~6% <strong>faster</strong> packed in 5/5 rounds — the class-count
reduction showing up directly as less
+class loading and verification in a fresh JVM — and a
<strong>steady-state</strong> hot loop of <code>ASTMatcher.matches</code>
+(a full AST walk per call) measured at <strong>parity</strong> (≈0.98×, inside
the run-to-run noise). So on
+shipping code the pattern from the microbenchmarks holds: packing’s
runtime is parity-to-favourable,
+and its real product is the class-count, bytecode and cold-start reduction.
(This also demonstrates
+the internal-adoption path: once default-on, Groovy’s own
<code>@CompileStatic</code> modules — AST, macro,
+GINQ — would each shed most of their closure classes from the distribution
jars.)</p>
+</div>
+</div>
</div>
<div class="sect2">
<h3 id="_grails_artefact_dsls_and_nested_closures">Grails artefact DSLs and
nested closures</h3>