On 22.11.2015 00:04, Anthony Walter wrote:
Sven, first off, congratulations and we thank you for so much good work.
in the future do you see a time when type inference could be used?
S := Add('hello ', 'world');
I := Add(1, 2);
I honestly don't think that type inference should become part of Pascal,
it's simply not part of the language philosophy and it would also not
play well with the need for "specialize" in ObjFPC mode and as long as
Delphi doesn't introduce it I won't add it only for mode Delphi either.
Which then brings to mind, will it be possible to get use references to
generic routines?
If you have read the limitations part of my mail then you should know
that this is a known limitation and to be addressed in the future.
type
TTransform<T> = function<T>(const A, B: T): T;
FPC already supports this, though the syntax is
=== code begin ===
type
TTransform<T> = function(const A, B: T): T;
=== code end ===
Or with added "generic" keyword in case of non-Delphi modes.
var
Transform: TTransform<T>;
This is not a valid type declaration and never will be, because "T" is
not defined. The correct one is
=== code begin ===
var
Transform: TTransform<String>;
=== code end ===
begin
Transform := Add<String>;
WriteLn(Transform('hello', 'world'));
Transform := Min<String>;
WriteLn(Transform('hello', 'world'));
Transform := Max<String>;
WriteLn(Transform('hello', 'world'));
end;
This would work once assignments of routines work. In non-Delphi modes
the syntax will be
=== code begin ===
Transform := @specialize Add<String>;
Writeln(Transform('hello', 'world'));
=== code end ===
function Print<T>(const A, B: T; Transform: TTransform<T>);
begin
WriteLn(Transform(A, B));
end;
begin
Print('hello', 'world', Add); // type inference
Print('hello', 'world', Min);
Print('hello', 'world', Max);
end;
No type inference.
Regards,
Sven
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel