Continued from our discussion at https://bugs.freepascal.org/view.php?id=24481.
> if the compiler devs will allow me as soon as this is finished I want to > allow the existing nested functions functionality to work with anonymous > functions, so at the very least we don't need to generate the expensive > interface based object which often times is not even needed. At that point we > would need to make nested functions inline-able, which they are currently > not. But we're not there yet so lets not complicated anything by proposing > extensions to a feature that doesn't even exist yet. Sven replies: > > 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'm referring to my test I did a few years ago (https://github.com/graemeg/freepascal/compare/master...genericptr:anon_funcs) where I say we can use existing nested functions as a closure when passing is not required. As you can see I already implemented this quite easily but it is not related to the new forthcoming closures feature. I did in fact try to replace the interface with a record on the old closures branch but I ran into many problems I decided it wasn't the best route. Indeed there are many times where we don't want a heap allocated interface you can pass around but rather a simple inline function pointer like below. Consider this loop is run 60 times a second and allocating a useless class every time for no gain. This could easily be 1000*60=60,000 constructions and allocations of a class. for i := 0 to entities.Count - 1 do begin value := entities[i]; value.SortEntities(function(a, b: TEntity): integer begin // do stuff end ); end; So anyways what I propose is if a closure is never passed outside of scope (i.e. temporary) then use anonymous nested functions instead (like in my GitHub branch). If this is an acceptable approach I will personally do what is required to get it implemented along side the real closures. Regards, Ryan Joseph _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel