Le 03/02/2013 12:08, Kevin Gadd a écrit :
On Sun, Feb 3, 2013 at 2:58 AM, David Bruant <[email protected]> wrote:
Let's see how the example would be with weakrefs:
function Storage(){
var storage = []
return {
push(e){storage.push(makeWeakRef(e))},
last(){
var last = storage[storage.length-1]
return last.get(); // oops!
};
}
}
var s = new Storage();
s.push({});
s.push({});
s.last();
What problem is this example supposed to be solving?
None, but that's beyond the point. My point was to explain that in some
cases a human being can see that some objects aren't going to be needed
any longer while the GC algorithm cannot. The reason is that nowadays,
state-of-the-art GCs are oblivious to the code semantics.
The problem here is not weakrefs, the problem is that the problem is poorly
specified
I didn't say the problem came from weakrefs, but that weakrefs don't
help for this particular problem.
When discussing issues as complex as garbage collection, the examples
need to be at least vaguely real-world. Your example does not
demonstrate a limitation of GCs because there's nothing for the GC to
actually do.
It's really hard to find real code, because it often means showing
several pages of code and I don't want to force everyone reading to
understand several pages of code just to make a point.
Although my example is dummy, it supports the point that a GC is limited
because it's oblivious to code semantics and limits the information it
uses to "object", "reference" (and "root" for some objects in a
mark-and-sweep). WeakRefs would just add a word in the GC vocabulary
("weak reference"), but wouldn't change the obliviousness.
On the obliviousness, here is another example. Let's say jQuery is
imported with requireJS (otherwise, it's global and you can't do
anything really). If you use only one jQuery function, the GC could
probably figure out that only one function is used and release the rest.
It doesn't, because you need a reference to the main jQuery object and
the rest is attached and the GC has no understanding that you're using
only one function of this library.
Weakrefs cannot help with this problem. Hopefully, that's real world
enough even without the code ;-)
There will always be problems that weak references won't be able to
solve. That's all I'm saying.
[answering to another point from yesterday]
I agree that there are scenarios where .dispose() or a similar
protocol may be come necessary; in those scenarios it would be great
if JS had some mechanism that could be used to simplify the proper use
of the protocol. Given that the need for Weak References in many
scenarios would be reduced because a partially (or wholly) automatic
implementation of that protocol can make it much easier to use the
protocol correctly.
The idea of a protocol is very interesting. I would love to see
different *deterministic* protocols explored before bringing weakrefs if
possible.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss