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

