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 8c7419af0e86988dc0c57407147520fb78ee8493 Author: Paul King <[email protected]> AuthorDate: Sat Jul 11 14:52:38 2026 +1000 GEP-27: finish the merged-status pass for the lambda reference-implementation text Mark the reference-implementation lambda bullet and Piece 2 as merged (were 'candidate'/'on the first-step branch'), and note the pre-hoist bytecode-shape tests are skipped under the opt-in flag with migration deferred to a default flip -- rather than described as remaining first-step work. --- site/src/site/wiki/GEP-27.adoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/site/src/site/wiki/GEP-27.adoc b/site/src/site/wiki/GEP-27.adoc index b1b21fd..c73b107 100644 --- a/site/src/site/wiki/GEP-27.adoc +++ b/site/src/site/wiki/GEP-27.adoc @@ -389,8 +389,8 @@ class-visitor changes the closure work needs. A capturing SAM lambda today instantiates its lambda class to hold the captured values (Groovy even `Reference`-wraps them). The Java-style form uses a `static` implementation method taking the captured values as leading arguments, with the metafactory capturing them directly — which _also_ -removes the `Closure` allocation and the `Reference` wrapping. This is implemented on the same -first-step branch for the *read-only* capture case (the common one): captured values are passed as +removes the `Closure` allocation and the `Reference` wrapping. This is merged for the *read-only* +capture case (the common one): captured values are passed as typed leading parameters. A lambda that *mutates* a capture still needs the shared `Reference`, so it correctly declines and keeps its class. This lands the bulk of the capturing benefit in Groovy 6 behind the same flag; only mutated-capture lambdas remain on the class-based path. @@ -543,7 +543,7 @@ build, so they remain open items before the flag defaults on: A proof-of-concept exists as a spike in the code generator, exercised through this proposal's development: -* *Lambda first step (Groovy 6 candidate).* Implemented in `StaticTypesLambdaWriter`: both +* *Lambda first step (Groovy 6, merged).* Implemented in `StaticTypesLambdaWriter`: both non-capturing *and* read-only-capturing SAM lambda classes are eliminated, with the impl hoisted to `private static` methods on the enclosing class (captured values become leading parameters) and the metafactory bootstrapped directly against them — the non-capturing case yielding a @@ -551,9 +551,9 @@ development: methods are confirmed to carry full debug metadata (see _IDE and tooling considerations_). Cases that need the shared `Reference` or closure identity — mutated captures, instance access, serializable and nested-function lambdas — correctly decline and keep their class. The whole - first step sits behind the `groovy.target.lambda.hoist` flag. The existing lambda tests that - assert the old bytecode shape need updating to the new structure (behaviour is unchanged); that - test migration is the bulk of the remaining first-step work. + first step is merged behind the opt-in `groovy.target.lambda.hoist` flag; the lambda tests that + assert the old bytecode shape are skipped under the flag, with their migration to the new + structure deferred to when the default flips. * *Closure packing (Groovy 7 direction).* A `ClosureWriter`-based spike (with a shared `PackedClosure` runtime adapter), opt-in via `@PackedClosures`, demonstrates hoisting closures — captures, arbitrary-depth nesting, written captures via `Reference`, implicit `it` — under both compilation
