[fpc-devel] Closures via interfaces

Sven Barth pascaldragon at googlemail.com
Sun May 26 16:35:23 CEST 2013

On 26.05.2013 16:05, Sven Barth wrote:
> On 26.05.2013 12:12, Vasiliy Kevroletin wrote:
>> Hi all,
>> About 2 months ago there was a big discussion about closures(thread
>> "Delphi anonymous methods"). After this discussion I started work on
>> Delhi-like closures for fpc. I am far from finish and current
>> implementation is not perfect. But I already have positive results: it's
>> possible to declare and use anonymous functions. After few changes
>> closures will be able to capture variables. I created mantis#24481 to
>> handle this work. Everyone who is interested in closures and good in
>> compiler is welcome into mantis. I would be happy if someone looked into
>> changes and said few words.
>> I described details of proposed and partly implemented approach in
>> mantis. This is Delphi's approach. Some people call it "closures via
>> interfaces". In slightly modified way it will allow to capture variables
>> by value (which was requested in previous discussion). I like this
>> approach because it's simple: it doesn't require to change codegenerator
>> or rtl. On the other hand for each closure it creates new interface. And
>> almost for each closure it creates new class. As a result: space
>> overhead because of virtual tables and rtti.
>> My question to community is: what do you think about proposed
>> implementation? Are there arguments for another approach?
> Thank you for the update. I'm still looking at your changes, but one
> thing I noticed: please adhere to the coding style used in the compiler
> (look at pgenutil.pas for example). For example don't use "1 line
> if-statements" (e.g. "if x then foo;"), but put the statement into a
> seperate line.
> I should have told you this before you started, but I've forgotten it :(

Ah, now that I've reached the last commit I see that you've already 
adjusted most cases. Please change IsClosure to "is_closure" as well.


More information about the fpc-devel mailing list