Futures

Brendan Eich brendan at mozilla.com
Tue Apr 23 21:11:18 PDT 2013


Ron Buckton wrote:
> Perhaps Future should have a static Future.cancelable method (similar to Proxy.revocable):

Matching the two APIs seems like a win, all else equal.

> let { future, cancel } = Future.cancelable(function(resolver) { .. do future stuff .. });
>
> You would still need a means to hook cancellation, possibly by replacing cancel to the caller:
>
> function getJSON() {
>    var xhr = new XMLHttpRequest();
>    ...
>    let { future, cancel } = Future.cancelable(...);
>    return { future, cancel: function() { cancel(); xhr.abort(); } };
> }

The other advantage of the Proxy.revocable pattern, as Tom pointed out, 
is its OCap-ness; you can't use the returned revoke on some other 
revocable proxy. Same argument would apply to Future.cancelable.

/be
>
> Ron
>
> -----Original Message-----
> From: es-discuss-bounces at mozilla.org [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Brendan Eich
> Sent: Tuesday, April 23, 2013 6:41 PM
> To: Tab Atkins Jr.
> Cc: es-discuss
> Subject: Re: Futures
>
> Tab Atkins Jr. wrote:
>> On Sat, Apr 20, 2013 at 6:17 AM, Brendan Eich<brendan at mozilla.com>   wrote:
>>> Tab Atkins Jr. wrote:
>>>> It would be so nice if JS had multiple return values, so we could
>>>> let cancellable future-returning APIs just return a naked resolver
>>>> as their second value,
>>> Hello, destructuring:
>>>
>>> let{  proxy, revoke}  = Proxy.revocable(target, handler);
>>>
>>>
>>> from
>>> http://wiki.ecmascript.org/doku.php?id=strawman:revokable_proxies. Or use an array pattern if you prefer.
>>>
>>> JIT'ing VMs can optimize these pretty easily to avoid object allocation.
>> Yeah, that's fine when you're explicitly invoking something that needs
>> to return two objects.
>
> You didn't grok what I wrote. The object is erased, and the value(s) are returned to the caller depending on the pattern it uses.
>
>> It's less fine when you have something like a hypothetical getJSON()
>> (future-returning XHR sugar), which can reasonably just return a
>> future, but which we also want to make cancellable.  Burdening *every*
>> call site
>
> No, you can use a smaller pattern, e.g.
>
> let { future } = getJSON();
>
> instead of
>
> let { future, cancel } = getJSON();
>
>>    with the need to pull out the future from the returned object
>
> No, see above.
>
>>    isn't great.
>
> HTH.
>
> /be
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
>


More information about the es-discuss mailing list