comp.lang.ada
 help / color / mirror / Atom feed
* Reduction expressions
@ 2024-08-13 12:36 Simon Wright
  2024-08-20  3:59 ` Randy Brukardt
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Wright @ 2024-08-13 12:36 UTC (permalink / raw)


Are the Accum_Type & Value_Type (ARM 4.5.10(9/5)) of a reduction attribute
reference required to be definite?

ARM 4.5.10(24/5) & (25.5) seem to imply so, which explains why GNAT
doesn't support e.g. String.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-13 12:36 Reduction expressions Simon Wright
@ 2024-08-20  3:59 ` Randy Brukardt
  2024-08-20 21:23   ` Simon Wright
  0 siblings, 1 reply; 8+ messages in thread
From: Randy Brukardt @ 2024-08-20  3:59 UTC (permalink / raw)


"Simon Wright" <simon@pushface.org> wrote in message 
news:ly5xs4d2ft.fsf@pushface.org...
> Are the Accum_Type & Value_Type (ARM 4.5.10(9/5)) of a reduction attribute
> reference required to be definite?
>
> ARM 4.5.10(24/5) & (25.5) seem to imply so, which explains why GNAT
> doesn't support e.g. String.

Accum_Subtype (we changed the name since it is a subtype, not a type; 
various clarifications were made to the wording as well in AI22-0011-1, 
AI22-0047-1, and AI22-0069-1) most likely has to be definite since the 
accumulator is of that type, and the bounds/constraints of the accumulator 
are thus defined by the initial value. In most uses, the first call on 
Reduce would then raise Constraint_Error (because the bounds/constraints are 
incorrect). I don't think there is any reason that the Value_Subtype has to 
be definite for a sequential reduce (a parallel reduce requires the two 
subtypes to statically match).

Note that if someone has a clever way to use an indefinite result, it is 
allowed. For instance, I could see a class-wide result making sense in some 
limited circumstances. But I don't think String would do anything useful, 
since the bounds are determined by the initial value.

BTW, this answer is essentially topic #1 of AI22-0011-1.

                    Randy.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-20  3:59 ` Randy Brukardt
@ 2024-08-20 21:23   ` Simon Wright
  2024-08-20 23:30     ` Lawrence D'Oliveiro
  0 siblings, 1 reply; 8+ messages in thread
From: Simon Wright @ 2024-08-20 21:23 UTC (permalink / raw)


"Randy Brukardt" <randy@rrsoftware.com> writes:

