comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <no.spam@no.spam.com>
Subject: Re: Generic procedures and their parameters
Date: Wed, 06 Sep 2006 14:36:24 +0200
Date: 2006-09-06T14:36:24+02:00	[thread overview]
Message-ID: <edmfc8$di4$1@sunnews.cern.ch> (raw)
In-Reply-To: <w0vh1ugsvkj1$.2fnx5mt0tplm$.dlg@40tude.net>

Dmitry A. Kazakov wrote:

>> eneric
>>     type Index_Type   is (<>);
>>     type Element_Type is private;
>>     type Array_Type   is array (Index_Type range <>) of Element_Type;
>>     with function "<" (Left, Right : in Element_Type) return Boolean is <>;
>> procedure Sort(To_Sort : in out Array_Type);
>>
>> My question is: what's the purpose of the third parameter (Array_Type)? 
>> Isn't it implied by the first two and therefore just redundant?
> 
> Reverse. Actually Index_Type and Element_Type are redundant. In a better
> Ada it should be:
> 
>    generic
>       type Container_Type is array (<>) of <>;
>              -- or "(<>) is limited private array"
>       with function "<" (Left, Right : in Container_Type'Element)
>          return Boolean is <>;
>    procedure Sort (To_Sort : in out Container_Type);

OK, it makes perfect sense.

> [ Even better it be non-generic:
> 
>    procedure Sort (To_Sort : in out Container_Of_Ordered'Class);
> 
> where each container type (like an array) be a member of the class, if its
> elements are in Ordered'Class. ]

But then, you would need to have even such fundamental things like 
Integer belong to Ordered'Class. It's a shaky ground.

> Regarding Array_Type being implied, it is not. You can have any number of
> array types based on exactly same combination of index and element types.
> These types will be different types:
> 
> type I is ...;
> type E is ...;
> type Array1 is array (I range <>) of E;
> type Array2 is array (I range <>) of E;

> The types Array1 and Array2 are distinct types.

And now I see. I'm still having troubles with the fact that 
"granularity" of type system in Ada can be much smaller than what can be 
achieved with structural differences only.

> The reverse is a different story. It is a pity that Ada does not have
> attributes to get the index and element types from the array type
> (container type).

Yes.

> The next step would be getting "<" from the element type,
> which would eliminate a need to have Sort generic.

No, I disagree. There is a place for generic subprograms, otherwise we'd 
have everything in a single hierarchy with Object at the top. It's not a 
coincidence that "other languages" drift towards supporting generics, 
even if they already had such single-rooted hierarchies.


-- 
Maciej Sobczak : http://www.msobczak.com/
Programming    : http://www.msobczak.com/prog/



  reply	other threads:[~2006-09-06 12:36 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-06  8:51 Generic procedures and their parameters Maciej Sobczak
2006-09-06  9:43 ` Dmitry A. Kazakov
2006-09-06 12:36   ` Maciej Sobczak [this message]
2006-09-06 13:11     ` Robert A Duff
2006-09-06 14:14       ` Maciej Sobczak
2006-09-06 15:09         ` Dmitry A. Kazakov
2006-09-06 16:35           ` Georg Bauhaus
2006-09-07  7:32             ` Dmitry A. Kazakov
2006-09-07  6:48               ` Georg Bauhaus
2006-09-07 10:19                 ` Dmitry A. Kazakov
2006-09-08  9:11           ` Maciej Sobczak
2006-09-08 10:19             ` Dmitry A. Kazakov
2006-09-09 14:49         ` Robert A Duff
2006-09-09 15:34           ` Dmitry A. Kazakov
2006-09-09 23:26           ` Jeffrey R. Carter
2006-09-10 11:49             ` Robert A Duff
2006-09-10 19:43               ` Jeffrey R. Carter
2006-09-06 13:02   ` Robert A Duff
2006-09-06 14:09     ` Dmitry A. Kazakov
2006-09-08  3:35   ` Randy Brukardt
2006-09-08  7:21     ` Dmitry A. Kazakov
2006-09-09  1:29       ` Randy Brukardt
2006-09-09  7:14         ` Dmitry A. Kazakov
2006-09-09 14:32         ` Robert A Duff
2006-09-06 12:56 ` Robert A Duff
2006-09-07  2:47 ` Steve
2006-09-07  7:47   ` Dmitry A. Kazakov
replies disabled

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