On Sep 2, 2010, at 4:08 AM, Erik Corry wrote:
> 2010/9/2 Leo Meyerovich <lmeye...@gmail.com>:
>> There are use cases for enumeration like proper native GC in data flow
>> abstractions
>
> Perhaps you could elaborate on this. I wasn't able to understand what
> you meant by this.
>
I mean a natural embedding of data flow constructs as in
http://www.cs.brown.edu/~greg/thesis.pdf that eliminate many instances of
spaghetti/non-composable callback graphs and replaces them with
direct/linear/composable/self-managing code while co-existing with the rest of
the language.
There's a lot of debatable language philosophy in the that thesis, but
distractions aside, it's essentially an expressive continuation of data binding
we're already seeing in many modern systems (e.g., Flex, LINQ, Max/MSP have
weaker forms.). Even if you don't directly use such a language or library, you
can view them as forming a basic pattern. This pattern comes up repeatedly,
especially in the AJAX community: while I've worked on one such JS system, I've
seen it repeatedly rediscovered/reinvented by others without any prior
knowledge of it. This pattern is also used outside of the web community.
> Btw. In case it isn't obvious I would rather avoid changes to the
> WeakMaps proposal that make the effects of GC visible to the
> programmer (beyond the obvious one of the program not crashing with an
> OOM error). This is bound to lead to incompatibilities and/or
> unwanted restrictions on the implementation of GC. Making the keys
> enumerable would be one such change.
The challenge is that the pattern, wrt proper GC, is to enumerate over a weak
collection (e.g., map) of callbacks, firing them and then repeating the process
for anything registered to those callbacks. If the end of a callback chain is
used, the chain won't be collected. If the end of a chain of such propagation
isn't used, the chain (back to the last used link) can be collected. Not doing
so means a (significant) memory leak and likely performance loss.
This collection semantics can be encoded... but at that point we're likely 1)
reimplementing garbage collection within JS and 2) forcing manual memory
management by the programmer. A similar argument can be made about not really
needing weak maps for membranes -- manual management could work, but it's a
headache (and I suspect breaks modularity in the same sense as not having GC in
general would).
Hope that made sense and I'm looking forward to any other use cases.
Regards,
- Leo
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss