From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: User-defined type attributes (replacing genericity)
Date: Fri, 14 Mar 2008 15:48:59 +0100
Date: 2008-03-14T15:48:59+01:00 [thread overview]
Message-ID: <k4zvct2zqh5t.10e4n7n078983.dlg@40tude.net> (raw)
In-Reply-To: 1205505100.6445.60.camel@K72
On Fri, 14 Mar 2008 15:31:40 +0100, Georg Bauhaus wrote:
> On Fri, 2008-03-14 at 10:00 +0100, Dmitry A. Kazakov wrote:
>
>> Right, but this also implies that there is no need to have generics at all.
>> A class-wide object does all what needed:
>>
>> generic
>> type S is new T with private;
>> procedure Foo (X : in out S);
>>
>> can be replaced by:
>>
>> procedure Foo (X : in out T'Class);
>
> I assume your answer to what follows will be that Ada semantics
> should be put under programmer control,
What's wrong with having control over the semantics?
> that range should be and interface type, etc. ;-)
Shouldn't it?
> But anyway, even that doesn't change things.
>
> I just looked at the effects. Not promising on two accounts,
> but more rattling regularity. Which might have its place.
>
> Replacing genericity means every generic instance is replaced
> with an invocation of just one procedure.
No, only calls to instances of generic bodies.
> However, for objects of
> specially crafted types. One type needs to be available for
> mimicking each generic.
>
> I had two types
>
> type Simple is range 1 .. 100;
> -- predefined "<="
>
> type Data is record
> amount: Natural;
> wpi: Float;
> end record;
>
> function "<="(a, b: Data) return Boolean;
>
> According to the suggestion to abandon generics I have had instead,
> basically,
>
> procedure Foo (X, Y, Z : in out T'Class) is
> function Is_Highest(V: T) return Boolean is
> begin
> return X <= V and then Y <= V and then Z <= V;
> end Is_Highest;
> begin
> ...
>
> The comparison function "<=" needs to be one of the primitive
> operations of all types in T'Class. (Hence a wrapper type becomes
> necessary for range type Simple.)
No, what you need is an interface implemented by both. You need to declare
Simple implementing Ordered. That will tell the compiler that the
predefined "<=" is an implementation of Ordered's "<=".
> (I'll leave out the problem of local variables of type T'Class.)
> (I'll leave out required variance programming work, too.)
>
> With generics, I got two nicely specialized instances of Foo,
> one for the range type, the other for the composite type.
> The effect is that function Is_Highest will use "<=" as I
> would expect for a range type. Small code, obvious, and
> efficient. Similarly, the "<=" of the Data instance's
> Is_Highest function corresponds directly to both the definition
> and to the expectation.
>
> Without generics, there is only one Is_Highest, as might be
> expected.
Why there have to be two? The whole idea of generics was to have *one*
generic body. This is why it is called generic [programming].
> Inlining did not help. In fact, I wouldn't expect inlining to be
> readily available with 'Class---unless of course
> replacing generics should also entail compilers that look at
> the entire program. Then, maybe, a few more thing can be
> "optimized" at compile time.
You mixing two different problems. BTW, I answered both in my earlier
posts. So I repeat it short. If you want to constrain the dispatching table
to the diagonal you do it
procedure Foo (X, Y, Z : in out T)
This requires X, Y, Z to have exactly same type. The language of
constraints is a different theme. Do not sell a limitation of generics to a
certain type of constraint as genuine advantage.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2008-03-14 14:48 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-12 18:58 User-defined type attributes Eric Hughes
2008-03-12 21:23 ` Dmitry A. Kazakov
2008-03-13 18:32 ` Eric Hughes
2008-03-13 19:58 ` Dmitry A. Kazakov
2008-03-14 1:46 ` Randy Brukardt
2008-03-14 1:46 ` Randy Brukardt
2008-03-14 9:00 ` Dmitry A. Kazakov
2008-03-14 14:36 ` User-defined type attributes (replacing genericity) Georg Bauhaus
2008-03-15 3:04 ` User-defined type attributes Randy Brukardt
2008-03-15 9:33 ` Dmitry A. Kazakov
2008-03-14 14:31 ` User-defined type attributes (replacing genericity) Georg Bauhaus
2008-03-14 14:48 ` Dmitry A. Kazakov [this message]
2008-03-14 17:51 ` Eric Hughes
2008-03-14 18:58 ` Dmitry A. Kazakov
2008-03-14 20:19 ` Eric Hughes
2008-03-15 4:01 ` Randy Brukardt
2008-03-14 16:58 ` Georg Bauhaus
2008-03-14 18:39 ` Dmitry A. Kazakov
2008-03-15 9:39 ` Dmitry A. Kazakov
2008-03-14 1:46 ` User-defined type attributes Randy Brukardt
2008-03-14 3:55 ` Eric Hughes
2008-03-14 9:01 ` Dmitry A. Kazakov
2008-03-14 18:04 ` Eric Hughes
2008-03-14 1:46 ` Randy Brukardt
2008-03-14 4:41 ` Eric Hughes
2008-03-15 3:20 ` Randy Brukardt
2008-03-17 4:38 ` Eric Hughes
2008-03-17 21:03 ` Randy Brukardt
2008-03-17 21:58 ` Eric Hughes
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox