Re: About String



Robert A Duff wrote:
"Dmitry A. Kazakov" <mailbox@xxxxxxxxxxxxxxxxx> 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.
.



Relevant Pages

  • Re: About String
    ... My idea is that every statement list is a scope. ... What is so special in statement lists? ... You declare something inside a loop body, ... The same sense as declare blocks. ...
    (comp.lang.ada)
  • Re: Unsure about Something
    ... In the second case you declare a *new* variable in each iteration. ... Because you've gone "out of scope" for the loop, ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Scope Best Practice
    ... the scope to a block, ... There are nevertheless cases where performance forces you to declare the ... if you have a loop that reads data ... > ie dont declare it where you dont need it. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Which scope for variables being used in a loop?
    ... can't be GC'd until the scope they are declared in exist. ... inside of the loop. ... overlay local allocations in another loop. ... declaration itself, such that the pointer-value of the variable is ...
    (comp.lang.java.programmer)
  • Re: Scope Best Practice
    ... creating a new object versus the cost of maintaining it in memory?" ... the object is ready for GC once the loop is complete ( ... even if it remains in scope because it is not being referenced anywhere ...
    (microsoft.public.dotnet.languages.csharp)

Loading