Definite Assignment rules for lambda expressions...

Neal Gafter neal at gafter.com
Thu Jan 21 17:08:02 PST 2010


Correction: the old text had "lambda expression" where I quoted "closure
literal".

On Thu, Jan 21, 2010 at 5:05 PM, Neal Gafter <neal at gafter.com> wrote:

> Alex Buckley pointed out to me that the CfJ 0.6a rules for definite
> assignment are a bit informal:
>
> The body of a closure literal may not assign to a final variable declared
> outside the closure literal.
>
> A closure literal does not affect the DA/DU status of any free variables it
> names.
>
> A free variable referenced inside a closure literal receives its initial DA
> state from the DA state of the variable at the point where the closure
> literal appears.
>
> So I've updated it to the slightly more formal JLS-speak
>
> A variable V is (un)assigned after a lambda expression iff V is
> (un)assigned before the lambda expression
>
> A variable V used in a lambda expression's body but declared outside the
> lambda is
>
>    - definitely assigned before the lambda expression's body iff V is
>    definitely assigned before the lambda expression; and
>    - not definitely unassigned before the lambda expression's body.
>
> The last bullet recognizes that a (blank final) variable might be assigned
> somewhere else in the program before the lambda is invoked.
>
> Cheers,
> Neal
>


More information about the lambda-dev mailing list