On Mon, 09 Jun 2008 11:43:36 +0200, Georg Bauhaus wrote:
> Dmitry A. Kazakov schrieb:
>> On Sun, 08 Jun 2008 17:19:11 -0400, Robert A Duff wrote:
>>
>>> Maciej Sobczak <see.my.homepage@[EMAIL PROTECTED]
> writes:
>>>
>>>> After all, with the possibility to initialize the new variable with
>>>> arbitrarily complex expression (including function call), this is
>>>> already the case and the whole declare-begin-end block is just
>>>> reflecting some artificial separation.
>>> I agree. I suppose it comes from Pascal, where declarations and
>>> executable code are completely separated. It makes no sense in
>>> Ada, where declarations are just as executable as statements.
>> I disagree. I think it does make sense because it clearly defines the
scope
>> of the declared variable.
> Still, a somewhat *new* kind kind of handling exceptions in single
> declarations looks interesting?
> Given linear order of elaboration in declarative parts,
> and thus the possibility of sequencing initialization
> of local variables:
>
> procedure P is
> declare
> X1: constant T; -- like Java final
> begin
> X1 := New_T(...); -- may raise CE
> exception
> when Constraint_Error =>
> X1 := Fallback_T; -- better than Java final
> end;
> X2: D := New_D(X1, ...); -- safely refer to X1
> begin
> ...
> end P;
Huh, if you want closures, just say so. There is no need to break proven
language concepts in order to have desired effect:
procedure P is
X1: constant T := -- Here anonymous function literal begins
function return T is
begin
return New_T (...); -- may raise CE
exception
when Constraint_Error =>
return Fallback_T; -- better than Java final
end;
X2: D := New_D (X1, ...); -- safely refer to X1
begin
...
end P;
Note, no magic stuff, no exception handlers in declarations, just a simple
thing, which Ada should have had from the day one: functional types and
literals of.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


|