[fpc-pascal] [fpc-devel] Nested function closures

Sven Barth pascaldragon at googlemail.com
Tue Apr 27 22:17:30 CEST 2021


Am 27.04.2021 um 19:56 schrieb Michael Van Canneyt via fpc-pascal:
>
>
> On Tue, 27 Apr 2021, Ryan Joseph via fpc-pascal wrote:
>
>>
>>
>>> On Apr 27, 2021, at 9:58 AM, Michael Van Canneyt 
>>> <michael at freepascal.org> wrote:
>>>
>>> Wait.
>>>
>>> I asked Sven to make sure that nested functions are under ALL 
>>> circumstances
>>> usable as closures or can be used instead of anonymous functions.
>>>
>>> Pas2js already supports this, and I want FPC and Pas2JS to be 
>>> compatible in
>>> this regard.
>>>
>>> So as Sven wrote, you would be duplicating effort, needlessly, since 
>>> it has
>>> to work always... If the compiler can decide that the heap interface 
>>> is not
>>> needed and optimize it away: so much the better. But I doubt this 
>>> will be
>>> possible.
>>
>> Maybe we're misunderstanding each other then. I'm responding to Sven 
>> when he says:
>>
>>> Getting rid of the interface only works in very narrow circumstances 
>>> that are so seldom in real world code that it is not worth the effort.
>>
>>
>> I.e.  all closures will be interface based because there are not enough
>> real world use cases to support any alternative.  Which is contrary to
>> what you're saying that nested functions/closure will be compatible 
>> types.
>
> Why is this contrary ?
>
> As I understand it:
>
> a closure is used for arguments of type 'reference to procedure'.
>
> In delphi, this procedure can be a real method or an anonymous function.
>
> So why should you not be able to use a local function instead of an
> anonymous function ?
>
> How the closure is implemented internally is irrelevant from the 
> programmer's point of view. As long as the signature is correct, 
> presumably the compiler can figure out what needs to be done: create 
> an interface (with all that implies) or not.

It will *always* create an interface. It's just how the compiler will 
wrap it.

Regards,
Sven

PS: And who was the one who switched to fpc-pascal? O.ó


More information about the fpc-pascal mailing list