Vasiliy Kevroletin schrieb:
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?
In contrast to anonymous procedures, true closures require fixed and
immutable parameters. This requirement will disallow also references to
variables outside the function, e.g. in their enclosing procedure. This
would require deep(!) copies of all values/variables used in the
anonymous procedure body, together with tests of already copied memory
objects. How to create a deep copy at all, of e.g. an interface
reference or a Handle?
IMO we have to decide in the first place whether to implement anonymous
procedures for Delphi compatibility *only*, or whether we want true
closures (functional programming) inside the imperative OPL.
ATM I have no opinion about this matter, because I don't plan to use
neither anonymous procedures nor functional programming myself. To me it
looks safer (better controllable) to use ordinary callback procedures
instead of anonymous ones, and for functional programming I'd only
accept an full-featured implementation, e.g. a LISP like sub-system
*written* in Pascal.
DoDi
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel