> On Nov 28, 2018, at 7:26 PM, Sven Barth via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> Because that is not supposed to work. Generic routines are *routines*, not 
> types. You can't define aliases for routines either, not to mention the 
> problems with scoping as generic methods exist as well. 

It seems natural you could specialize a generic procedure because you can do 
this for all other generic types. Maybe a type isn’t the right way but it feels 
like there should be some way to specialize the procedure header outside of a 
begin/end block. I know you can't make aliases to procedures but generics are 
more of “instantiating a template” which falls outside the scope the language 
in general.

> 
> Generic routines however have a different boon in Delphi that I plan to add 
> as well: inference of the type parameters based on the parameters the user 
> passed. In that case the type parameter clause as well as the "specialize" in 
> non-Delphi modes would not need to be used and it would look like a normal, 
> non-generic call. 

That’s probably the best way (Swift does this and I always wondered why FPC 
doesn’t) but it won’t work unless the parameters contain the generic parameter, 
which is a minority of generics functions anyways.
 
Just to be sure, you mean like this?

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

begin
        
        DoThis(‘hello’); // compiles as “specialize DoThis<string>(‘hello’)” 
because param types match generic parameter types

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.

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