Weak References

Gary Guo nbdd0121 at hotmail.com
Sun Sep 6 10:37:24 UTC 2015


I think weak references are discussed before, and get postponed because it can cause information leaks between realms.

From: isiahmeadows at gmail.com
Date: Sat, 5 Sep 2015 07:07:40 -0400
Subject: Weak References
To: es-discuss at mozilla.org

I'm resurrecting this [1] because I have found a use case where I needed a weak reference. Is there any chance this could get into the language?

Here's my particular use case: making a stream with a rotating destination that itself acts as a stream (snippet of that code, or what I'd like it to be).

```js
function rotateStream(interval, format) {
    // Without the weak reference here, there's a memory leak
    const ref = new WeakReference({})
    setStream(ref.get(), format)
    setInterval(function () {
        if (ref.exists()) setStream(ref.get(), format)
        else clearInterval(this)
    }, interval)
    return ref.get()
}
```

This basically rotates an active stream, with the weak reference pointing to the said stream. The alternative requires explicit marking (in this case, with a `close` method):

```js
function leakyRotateStream(interval, format) {
    let stream = {close() {
        clearInterval(timer)
        timer = stream = null
    }}
    const timer = setInterval(function () {
        setStream(stream, format)
    }, interval)
    setStream(stream, format)
    return stream
}
```

In this use case, weak references would simplify the implementation and reduce memory costs. And I would rather take advantage of the GC machinery than explicit memory management (as explicit as C), as it would be easier to collect when that's the only thing referenced.

(The setInterval callback is gc'd with all its references when it's cleared from within.)

Thankfully, I'm using Node.js, so `weak` [2] is an option (the only option, really). But I would definitely appreciate if it was available in JS proper, across engines. V8, SpiderMonkey, and JSC all have weak references to JS objects as part of their public API, and I would be surprised if the implementation work would be anything significant.

[1]: https://esdiscuss.org/topic/what-is-the-status-of-weak-references
[2]: https://github.com/TooTallNate/node-weak

-- 
Isiah Meadows


_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org
https://mail.mozilla.org/listinfo/es-discuss 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150906/8b1f70d3/attachment-0001.html>


More information about the es-discuss mailing list