Talk About Network



Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Ada > Re: User-define...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 2 Topic 5598 of 5697
Post > Topic >>

Re: User-defined type attributes (replacing genericity)

by Georg Bauhaus <rm.plus-bug.tsoh@[EMAIL PROTECTED] > Mar 14, 2008 at 03:31 PM

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, that range should be
and interface type, etc. ;-) 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. 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.)

(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. 

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.




 2 Posts in Topic:
Re: User-defined type attributes (replacing genericity)
Georg Bauhaus <rm.plus  2008-03-14 15:31:40 
Re: User-defined type attributes (replacing genericity)
"Dmitry A. Kazakov&q  2008-03-14 15:48:59 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed May 14 10:58:32 CDT 2008.