4 ms·
> My understanding is that engines already optimize the objects/arrays version of those concepts pretty well They don't, using libraries that guarantee runtime
by Zababa 5y ago
> My understanding is that engines already optimize the objects/arrays version of those concepts pretty well
They don't, using libraries that guarantee runtime immutability has a heavy performance cost in JS currently.
- brundolf 5y agoBy “object approach” I just meant “making a bunch of objects with the same shape”. I’ve read that V8 can optimize these into flat structs. Is immutability part of the proposed standard? And if so, what’s the benefit over using Object.freeze?
- Zababa 5y agoImmutability is the whole point of records and tuples. You can read more about them on the proposal: https://github.com/tc39/proposal-record-tuple https://github.com/tc39/proposal-record-tuple.
- brundolf 5y agoAh so these are actual persistent data structures. Got it, that makes more sense. The use of the term "tuple" here is odd; I've only ever seen it used to describe fixed-width, non-homogenous sequences. These look more like immutable lists (though I guess they can serve both purposes).
- Zababa 5y ago> I've only ever seen it used to describe fixed-width, non-homogenous sequences. That's what they are here. Array are heterogenous in JS, and tuples are too. And since they're immutable, their size is fixed.
- brundolf 5y agoTechnically. I guess what I’m getting at is these are separate use cases that happen to be served by the same data structure in some languages, and “tuple” to me refers to the much less important/powerful use case, which is why I didn’t realize what the term referred to when I first heard about this proposal. For instance: Rust has tuples that are fixed-length heterogenous sequences, but you can’t actually work with them as sequences in any meaningful way; you can’t map or loop or filter over them. The term “tuple”, to my mind, refers to that “multivalue” or “unlabeled-struct” kind of use case. The fact that we use arrays for that in JS always seemed to me like a historical accident/convenience.