On 26.12.2021 17:40, Ryan Joseph via fpc-devel wrote:
I'm 99% certain using the method name "Invoke" would be rejected on the grounds 
of backwards compatibility.

Not to argue for the "procedure/function Invoke" syntax, but it hardly breaks backward 
compatibility. Only in the purest non-practical sense: "I maintain this code that always used 
to be rejected and suddenly it gets compiled".

Adding a new syntax using "default" like "function Add9(const N: Integer): Integer; 
default;"

That is pretty much the /old/ syntax.
I agree with Michael that it would mirror default properties nicely, but:
1) Are we most likely to name that "default method" or "call operator"?
2) We now have proper operator overloading; I would even argue that, were it added to 
Object Pascal much earlier, we would have had "operator Index" instead of 
default array properties;
3) I would rather reserve the DEFAULT directive on methods for default 
interface methods:
-------8<-------
type I = interface
        procedure Foo; default;
        // the above, IMO, looks better than
        //  procedure Foo; not abstract;
end;
procedure I.Foo; begin { default implementation } end;
-------8<-------

        class operator Call(....);

Again, the proposal is:
-------8<-------
type R = record
        operator Invoke(...)...;
end;
-------8<-------
Specifically:
A) without CLASS:
        1) Having to declare Self manually would be ridiculous;
        2) In interfaces, that method should be instance-virtual.
B) The name Invoke is required for compatibility with DCC.

Granted, for "operator", some hackery would still be required for 100% DCC 
compatibility:
-------8<-------
type MethRef = reference to procedure;
type C = class(TInterfacedObject, MethRef)
        // This needs to map to _operator_ MethRef.Invoke
        procedure Invoke;
end;
-------8<-------

it doesn't present any new syntax

So, in your book, introducing a /new/ operator identifier "doesn't present any new syntax" (and I 
agree), but semantically allowing the /existing/ directive DEFAULT to appear in the existing list of method 
directives is somehow "a new syntax". You have some interesting definition of "syntax".

--
βþ
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to