> On Nov 28, 2018, at 11:25 PM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> You're not wrong, but a type alias is definitely the wrong way. 
> But that is a completely different topic, one that I'm not willing to discuss 
> right now, aside from "we don't support something like that”.

Ok, maybe something to think about later. Compile time performance could be a 
reason to pursue down the road.

> If all that’s involved is comparing params types to generic types then that 
> looks like a relatively simple solution.  Const generic params may have 
> complicated this some however.
> 
> Yes, all generic parameters need to be part of the routine's parameters and 
> constant parameters indeed won't work in that case. 

What are the performance implications of specializing all these types across a 
code base? I’ve heard c++ developers mention the terrible performance of 
templates and I think that’s because of the inferred types and inability to 
specialize once (like FPC does for all other generics except procs).

Looking at this now I think that each unit that uses an inferred specialization 
will produce a unit procedure for just that unit. Is that right?

Here’s an example which specializes 3 generics (they’re shared right?) across 5 
procedure calls.

generic procedure DoThis<T>(msg:T);
begin
end;

generic procedure DoThis<T>(msg:T;param1:T);
begin
end;

generic procedure DoThis<T>(msg:T;param1:integer);
begin
end;

begin
        DoThis('hello');        // specialize DoThis<string>('hello');
        DoThis(1);              // specialize DoThis<integer>(1);
        DoThis('a','b');        // specialize DoThis<string>('a','b’);
        DoThis(1,1);            // specialize DoThis<integer>(1,1);
        DoThis('hello',1);      // specialize DoThis<string>(‘hello',1);

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to