* Re: Generic Zero Length Array
2008-02-22 13:53 ` Egil Høvik
@ 2008-02-22 13:55 ` shaunpatterson
2008-02-22 14:11 ` Georg Bauhaus
2008-02-22 19:25 ` Randy Brukardt
` (2 subsequent siblings)
3 siblings, 1 reply; 19+ messages in thread
From: shaunpatterson @ 2008-02-22 13:55 UTC (permalink / raw)
Yes, I was afraid that would be my only option.
Thank you.
--
Shaun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 13:53 ` Egil Høvik
2008-02-22 13:55 ` shaunpatterson
@ 2008-02-22 19:25 ` Randy Brukardt
2008-02-22 19:25 ` Randy Brukardt
2008-02-22 19:25 ` Randy Brukardt
3 siblings, 0 replies; 19+ messages in thread
From: Randy Brukardt @ 2008-02-22 19:25 UTC (permalink / raw)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1185 bytes --]
"Egil H�vik" <egilhovik@hotmail.com> wrote in message
news:2446841a-8bb0-46bc-94ed-099e4e0ca74c@k2g2000hse.googlegroups.com...
>On Feb 22, 2:31 pm, shaunpatter...@gmail.com wrote:
>> I have a bit of legacy code in my system that I am trying to remove
>> all warnings from.
>>
>> The package is a generic -- with:
>>
>> type Element is (<>);
>> type Element_List is array (Indexing range <>) of Element;
>>
>> I have been stumped by one compiler warning where one of the functions
>> needs to return a zero-length empty generic array:
...
>A new generic parameter Null_Element would do the trick, but
>that means changing code wherever the generic is used...
>
>type Element is (<>);
>type Element_List is array (Indexing range <>) of Element;
>Null_Element : Element;
>
>then you could rewrite the above code to
>
>if Error_Condition then
> return Element_List'(Indexing'First..Indexing'First-1 => Null_Element);
>end if;
If you are not limited to Ada 95, you can use the <> here, and then you
don't need the extra generic parameter:
if Error_Condition then
return Element_List'(Indexing'First..Indexing'First-1 => <>);
end if;
Randy.
--
~egilhh
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 13:53 ` Egil Høvik
2008-02-22 13:55 ` shaunpatterson
2008-02-22 19:25 ` Randy Brukardt
@ 2008-02-22 19:25 ` Randy Brukardt
2008-02-22 19:25 ` Randy Brukardt
3 siblings, 0 replies; 19+ messages in thread
From: Randy Brukardt @ 2008-02-22 19:25 UTC (permalink / raw)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1185 bytes --]
"Egil H�vik" <egilhovik@hotmail.com> wrote in message
news:2446841a-8bb0-46bc-94ed-099e4e0ca74c@k2g2000hse.googlegroups.com...
>On Feb 22, 2:31 pm, shaunpatter...@gmail.com wrote:
>> I have a bit of legacy code in my system that I am trying to remove
>> all warnings from.
>>
>> The package is a generic -- with:
>>
>> type Element is (<>);
>> type Element_List is array (Indexing range <>) of Element;
>>
>> I have been stumped by one compiler warning where one of the functions
>> needs to return a zero-length empty generic array:
...
>A new generic parameter Null_Element would do the trick, but
>that means changing code wherever the generic is used...
>
>type Element is (<>);
>type Element_List is array (Indexing range <>) of Element;
>Null_Element : Element;
>
>then you could rewrite the above code to
>
>if Error_Condition then
> return Element_List'(Indexing'First..Indexing'First-1 => Null_Element);
>end if;
If you are not limited to Ada 95, you can use the <> here, and then you
don't need the extra generic parameter:
if Error_Condition then
return Element_List'(Indexing'First..Indexing'First-1 => <>);
end if;
Randy.
--
~egilhh
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 13:53 ` Egil Høvik
` (2 preceding siblings ...)
2008-02-22 19:25 ` Randy Brukardt
@ 2008-02-22 19:25 ` Randy Brukardt
2008-02-22 23:01 ` Adam Beneschan
3 siblings, 1 reply; 19+ messages in thread
From: Randy Brukardt @ 2008-02-22 19:25 UTC (permalink / raw)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1185 bytes --]
"Egil H�vik" <egilhovik@hotmail.com> wrote in message
news:2446841a-8bb0-46bc-94ed-099e4e0ca74c@k2g2000hse.googlegroups.com...
>On Feb 22, 2:31 pm, shaunpatter...@gmail.com wrote:
>> I have a bit of legacy code in my system that I am trying to remove
>> all warnings from.
>>
>> The package is a generic -- with:
>>
>> type Element is (<>);
>> type Element_List is array (Indexing range <>) of Element;
>>
>> I have been stumped by one compiler warning where one of the functions
>> needs to return a zero-length empty generic array:
...
>A new generic parameter Null_Element would do the trick, but
>that means changing code wherever the generic is used...
>
>type Element is (<>);
>type Element_List is array (Indexing range <>) of Element;
>Null_Element : Element;
>
>then you could rewrite the above code to
>
>if Error_Condition then
> return Element_List'(Indexing'First..Indexing'First-1 => Null_Element);
>end if;
If you are not limited to Ada 95, you can use the <> here, and then you
don't need the extra generic parameter:
if Error_Condition then
return Element_List'(Indexing'First..Indexing'First-1 => <>);
end if;
Randy.
--
~egilhh
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 19:25 ` Randy Brukardt
@ 2008-02-22 23:01 ` Adam Beneschan
2008-02-23 9:30 ` Dmitry A. Kazakov
2008-02-23 14:27 ` Robert A Duff
0 siblings, 2 replies; 19+ messages in thread
From: Adam Beneschan @ 2008-02-22 23:01 UTC (permalink / raw)
On Feb 22, 11:25 am, "Randy Brukardt" <ra...@rrsoftware.com> wrote:
> "Egil Høvik" <egilho...@hotmail.com> wrote in message
>
> news:2446841a-8bb0-46bc-94ed-099e4e0ca74c@k2g2000hse.googlegroups.com...
>
>
>
> >On Feb 22, 2:31 pm, shaunpatter...@gmail.com wrote:
> >> I have a bit of legacy code in my system that I am trying to remove
> >> all warnings from.
>
> >> The package is a generic -- with:
>
> >> type Element is (<>);
> >> type Element_List is array (Indexing range <>) of Element;
>
> >> I have been stumped by one compiler warning where one of the functions
> >> needs to return a zero-length empty generic array:
> ...
> >A new generic parameter Null_Element would do the trick, but
> >that means changing code wherever the generic is used...
>
> >type Element is (<>);
> >type Element_List is array (Indexing range <>) of Element;
> >Null_Element : Element;
>
> >then you could rewrite the above code to
>
> >if Error_Condition then
> > return Element_List'(Indexing'First..Indexing'First-1 => Null_Element);
> >end if;
>
> If you are not limited to Ada 95, you can use the <> here, and then you
> don't need the extra generic parameter:
>
> if Error_Condition then
> return Element_List'(Indexing'First..Indexing'First-1 => <>);
> end if;
Drat, I wish I'd thought of that. Yes, this seems best.
Way back before Ada 95, someone made a proposed language array to add
a "null array" aggregate to the language, so that you could write an
aggregate to represent a zero-element array without needing a fake
value for the elements. I thought this was a great idea and could
never understand why it wasn't adopted. It would have solved the
problem here. But the <> syntax of Ada 2005 obviates the need for
something like that. I don't think we need "null record" (i.e. in
aggregates) any more either, although certainly nobody is going to
suggest removing it.
[Actually, there's one case where you still can't specify a null array
aggregate, and that's where the index type is either "mod 1" or an
enumeration type with one value:
type Enum is (This_One);
type Arr is array (Enum range <>) of Anything;
Now go ahead and try to specify a zero-element array aggregate of type
Arr. You can't. But this is a pretty pathological case so it's not
worth trying to change the language for it.]
-- Adam
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 23:01 ` Adam Beneschan
@ 2008-02-23 9:30 ` Dmitry A. Kazakov
2008-02-23 14:27 ` Robert A Duff
1 sibling, 0 replies; 19+ messages in thread
From: Dmitry A. Kazakov @ 2008-02-23 9:30 UTC (permalink / raw)
On Fri, 22 Feb 2008 15:01:02 -0800 (PST), Adam Beneschan wrote:
> [Actually, there's one case where you still can't specify a null array
> aggregate, and that's where the index type is either "mod 1" or an
> enumeration type with one value:
>
> type Enum is (This_One);
> type Arr is array (Enum range <>) of Anything;
>
> Now go ahead and try to specify a zero-element array aggregate of type
> Arr. You can't. But this is a pretty pathological case so it's not
> worth trying to change the language for it.]
I think it would, because the problem is that a null range cannot
specified. And more generally is that ranges aren't first-class citizens.
The language would be better if that were fixed.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-22 23:01 ` Adam Beneschan
2008-02-23 9:30 ` Dmitry A. Kazakov
@ 2008-02-23 14:27 ` Robert A Duff
2008-02-23 16:16 ` Dmitry A. Kazakov
2008-02-25 16:41 ` Adam Beneschan
1 sibling, 2 replies; 19+ messages in thread
From: Robert A Duff @ 2008-02-23 14:27 UTC (permalink / raw)
Adam Beneschan <adam@irvine.com> writes:
> Way back before Ada 95, someone made a proposed language array to add
> a "null array" aggregate to the language, so that you could write an
> aggregate to represent a zero-element array without needing a fake
> value for the elements. I thought this was a great idea and could
> never understand why it wasn't adopted. It would have solved the
> problem here. But the <> syntax of Ada 2005 obviates the need for
> something like that.
I still think it's a language design flaw that you can't write a
zero-element or one-element positional aggregate.
>...I don't think we need "null record" (i.e. in
> aggregates) any more either, although certainly nobody is going to
> suggest removing it.
Why don't we need that?
> [Actually, there's one case where you still can't specify a null array
> aggregate, and that's where the index type is either "mod 1" or an
> enumeration type with one value:
>
> type Enum is (This_One);
> type Arr is array (Enum range <>) of Anything;
>
> Now go ahead and try to specify a zero-element array aggregate of type
> Arr. You can't.
Right. Not just aggregates -- you can't create any zero-element array
of type Arr.
>...But this is a pretty pathological case so it's not
> worth trying to change the language for it.]
If it were worth it, what would be the best change?
I suppose ranges could be characterized by 'First/'Length,
instead of 'First/'Last. And eliminate 'Last from the language.
Or else say 'Last raises Constraint_Error if 'First = 'Base'First
and 'Length = 0.
- Bob
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-23 14:27 ` Robert A Duff
@ 2008-02-23 16:16 ` Dmitry A. Kazakov
2008-02-25 16:41 ` Adam Beneschan
1 sibling, 0 replies; 19+ messages in thread
From: Dmitry A. Kazakov @ 2008-02-23 16:16 UTC (permalink / raw)
On Sat, 23 Feb 2008 09:27:26 -0500, Robert A Duff wrote:
> I suppose ranges could be characterized by 'First/'Length,
> instead of 'First/'Last. And eliminate 'Last from the language.
Is Index'First any better than Index'Last? Null range does not have any
indices in it. That includes Index'First. Otherwise each element of Index
would have an individual null range associated with it.
(I think there should be something like null of Universal_Range.)
> Or else say 'Last raises Constraint_Error if 'First = 'Base'First
> and 'Length = 0.
A'Range /= A'First..A'Last?
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-23 14:27 ` Robert A Duff
2008-02-23 16:16 ` Dmitry A. Kazakov
@ 2008-02-25 16:41 ` Adam Beneschan
2008-02-25 19:14 ` Robert A Duff
1 sibling, 1 reply; 19+ messages in thread
From: Adam Beneschan @ 2008-02-25 16:41 UTC (permalink / raw)
On Feb 23, 6:27 am, Robert A Duff <bobd...@shell01.TheWorld.com>
wrote:
>
> >...I don't think we need "null record" (i.e. in
> > aggregates) any more either, although certainly nobody is going to
> > suggest removing it.
>
> Why don't we need that?
Because if Rec_Type is a record with no components, Rec_Type'(others
=> <>) will work (and has the same effect as (null record)).
Or is there some more complex cases where the "null record" syntax is
still needed in aggregates?
-- Adam
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Generic Zero Length Array
2008-02-25 16:41 ` Adam Beneschan
@ 2008-02-25 19:14 ` Robert A Duff
0 siblings, 0 replies; 19+ messages in thread
From: Robert A Duff @ 2008-02-25 19:14 UTC (permalink / raw)
Adam Beneschan <adam@irvine.com> writes:
> On Feb 23, 6:27 am, Robert A Duff <bobd...@shell01.TheWorld.com>
> wrote:
>>
>> >...I don't think we need "null record" (i.e. in
>> > aggregates) any more either, although certainly nobody is going to
>> > suggest removing it.
>>
>> Why don't we need that?
>
> Because if Rec_Type is a record with no components, Rec_Type'(others
> => <>) will work (and has the same effect as (null record)).
Ah, I see what you mean.
I still want "null record", because it means something different from
"others". The "null record" means I assert that there are no
components, and please slap me with a compile-time error if
that's not true (or no longer true). The "others" means that
I want all components to be default-initialized, including
all the ones that have not yet been invented.
If somebody changes "type T is null record" to
"type T is record Blah : Integer; end record;"
I want an error on all the (null record) aggregates.
> Or is there some more complex cases where the "null record" syntax is
> still needed in aggregates?
No.
- Bob
^ permalink raw reply [flat|nested] 19+ messages in thread