comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: About String
Date: Mon, 16 Jun 2008 10:31:03 +0200
Date: 2008-06-16T10:31:03+02:00	[thread overview]
Message-ID: <1v6vlmvr3u3dj.qtfnfe9fmxjm.dlg@40tude.net> (raw)
In-Reply-To: wcczlpm1hh3.fsf@shell01.TheWorld.com

On Sun, 15 Jun 2008 18:06:00 -0400, Robert A Duff wrote:

> I don't see why a loop needs a declarative part.
> My idea is that every statement list is a scope.

What is so special in statement lists? Pushing this idea further, we should
also conclude that any sequence of expressions is a scope. For example, an
aggregate:

String'(X : constant Character := F(A(I)), 1 => X, 2 => 'a', 3 => X);

a function call etc.

[ That might be useful to overcome some silly limitations on discriminants:

type T (S : Storage_Count) is record
-- Buffer : Storage_Elements_Array (0..S-1);  -- This would be illegal, so
   Buffer : Storage_Elements_Array
      (Last : constant Storage_Offset := S-1, 0..Last);
end record; ]

>> However I find nested declare/begin/end more readable because it clearly
>> disambiguates between the scope of the loop and the scope of one iteration
>> of.
> 
> I don't get it.  You declare something inside a loop body, or the 'then'
> part of an 'if' -- it's local to that.

Local in which sense? There are statical nesting and dynamic execution of
the loop body upon iterations. It is not obvious (rather counterintuitive)
that declarations have to be "executed." To me the purpose of Ada's
"declare" was merely in conversion of "elaboration" to "execution."

>> But what would happen if I said:
>>
>>    begin
>>       raise Foo_Error;
>>       X : constant Character := F(A(I)); -- Not Ada!
>>       Do_Something (X);
>>    exception
>>       when Foo_Error =>
>>          Do_Something_Interesting (X);
>>    end;

> As I said earlier, exception-handler regions deserve their own syntax,
> not connected with declaration blocks.

So an exception handler attached to the statement list will see nothing
from the scope of the list? I.e. everything in the list will be wound up
before the handler gets fired. Then you would need additional nesting if
you wished to handle exceptions from that list. Here we go:

   X : constant ...;
   Y : constant ...;
   begin
      Do_Something (X, Y);
   exception
      when Foo_Error =>
          Do_Something_Interesting (X, Y);
   end;

What is the gain? Just add "declare" in front of this and it becomes legal
Ada.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2008-06-16  8:31 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-06 17:29 About String Sébastien Morand
2008-06-07 16:18 ` Simon Wright
2008-06-07 17:01   ` Pascal Obry
2008-06-07 22:13     ` Chris Moore
2008-06-08  6:47       ` Niklas Holsti
2008-06-08  7:35         ` Dmitry A. Kazakov
2008-06-08 10:29           ` Sebastien Morand
2008-06-08 10:53             ` Dmitry A. Kazakov
2008-06-08 11:14           ` Niklas Holsti
2008-06-08 13:16             ` Dmitry A. Kazakov
2008-06-08 17:17               ` Niklas Holsti
2008-06-09  7:26                 ` Dmitry A. Kazakov
2008-06-08 11:48           ` Martin
2008-06-08 13:17             ` Conditional declarations (was: About String) Dmitry A. Kazakov
2008-06-08 18:26           ` About String Chris Moore
2008-06-08 18:32         ` Robert A Duff
2008-06-08 20:51           ` Maciej Sobczak
2008-06-08 21:19             ` Robert A Duff
2008-06-09  7:14               ` Dmitry A. Kazakov
2008-06-09  9:43                 ` Georg Bauhaus
2008-06-09 10:25                   ` Dmitry A. Kazakov
2008-06-09 10:42                     ` Sébastien Morand
2008-06-09 11:43                     ` Georg Bauhaus
2008-06-09 12:03                       ` Dmitry A. Kazakov
2008-06-15 19:38                 ` Robert A Duff
2008-06-15 20:52                   ` Dmitry A. Kazakov
2008-06-15 22:06                     ` Robert A Duff
2008-06-16  8:31                       ` Dmitry A. Kazakov [this message]
2008-06-16 19:17                         ` Robert A Duff
2008-06-16 20:30                           ` Dmitry A. Kazakov
2008-06-16 22:02                           ` Georg Bauhaus
2008-06-16 23:04                             ` Robert A Duff
2008-06-09 11:00               ` Georg Bauhaus
2008-06-09 14:27                 ` Britt Snodgrass
2008-06-15 19:50                   ` Robert A Duff
2008-06-15 19:48                 ` Robert A Duff
2008-06-08 11:13     ` Simon Wright
2008-06-08 19:03       ` Sebastien Morand
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox