> On Feb 16, 2021, at 6:51 AM, Benito van der Zander via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> Interfaces are extremely slow. Virtual method calls are also slow. I have 
> been using interfaces for reference counting, and have been thinking to 
> replace it all with managed records because they are so slow (unfortunately 
> records can also be slow because fpc does not always keep them in registers 
> even if they are pointer sized)

It's a real concern indeed. What we're proposing with a default property 
doesn't need to have these impacts but the class instantiation is going to be 
affected I think. 

> 
> There we have:
> 
> * slower creation of the class, because each implemented interface adds 
> another VMT reference to the class which needs to be initialized.

How bad is this? We need to make a test case we can profile. For example if you 
have a game that creates 1000 classes 60 frames per second. If adding 
interfaces to the classes hurts this process we may have a deal breaker.

> 
> * slower method calling because of the wrapper function

You mean for fields? We can inline those I believe but it's not fun boiler 
plate for sure.

> 
> * extremely slow casting an interface to the class. Never cast an interface, 
> better add a method to the interface returning a class reference
> 

We can avoid casting using the default property but it will still be possible 
to cast the class if you want to. 


> * slow reference counting. Especially if it is thread safe and exception safe 
> with the implicit exception block

It's a whole other topic but FPC needs opt-in ARC at the language level for 
classes. Interfaces are not only slow but then you need to pass around a 
reference to the interface instead of the class you actually care about. It 
makes no sense to me whatsoever.

Regards,
        Ryan Joseph

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

Reply via email to