[fpc-devel] Delphi anonymous methods

Sven Barth pascaldragon at googlemail.com
Mon Mar 4 13:51:13 CET 2013


Am 04.03.2013 13:23, schrieb Michael Van Canneyt:
>
>
> On Mon, 4 Mar 2013, Mattias Gaertner wrote:
>
>> On Mon, 04 Mar 2013 11:17:53 +0000
>> Martin <lazarus at mfriebe.de> wrote:
>>
>>> On 04/03/2013 04:54, Boian Mitov wrote:
>>>> Here is example:
>>>>
>>>> Parallel execution with selection of executor:
>>>>
>>>> for i := 0 to AMaxScaleIndex - 1 do
>>>>  begin
>>>>  APerIterationLocations.Add( TRTDynamicList<TVLImageRect>.Create() );
>>>>  AExecutionTask.Add( AExecutor.Execute(
>>>>      procedure()
>>>>      begin
>>>>        ProcessOne( levelScale[ i ], img, hitThreshold, winStride,
>>>> padding, APerIterationLocations[ i ] );
>>>>      end
>>>>    ));
>>>>
>>>>  end;
>>>>
>>>> In this case, not only you save declaration, you save the need to
>>>> write a whole new class just for the task.
>>>> This code reduced well over 30 lines of code alone.
>>>> I have a lot of other examples as well ;-) .
>>>
>>> Ok, I can see the closure helping, but why the anonymous procedure?
>>>
>>> If FPC would offer something like this:
>>>
>>> Procedure Foo;
>>> var
>>>    // your locals
>>>       procedure  Bar(); closure;
>>>         begin
>>>           ProcessOne( levelScale[ i ], img, hitThreshold, winStride,
>>> padding, APerIterationLocations[ i ] );
>>>         end
>>> begin
>>>    // your code from above
>>>    for i := 0 to AMaxScaleIndex - 1 do
>>>     begin
>>>     APerIterationLocations.Add( 
>>> TRTDynamicList<TVLImageRect>.Create() );
>>>     AExecutionTask.Add( AExecutor.Execute( @Bar  ));
>>> end;
>>>
>>> I added:
>>>   - the name "Bar"
>>> - Used is at reference
>>> - the keyword "closure"
>>>
>>> The above code would then create the exact same closure, as your code
>>> does. And it does not need an anonymous method.
>>
>> Nice. Gimme, gimme.
>
> IMHO this is a pefectly acceptable solution. Adds only a modifier 
> (modifiers are not keywords) and offers all advantages of closures.
>
> No need for 'anonymous' procedures, which are very unpascal-ish.
> People who want that should not be using Pascal to begin with.
If you guys would read what I wrote in one of my first answers to 
Vasiliy in this thread than you would know that I want him to implement 
this possiblity as well... but after all, who reads the mails of some 
strange computer science student who just happens to work on the 
compiler -.-

To rephrase: implement support for anonymous functions for Delphi 
compatibility (maybe coupled to a mode switch) and allow for all other 
modes the assignment of nested functions/procedures to "reference to" 
procvars instead. Additionally a shortened "lambda syntax" can be added 
for really simple cases.

Regards,
Sven



More information about the fpc-devel mailing list