Could you give an example, hopefully simple, of such a problem you can solve better with GC + weakmaps + weakrefs but without finalization, vs just GC + weakmaps ? Thanks.
On Thu, Nov 7, 2013 at 1:46 PM, K. Gadd <[email protected]> wrote: > When I talk about the importance of weak references I am *not* talking > about the importance of finalization for managing native/remote resources; > that's an important consideration but it's a separate one. When I talk > about why weak references are important, I mean for the purposes of > building large applications without creating uncollectable cycles in object > graphs. Doing this without weak references is *very* difficult in some > scenarios, and in other scenarios requires manual management of all object > lifetimes (addref/release style, or having a single lifetime owner that > 'deletes' an object on demand). > > That's the sort of obstacle that factors into a developer's choice of > language and toolset. I've seen this particular concern with ES crop up in > the past on real projects, and I've seen firsthand how difficult it is to > avoid uncollectable cycles in a language environment without any sort of > weak reference mechanism. Leaking large uncollectable cycles can have > catastrophic consequences in multimedia applications and games, where those > cycles might be retaining images or sounds or other huge game assets. > > > On Thu, Nov 7, 2013 at 9:19 AM, Terrence Cole <[email protected]> wrote: > >> On 11/06/2013 07:37 PM, K. Gadd wrote: >> > Generally speaking, all the discussions on this list about WRs so far >> have >> > not suggested that there is any way to introduce WeakRefs without >> making GC >> > behavior observable in some fashion. WeakRefs functionally make GC >> > observable because when you try to get at the target of the weakref, you >> > either get it or you don't. Once you introduce the ability to get back >> > 'null' when asking for the target of a WR (or any similar failure case), >> > you can use that to determine things about GC behavior. >> > >> > If you somehow eliminate this weakness, WRs no longer solve the problems >> > they are intended to solve. Or at the least, they solve only a small >> > reduced subset of the problems solved in real software via the use of >> weak >> > references. Being able to access the target of the WR (and have this >> > operation fail) is core to their value (even if finalization >> notifications >> > are also used quite often). >> > >> > I've already argued in the past about why weak references are important, >> > and why not having solutions for those problems will kneecap the >> > development of web applications by either preventing certain types of >> > software from running in the browser, or forcing implementers to write >> > their own GCs (or entire runtime environments) inside the browser, as is >> > done with environments like emscripten and native client. Once that >> becomes >> > the solution, the ES spec is irrelevant for those applications because >> they >> > have had to abandon the language. While the risk of something like this >> > happening is still relatively low, the risk increases over time as more >> > people begin seriously considering solutions like emscripten and nacl - >> > we're starting to see companies ship real products using them already. >> If >> > this spreads to popular reusable libraries (physics libraries, rendering >> > libraries, etc), there's a risk that those libraries will pull new >> > applications out of the ES realm because it's not possible to use those >> > libraries without abandoning ES in favor of a custom GC/runtime >> environment. >> > >> > Based on the conversations thus far, a choice just has to be made >> between >> > the two downsides: exposing some amount of GC internals, or making it >> > impossible to write some subset of applications in ES. It's possible >> that >> > exposing GC semantics has such catastrophic security consequences that >> > ruling those applications out is merited. It's also possible that >> > workarounds can be applied to reduce the harm of GC visibility (I think >> in >> > the past someone - maybe Mark? - suggested that disabling cross-realm >> WRs >> > would mitigate the damage considerably?) >> >> This is a false dichotomy. At the extreme, we could simply ship a new >> builtin resource manager which has it's own GC behaviour that we can >> expose at will. Given that the sorts of resources that people want to >> use the memory GC to manage generally have very different cost and >> volume tradeoffs than memory [1], this is actually much more reasonable >> than it sounds. >> >> The real problem with weak things is that they do have a performance >> impact on the GC, even when not used. Missing weak-maps can at least be >> worked around; a slow environment cannot. >> >> -Terrence >> >> 1 - >> >> http://www.mail-archive.com/[email protected]/msg00572.html >> >> > On Wed, Nov 6, 2013 at 3:23 PM, Oliver Hunt <[email protected]> wrote: >> > >> >> On Nov 6, 2013, at 3:14 PM, Rick Waldron <[email protected]> >> wrote: >> >> >> >> >> >> >> >> >> >> On Wed, Nov 6, 2013 at 2:15 PM, Domenic Denicola < >> >> [email protected]> wrote: >> >> >> >>> Thanks Mark for the education, especially on the pre- vs. post-morterm >> >>> finalization distinction. I don't think I was specifically advocating >> for >> >>> pre-mortem in my OP, since I didn't really understand the difference >> :P. >> >>> Post-mortem finalization sounds quite reasonable. What do people >> think of >> >>> introducing it into ECMAScript? >> >>> >> >> >> >> This may be a naïve question, but how would the handler know which >> >> object/weakref had been gc'ed? >> >> >> >> You wouldn’t :) >> >> >> >> I’m kind of anti-finalisers in JS for all of the reasons people have >> >> raised - they are extremely hazardous, expose non-deterministic >> behaviour, >> >> etc >> >> >> >> Given our general desire to avoid exposing internal GC semantics, and >> the >> >> difficulty in defining observable GC behaviour (I suspect this would >> be a >> >> non-starter in any case), I can’t see any specification that would >> allow >> >> useful finalisers or WeakRefs. >> >> >> >> If MarkM has an idea for WeakRefs that don’t leak observable GC >> behaviour >> >> i’d love to hear, but in general i’m opposed to both them and >> finalisers :-/ >> >> >> >> —Oliver >> >> >> >> Rick >> >> >> >> _______________________________________________ >> >> es-discuss mailing list >> >> [email protected] >> >> https://mail.mozilla.org/listinfo/es-discuss >> >> >> >> >> >> >> >> _______________________________________________ >> >> es-discuss mailing list >> >> [email protected] >> >> https://mail.mozilla.org/listinfo/es-discuss >> >> >> >> >> > >> > >> > >> > _______________________________________________ >> > es-discuss mailing list >> > [email protected] >> > https://mail.mozilla.org/listinfo/es-discuss >> > >> >> > -- Cheers, --MarkM
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