> "Simon Wright" <simon@pushface.org> wrote in message 
> news:ly5xs4d2ft.fsf@pushface.org...
>> Are the Accum_Type & Value_Type (ARM 4.5.10(9/5)) of a reduction attribute
>> reference required to be definite?
>>
>> ARM 4.5.10(24/5) & (25.5) seem to imply so, which explains why GNAT
>> doesn't support e.g. String.
>
> Accum_Subtype (we changed the name since it is a subtype, not a type; 

Amazing how a person (I) can have used Ada for ~40 years and still be
hard put to it to describe the difference, at least in a case like this
one, where the ARG members clearly see meanings that leave me lukewarm
if not cold. Maybe "the heart of twilight"?

>           But I don't think String would do anything useful, 
> since the bounds are determined by the initial value.

String was just the simplest indefinite type for an example.

> BTW, this answer is essentially topic #1 of AI22-0011-1.

Thanks for the pointer.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-20 21:23   ` Simon Wright
@ 2024-08-20 23:30     ` Lawrence D'Oliveiro
  2024-08-20 23:41       ` Keith Thompson
  2024-08-21  7:47       ` Simon Wright
  0 siblings, 2 replies; 8+ messages in thread
From: Lawrence D'Oliveiro @ 2024-08-20 23:30 UTC (permalink / raw)


On Tue, 20 Aug 2024 22:23:27 +0100, Simon Wright wrote:

> "Randy Brukardt" <randy@rrsoftware.com> writes:
> 
>> Accum_Subtype (we changed the name since it is a subtype, not a type;
> 
> Amazing how a person (I) can have used Ada for ~40 years and still be
> hard put to it to describe the difference, at least in a case like this
> one, where the ARG members clearly see meanings that leave me lukewarm
> if not cold. Maybe "the heart of twilight"?

I thought the difference was obvious. “subtype” is the C equivalent of 
“typedef”, just giving a new name to an existing type. So

    subtype A is B;

(where A and B are simple identifiers) is valid, whereas

    type A is B;

is not: a “type” declaration always creates a new type: you have to write 
at least

    type A is new B;

and now you have two types with different names that are structurally the 
same, but not compatible.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-20 23:30     ` Lawrence D'Oliveiro
@ 2024-08-20 23:41       ` Keith Thompson
  2024-08-21  1:37         ` Lawrence D'Oliveiro
  2024-08-21  7:47       ` Simon Wright
  1 sibling, 1 reply; 8+ messages in thread
From: Keith Thompson @ 2024-08-20 23:41 UTC (permalink / raw)


Lawrence D'Oliveiro <ldo@nz.invalid> writes:
[...]
> I thought the difference was obvious. “subtype” is the C equivalent of 
> “typedef”, just giving a new name to an existing type. So
>
>     subtype A is B;
>
> (where A and B are simple identifiers) is valid, whereas
>
>     type A is B;
>
> is not: a “type” declaration always creates a new type: you have to write 
> at least
>
>     type A is new B;
>
> and now you have two types with different names that are structurally the 
> same, but not compatible.

A subtype with no added constraint is similar to a C typedef, but given

    subtype Digit is Integer range 0..9;

Digit is distinct from Integer (though they're both the same type).

C doesn't have anything directly corresponding to Ada subtypes.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-20 23:41       ` Keith Thompson
@ 2024-08-21  1:37         ` Lawrence D'Oliveiro
  0 siblings, 0 replies; 8+ messages in thread
From: Lawrence D'Oliveiro @ 2024-08-21  1:37 UTC (permalink / raw)


On Tue, 20 Aug 2024 16:41:55 -0700, Keith Thompson wrote:

> A subtype with no added constraint is similar to a C typedef, but given
> 
>     subtype Digit is Integer range 0..9;
> 
> Digit is distinct from Integer (though they're both the same type).

“Integer range 0..9” is a subtype of Integer, and is valid for example as 
a return type where Integer is expected. The “subtype” declaration doesn’t 
actually create the subtype: “Digit” is just a shorthand name for that, 
just like a C typedef.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-20 23:30     ` Lawrence D'Oliveiro
  2024-08-20 23:41       ` Keith Thompson
@ 2024-08-21  7:47       ` Simon Wright
  2024-08-24  4:27         ` Randy Brukardt
  1 sibling, 1 reply; 8+ messages in thread
From: Simon Wright @ 2024-08-21  7:47 UTC (permalink / raw)


Lawrence D'Oliveiro <ldo@nz.invalid> writes:

> On Tue, 20 Aug 2024 22:23:27 +0100, Simon Wright wrote:
>
>> "Randy Brukardt" <randy@rrsoftware.com> writes:
>> 
>>> Accum_Subtype (we changed the name since it is a subtype, not a type;
>> 
>> Amazing how a person (I) can have used Ada for ~40 years and still be
>> hard put to it to describe the difference, at least in a case like
>> this one, where the ARG members clearly see meanings that leave me
>> lukewarm if not cold. Maybe "the heart of twilight"?
>
> I thought the difference was obvious. “subtype” is the C equivalent of
> “typedef”, just giving a new name to an existing type. So
>
>     subtype A is B;
>
> (where A and B are simple identifiers) is valid, whereas
>
>     type A is B;
>
> is not: a “type” declaration always creates a new type: you have to
> write at least
>
>     type A is new B;
>
> and now you have two types with different names that are structurally
> the same, but not compatible.

Yes, I've understood that for a long time but ... ARM22 4.5.10(8,9)[1]
say

(8) The expected type for a reduction_attribute_reference shall be a
    single nonlimited type.

(9) In the remainder of this subclause, we will refer to nonlimited
    subtypes Value_Type and Accum_Type of a
    reduction_attribute_reference. ...

and in AI 22-0011-1 [2] starting at 22-Oct-2021 5:25 PM,

* SB: raises a series of observations,
* STT: "... You really need to think of Accum_Type as a particular
  *subtype*"
* SB: "Ok, I was confused - Accum_Type is a subtype, not a type. So
  a lot of my message was noise."

If SB can be confused, so can I!

[1] http://www.ada-auth.org/standards/22rm/html/RM-4-5-10.html#p8
[2] http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai22s/ai22-0011-1.txt?rev=1.2

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Reduction expressions
  2024-08-21  7:47       ` Simon Wright
@ 2024-08-24  4:27         ` Randy Brukardt
  0 siblings, 0 replies; 8+ messages in thread
From: Randy Brukardt @ 2024-08-24  4:27 UTC (permalink / raw)


"Simon Wright" <simon@pushface.org> wrote in message 
news:lyfrqynwpm.fsf@pushface.org...
> Lawrence D'Oliveiro <ldo@nz.invalid> writes:
>
>> On Tue, 20 Aug 2024 22:23:27 +0100, Simon Wright wrote:
>>
>>> "Randy Brukardt" <randy@rrsoftware.com> writes:
>>>
>>>> Accum_Subtype (we changed the name since it is a subtype, not a type;
>>>
>>> Amazing how a person (I) can have used Ada for ~40 years and still be
>>> hard put to it to describe the difference, at least in a case like
>>> this one, where the ARG members clearly see meanings that leave me
>>> lukewarm if not cold. Maybe "the heart of twilight"?
>>
>> I thought the difference was obvious. "subtype" is the C equivalent of
>> "typedef", just giving a new name to an existing type. So
>>
>>     subtype A is B;
>>
>> (where A and B are simple identifiers) is valid, whereas
>>
>>     type A is B;
>>
>> is not: a "type" declaration always creates a new type: you have to
>> write at least
>>
>>     type A is new B;
>>
>> and now you have two types with different names that are structurally
>> the same, but not compatible.
>
> Yes, I've understood that for a long time but ... ARM22 4.5.10(8,9)[1]
> say
>
> (8) The expected type for a reduction_attribute_reference shall be a
>    single nonlimited type.
>
> (9) In the remainder of this subclause, we will refer to nonlimited
>    subtypes Value_Type and Accum_Type of a
>    reduction_attribute_reference. ...
>
> and in AI 22-0011-1 [2] starting at 22-Oct-2021 5:25 PM,
>
> * SB: raises a series of observations,
> * STT: "... You really need to think of Accum_Type as a particular
>  *subtype*"
> * SB: "Ok, I was confused - Accum_Type is a subtype, not a type. So
>  a lot of my message was noise."
>
> If SB can be confused, so can I!

Which is why we changed the name - if SB can be confused, it is a good bet 
that there is something wrong with the wording. That's why I usually 
recommend bleeding edge users use the bleeding edge RM - no point in 
rediscovering all of the bugs that we already know about. Unfortunately, in 
this case, I'm the only one that has the bleeding edge RM because I haven't 
finished adding all of the approved AIs to it. This group is some that I've 
done, which is why the answer to your question was relatively easy to find.

                                 Randy. 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-08-24  4:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-13 12:36 Reduction expressions Simon Wright
2024-08-20  3:59 ` Randy Brukardt
2024-08-20 21:23   ` Simon Wright
2024-08-20 23:30     ` Lawrence D'Oliveiro
2024-08-20 23:41       ` Keith Thompson
2024-08-21  1:37         ` Lawrence D'Oliveiro
2024-08-21  7:47       ` Simon Wright
2024-08-24  4:27         ` Randy Brukardt

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