Hi,

I want to implement support of Delphi anonymous methods for fpc. As I know I should create good proposal. Fortunately Delphi already made half of my work. Proposal: all behaviour described in http://docwiki.embarcadero.com/RADStudio/XE3/en/Anonymous_Methods_in_Delphi should be implemented.

Anonymous methods are like closures in other languages. Main features of anonymous methods and closures are
- access to local variables
- extend lifetime of used local variables.

Difference between anonymous methods in Delphi and closures in most other languages is that you can not create many instances of same anonymous methods during work of it's declaring function. I don't know how to say better, but example can help:

=begin example

type TProc = reference to Procedure;
var i: Integer;
    arr: array[1..5] of TProc;
begin
  for i := 1 to 5 do
    arr[i] :=
      procedure begin
      end;
  for i := 1 to 4 do
    Write(arr[i] = arr[i+1], ' ');
end.

=end example

Someone who thinks that first cycle creates different anonymous methods is wrong. All values in arr will be equal after cycle execution. Here more complicated example of same feature:
https://gist.github.com/vkevroletin/5069653

I investigated behaviour and implementation(slightly) of anonymous methods in Delphi. Results are in document below. It have little introduction which is not very useful for advanced developers but may be helpful in wiki to describe some aspects of compiler. Both links point to same document in different formats. plain text: https://raw.github.com/vkevroletin/Diploma/master/anonym_method_delphi.org pdf: https://github.com/vkevroletin/Diploma/blob/master/anonym_method_delphi.pdf

Implementation of anonymous methods was started in the branch. Author didn't submit anything last year and forgot commit one added file. But changes from branch can be useful, AFAIU parsing of anonymous functions without capturing of local variables was implemented.

Does someone know is author available? Does he plan to continue work, or I can work on implementation without collaboration with him ? Or at least can he send missed file ?

It's hard to properly split this complex task into subtasks. I can propose 2 steps:
  1. Parsing and generation of anonymous function. Capturing of
  variables is forbidden.
  2. Capturing of variables is implemented.

A question for fpc team: do you agree that support of Delphi-compatible anonymous methods should be implemented?

Also there are open questions which require brainstorm:
1. Does Pascal needs other implementation of closures which is different from anonymous methods implementation?
2. Does Pascal needs short syntax for closures?
I if someone want to discuss these questions it will be better to create in separate threads.

Link to closures branch: http://svn.freepascal.org/cgi-bin/viewvc.cgi/branches/blaise/closures/

Vasiliy K.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to