On 04/03/2013 05:57, Alexander Klenin wrote:
On Mon, Mar 4, 2013 at 2:38 PM, Martin <laza...@mfriebe.de> wrote:

Closures, do not need to be written/declared in the middle of other code
(in-line)
Strictly speaking, they do not. However, if the closures are required
to be named,
their expressive power and readability will suffer greatly.


Nevertheless, I agree what the implementation plan can be detailed even further:
1) Anonymous procedures *without* closures -- basically, just another
syntax for nested procedures.
That might be interested for mode Delphi
2) Named closures support -- while I do think that anonymous
procedures are useful,
And this could be in mode FPC too. So "purists" can still enjoy closures. But it keeps one of the thinks that make Pascal: Declaration is all done before the code block starts.

3) Anonymous closures support -- a combination of the above:
    // Delphi-compatible syntax. Could be made to *not* use closures in

4) As stated above, either a syntax to explicitly turn off a closure
for anonymous procedure,
   or intelligent enough optimizer to do that automatically. I have
some ideas on both fronts,
   but I suggest we first discuss previous points.


IMHO explicit Syntax.

But in the recent light of discussions to keep pascal being Pascal, anonymous functions could be entirely mode delphi only.

From the reasons for anonymous methods.
   in Delphi every local variable access becomes a reference to the
frame object field,
   *even in the parent procedure*. So "nested" anonymous procedures,
together with
   good inlining support, are crucial for the efficient implementation
of, for example,
   various "ForEach" methods.

That could be implemented for *named* closures too, and then there was no need for the anonymous.


IMHO anonymous methods are a syntactical difference only. All functionality can be done with named equivalents too.


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

Reply via email to