Am 14.02.2021 um 19:22 schrieb Ryan Joseph via fpc-pascal:

On Feb 14, 2021, at 11:14 AM, Sven Barth via fpc-pascal 
<fpc-pascal@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.

Again, the point of the interface would be to control which methods and properties of the delegated  type would be available. Also it would allow for seamless integration with the RTTI as it's possible to query the implemented interface of a class and to retrieve a reference to it, thus it would be possible to access this at runtime as well.

The compiler will generate a VMT for the interface with method thunks that adjust the Self pointer so that it works correctly. The GetInterfaceByEntry function uses this static data to generate an adjusted Self value that callers can use.

Also for the difference between COM and raw interfaces the only real difference is that a call to _AddRef will be inserted. But I agree that it should also work with raw interfaces (if it doesn't already).

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to