Checked exceptions within Block<T>
Gregg Wonderly
gregg at wonderly.org
Wed Jan 16 07:23:12 PST 2013
On 1/16/2013 4:09 AM, Remi Forax wrote:
> On 01/16/2013 09:02 AM, Neal Gafter wrote:
>> On Tue, Jan 15, 2013 at 9:41 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>>
>>> Dynamic detection is used, for example, to ensure that someone doesn't
>>> [...] call it after the variable to be mutated has gone out of scope.
>>>
>> You can't (syntactically) name a variable that is out of scope, so there is
>> no way to mutate it if it is out of scope.
> You can capture it in a lambda and call the lambda that will mutate the
> variable out of the scope.
>
> Runnable r;
> {
> int a = 0;
> r = () -> { a = 1; };
> }
> r.run();
>
> so it depends if you consider that a still exist or not when you call run.
>
>> My point is that variable scope is a lexical concept, and lifetime is a dynamic concept.The variable
>> "comes in and out of scope" every time a lambda in the scope of the
>> variable is executed - and then it is in scope on some threads but not in
>> others. It is a category error to suggest any dynamic checking would be
>> helpful.
> yes.
> lambdas that capture and mutate a local variable need at least to be
> biased to the current thread and if you consider that accessing to
> mutating a local variable out of it scope is not legal you need another
> check.
Remi, are you saying that the above runnable should run error free, or would it
generate a RuntimeException of some sort indicating that a is out of "scope" or
"undefined" when the lambda's references are resolved?
Gregg Wonderly
More information about the lambda-dev
mailing list