> On Jun 6, 2022, at 2:02 AM, Jonas Maebe via fpc-pascal 
> <fpc-pascal@lists.freepascal.org> wrote:
> 
> On 2022-06-05 18:20, Anthony Walter via fpc-pascal wrote:
> 
>> As the "reference to" feature was recently added to fpc trunk, I'd like to 
>> ask if internally there are any penalties (performance perhaps) or drawbacks 
>> to using them in place of the more traditional "procedure" and "procedure of 
>> object" types?
> 
> The downside is that a "reference to" always gets wrapped in a 
> reference-counted interface, and hence is much more expensive than a place 
> procedural variable ("of object" or not).

First off I didn’t see Anthony’s original email, just like Sven says he doesn’t 
see mine. What’s going on here? I’m using a Gmail account because my personal 
domain was getting rejected for some reason, is Anthony on Gmail also? We need 
to get this fixed I think.

Anytime you assign to a reference it creates this interface wrapped object, 
even if you don’t call it. This is of course totally wasteful and in fact makes 
references not reliable as  a catch-all function pointer type since it comes 
with significant runtime overhead.

I think what the compiler needs to do is internally support a variant record 
type and switch to the correct function type at runtime. Something like this:

TCallback = record
  kind: byte;
  case byte of
    0: (proc: procedure);
    1: (ref: reference to procedure);
    2: (nested: procedure is nested);
    3: (obj: procedure of object);
end;

Does that sound correct? Personally what I want to see if a catch all type so I 
don’t need to make 4 different function aliases for each of FPCs callback types.

However as far as anonymous functions are concerned I was pleased to see that 
they can be can be assigned to other function pointer types so I can still use 
the feature in many cases.


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