W3C home > Mailing lists > Public > public-script-coord@w3.org > April to June 2013

Re: Promises: Auto-assimilating thenables returned by .then() callbacks: yay/nay?

From: Sam Tobin-Hochstadt <samth@ccs.neu.edu>
Date: Mon, 6 May 2013 13:40:15 -0400
Message-ID: <CAK=HD+bjYKtqGSQAEVvnYCd4uH5gbsgLvJBTwXC-9kMyFyzS=w@mail.gmail.com>
To: Jonas Sicking <jonas@sicking.cc>
Cc: "Tab Atkins, Jr." <jackalmage@gmail.com>, Domenic Denicola <domenic@domenicdenicola.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>, "Mark S. Miller" <erights@google.com>
On Mon, May 6, 2013 at 1:25 PM, Jonas Sicking <jonas@sicking.cc> wrote:
> On Fri, May 3, 2013 at 7:10 PM, Sam Tobin-Hochstadt <samth@ccs.neu.edu> wrote:
>> On Fri, May 3, 2013 at 7:17 PM, Jonas Sicking <jonas@sicking.cc> wrote:
>>>
>>> Third, there's the question of what a nested promise actually means.
>>> Normally a promise represents "a value after some time". But what does
>>> a nested promise mean? "A value after a longer time" obviously isn't
>>> correct since there are no time constraints associated with a promise.
>>> "A promise after some time" also isn't really meaningful given that
>>> that simply means "A value after some time after some time".
>>
>> I've been staying out of all of the promises discussions, but this
>> just doesn't make any sense at all.  A function of no arguments is a
>> "computation that produces a value".  By a similar argument to yours,
>> functions of no arguments that produce the same aren't meaningful,
>> because it's a "computation that produces a computation that produces
>> a value".  I hope we can all see that this in fact makes perfect
>> sense.
>
> The difference is that it's meaningful for a function that takes no
> argument to return a function that takes no argument. That provides
> the capability for the caller of the initial function to determine
> when the returned function should be called. Thus it lets the caller
> postpone the CPU cycles spent by the returned function until the
> result is actually needed.
>
> To put it another way a "computation that produces a computation that
> produces a value" is meaningful since you can choose to not perform
> the second computation if it turns out that you don't need it.

This is silly in just the same way.  Given a promise, we can choose to
wait for its result, or not, just as with a function, we can run it or
not.

In fact, if you write in continuation-passing style everywhere,
instead of just when interacting with I/O, calling a function and
waiting on a promise are *the same operation*.

> And then there's of course the fact that in many languages functions
> can have side effects, and so the caller of the first function can
> choose to have the side effects from the returned function happen at a
> desired time.
>
> None of these use cases apply for promises.
>
> But I can agree that using sentence parsing to make my point might not
> have been the best way to do it. But my point still stands that
> promises that return promises doesn't appear to have any useful
> semantics.

I don't know what you mean by "useful", but they have perfectly
well-defined and consistent semantics.

> Nor have anyone brought forward any use cases.

Consider a hash table that keeps some state remotely. Then a promise
is useful for the results.  If promises for promises are impossible,
can you store promises in the table?

Sam
Received on Monday, 6 May 2013 17:41:02 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:37:49 UTC