Re: Bang Tutorial redux -- javascript promises

Toby Murray <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
On Thu, 2009-02-05 at 06:38 -0800, Tyler Close wrote:
> On Thu, Feb 5, 2009 at 2:11 AM, Toby Murray <[email protected]> wrote:
> > On Wed, 2009-02-04 at 17:35 -0800, Tyler Close wrote:
> >> Hi all,
> >>
> >> I've been knee deep in Waterken server code for a few months now,
> >> making some changes to make it perform better and be easier to review.
> >> Anyways, I've finally gotten back to the stage where the next version
> >> is in a usable state, and so I've been working on the new Javascript
> >> interface. This version follows the ADsafe conventions and uses a
> >> different syntax. There's a test page / tutorial at:
> >>
> >> https://vsci.hpl.hp.com/-/bang/#s=6ysjn2sjvwl35p
> >>
> >> I'm looking for some testing and criticism of the Javascript API.
> >>
> >
> > Looking at it quickly, I think I prefer the old syntax. How come the
> > change? What advantages does the new syntax have?
> 
> The _ convention in the previous syntax was not compatible with the
> Google coding conventions, which use a trailing _ to denote a private
> member field in an object.

Right. Fair enough.

> With the previous syntax, there was also a danger that a programmer
> would try to do an eventual operation without checking that the target
> object was actually a promise (by passing it through the _()
> function). In the current syntax, there's no way to write an eventual
> operation that is not safe: all eventual operations are invocations on
> the Q object.

I see.

> ADsafe doesn't support freezing of an object, so separate clients of
> the same promise could tamper with that promise's API, such as by
> replacing the value of the promise's "post" member. With the current
> API, it's not possible for ADsafe code to tamper with the behaviour of
> a promise.

Indeed. The lack of freezing-support is actually quite a nuisance
generally here.


> > Why the name Q?
> 
> Best we could come up with. Think of it as meaning: "This operation is
> queued for later, not done now."

Does the ref_send API expose functionality through any other interface
besides the global Q object? If not, a name that denotes the library
might be less confusing. Q is also fairly low-entropy, increasing the
chance of a collision of global variable names, although this risk is
pretty small.

That said, I'm not sure there's a better alternative.

Thanks for the explanations. I understand the need for the changes now.

Cheers

Toby
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.