On Sun, Nov 17, 2013 at 10:42:16PM +0100, Dmitry Lomov wrote:
> Typed Objects polyfill lives here: https://github.com/dherman/structs.js
> Dave and I work on it, current status is pretty close to strawman minus
> handles and cursors (which are a bit controversial at this point and as far
> as I understand are not is Firefox implementation).

One correction:

Handles are implemented in the SpiderMonkey implementation and are
being used in the PJS (nee Rivertrail) polyfill:
https://github.com/nikomatsakis/pjs-polyfill

My point of view on handles:

Their design is indeed controversial. I summarized the design
tradeoffs in a blog post [1]. After that post, Dmitry, Dave, and I
basically decided to exclude handles from the typed objects spec but
possibly to include them in other specs (such as PJS) that build on
typed objects.

As I see it, the reasoning for deferring handles is as follows:

1. Handles are not as important for performance as initially imagined.
   Basically, the original impetus behind handles was to give users an
   explicit way to avoid the intermediate objects that are created by
   expressions like `array[1].foo[3]`. But, at least in the SM
   implementation, these intermediate objects are typically optimized
   away once we get into the JIT. Moreover, with an efficient GC, the
   cost of such intermediate objects may not be that high. Given
   those facts, the complexity of movable and nullable handles doesn't
   seem worth it.

2. A secondary use case for handles is as a kind of revokable
   capability into a buffer, but for this to be of use we must make
   sure we get the details correct. For many advanced APIs, it can be
   useful to give away a pointer into a (previously unaliased) buffer
   and then be able to revoke that pointer, hence ensuring that the
   buffer is again unaliased. Use cases like this might justify
   movable and nullable handles, even if raw performance does not.

   However, in cases like these, the details are crucial. If we were
   to design handles in isolation, rather than in tandem with the
   relevant specs, we might wind up with a design that does not
   provide adequate guarantees. Also -- there may be other ways to
   achieve those same goals, such as something akin to the current
   "neutering" of buffers that occurs when a buffer is transferred
   between workers.


Niko
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to