[fpc-pascal] Traits Proposal
Ryan Joseph
genericptr at gmail.com
Sun Feb 14 19:22:49 CET 2021
> On Feb 14, 2021, at 11:14 AM, Sven Barth via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
>
> It's a runtime conversion, but normally you don't do the conversion for every method call, but instead cache the interface (or work solely with the interface), thus the performance impact through the conversion amortizes (and again, there's so memory allocation by the conversion itself, of course if the interface getter in case of a interface delegation does a lazy initialization that's different, but the conversion itself does not require an allocation).
For default properties no conversion needs to take place even because the compiler can simply find the correct method and return a modified self which points to the struct, like "self.fMyRec" in the example below. In this case the interface doesn't really do anything does it? I think the VMT table is modified and you should probably use CORBA interface unless you want reference counting and extra baggage when you instantiate the class (I assume). If we use records then the memory should be unified (which is good) and with CORBA interfaces no significant baggage during instantiation. Correct me where I'm wrong please.
=====================
type
TMyRec = record
procedure DoX;
end;
IMyIntf = interface
procedure DoX;
end;
TMyClass = class(TInterfacedObject, IMyIntf)
private
fMyRec: TMyRec;
public
property MyRec: TMyRec read fMyRec implements IMyIntf; default;
end;
Regards,
Ryan Joseph
More information about the fpc-pascal
mailing list