Am 14.02.2021 um 13:30 schrieb Michael Van Canneyt via fpc-pascal:


On Sun, 14 Feb 2021, Sven Barth via fpc-pascal wrote:

So whether it be this, or just an improvement on the Interfaces we already have, I'd definitely personally be in favor of something that "works like Interfaces except minus the negative performance implications."

There are no significant performance implications of interfaces. They're essentially a virtual method call, something that one is doing all day long with Object Pascal classes.

I think the "performance implications" is more referring to memory management.

Interfaces means an extra object per interface, so more objects on the heap with all the extra memory management that implies.

No, interfaces by *themselves* don't mean that. An interface instance is merely a shifted Self pointer that points to the static VMT of which the entries correct the Self pointer again upon the method call. This can be seen in GetInterfaceByEntry in rtl/inc/objpas.inc (the core function dealing with the casting of class to interface).

That is why I think that a 'trait' using an object/advanced record has it's advantage: There is only 1 continuous memory block for a class implementing
traits.

For delegation it is true that memory allocation is involved, but let's be fair here: this instance is normally allocated together with its parent instance and thus the performance impact only adds to the already costly instantiation of the parent instance. And if you really need to worry about heap fragmentation then you have other problems in my opinion...

That said, as I wrote, one could in principle allow the use of records and objects for the delegation as well, after all delegation classes don't need to implement the interface either and the compiler needs to create appropriate thunks anyway.

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

Reply via email to