* 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