This is an automated email from the ASF dual-hosted git repository.

paulk-asert pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/groovy-website.git

commit 83b0540d411d8121a16a476984dd2b629e788730
Author: Paul King <[email protected]>
AuthorDate: Sat Jul 11 14:54:11 2026 +1000

    GEP-27: update the closure reference-implementation to the current state
    
    All three safety layers are now implemented (add the decline-diagnostics 
layer);
    the capability analysis and typed static dispatch are implemented and 
validated
    (compile-time packing across the core module and others), so the remaining 
Groovy
    7 work is restated as S3 elision, writer unification, nested-closure owner
    retargeting, and hardening the automatic path from experimental to 
default-on.
---
 site/src/site/wiki/GEP-27.adoc | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/site/src/site/wiki/GEP-27.adoc b/site/src/site/wiki/GEP-27.adoc
index c73b107..a342236 100644
--- a/site/src/site/wiki/GEP-27.adoc
+++ b/site/src/site/wiki/GEP-27.adoc
@@ -559,8 +559,8 @@ development:
   arbitrary-depth nesting, written captures via `Reference`, implicit `it` — 
under both compilation
   modes. It confirms the writer is the right home (no `@CompileStatic` 
boundary, unlike an
   AST-transform approach), establishes the soundness cliff empirically, and 
confirms what is
-  preserved (`curry`/`memoize`/`trampoline` all keep working on the adapter). 
Two of the three
-  safety layers from _Guarding the dynamic trust assertion_ are now 
implemented and validated:
+  preserved (`curry`/`memoize`/`trampoline` all keep working on the adapter). 
All three safety layers
+  from _Guarding the dynamic trust assertion_ are now implemented and 
validated:
 ** the *runtime guard* — `PackedClosure` rejects 
`setDelegate`/`setResolveStrategy` set to any
    non-owner configuration. Probing confirmed every delegate-redirect path 
(`with`/`tap`,
    `rehydrate`, builder DSLs, DGM) funnels through those two setters, so the 
guard turns what was a
@@ -570,9 +570,17 @@ development:
    into a field/property/index, returned, appended with `<<`, or placed in a 
collection literal) is
    kept as a class, moving the clearest delegate-risk cases from a runtime 
throw to a compile-time
    non-event.
-
-The remaining Groovy 7 work is the *capability/escape analysis* for the 
`@CompileStatic` automatic
-path (proving packing sound so no annotation is needed) and typed static 
dispatch.
+** the *decline diagnostics* — `@PackedClosures(mode = WARN | STRICT)` 
surfaces closures that could
+   not be packed (a compiler warning or error, with the reason and source 
position); `DISABLED` opts
+   a scope out entirely. The automatic flag path stays lenient.
+
+Also implemented and validated: the *capability analysis* (STC's 
delegate-independence proof driving
+automatic packing under `@CompileStatic`, no annotation needed) and *typed 
static dispatch*
+(statically-compiled hoisted bodies with typed captures/params/return — zero 
`invokedynamic`), with
+compile-time packing exercised across the core module and several others. The 
remaining Groovy 7
+work is S3 object elision, unifying the closure and lambda writers, 
owner-correct retargeting so
+nested closures can hoist, and hardening the automatic path from experimental 
(opt-in flag) to
+default-on.
 
 === Measured impact
 

Reply via email to