comp.lang.ada
 help / color / mirror / Atom feed
From: Georg Bauhaus <rm.tsoh.plus-bug.bauhaus@maps.futureapps.de>
Subject: Re: About String
Date: Tue, 17 Jun 2008 00:02:51 +0200
Date: 2008-06-17T00:02:52+02:00	[thread overview]
Message-ID: <4856e30c$0$7535$9b4e6d93@newsspool1.arcor-online.net> (raw)
In-Reply-To: <wcc4p7txk90.fsf@shell01.TheWorld.com>

Robert A Duff wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> 
>> 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.
> 
> Well, I suppose something like that could work, but it seems like it
> would be confusing -- how many components are there, which pieces of
> text belong to which components (or which parameters, in the function
> call case)?
> 
>> [ 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; ]
> 
> I don't see the point.  Why not just make it legal (the line marked
> "This would be illegal").  Rules would be needed about when to evaluate
> that expression -- presumably on elaboration of a discriminant
> constraint, or an aggregate, or a discriminant default.  I don't think
> having a name for Last makes this any easier.
> 
>>>> 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.
> 
> The same sense as declare blocks.  That is, in my "circus",
> this:
> 
>     ... loop
>         <decls>
>         <statements>
>     end loop;


   ... loop
      Get(Buffer(K));
      <decls>   -- depending on Buffer
      <statements>
   end loop;

I guess that in order to maintain the order(?)
SCOPE [DECLS] STATEMENTS END-SCOPE
we would be needing

   ... loop
      Get(Initial(K));
      begin
         <decls>
         <statements>
      end;
   end loop;

> has identical semantics to:
> 
>     ... loop
>         declare
>             <decls>
>         begin
>             <statements>
>         end;
>     end loop;

   ... loop
      Get(Buffer(K));
      declare
         <decls>
      begin
         <statements>
      end;
   end loop;

Compared to the solution above, that would be an exchange
of BEGIN <-> DECLARE and the addition of a BEGIN where there
is nothing between <decls> and <statements> above.

A quick shot at syntax, what impact does this have, if any?
I'm adding a few rather artificial errors, but nevertheless:

   ... scope
      function Foo(N: Integer := K);
      return Value;
   end scope;

   ... scope
      declare
         function Foo(N: Integer := K);
         return Value;
      begin
         null;
      end;
   end scope;

By no more than a gut feeling I'd say that from a syntax
point of view, the omission of explicit declare blocks
adds a few more opportunities for ambiguity: RETURN is
at least not likely introducing a statement in the second
example.



  parent reply	other threads:[~2008-06-16 22:02 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
2008-06-16 19:17                         ` Robert A Duff
2008-06-16 20:30                           ` Dmitry A. Kazakov
2008-06-16 22:02                           ` Georg Bauhaus [this message]
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