Array.create and Function.create

Sultan thysultan at gmail.com
Thu Jan 10 22:13:03 UTC 2019


>what're the benefits over a object indexed by numbers `const o =
Object.create(null); o[0] = 12; ...`?

Better "optimisable" heuristics in a similar vain to `TypedArrays`. Most
engines have perf cliffs with indexed objects after a certain threshold,

Memory: at some point indexed objects have to grow by some factor(* N of
the current size) until it reaches and exceeds your desired size resulting
in more memory use that you bargained for or at some point the engine could
downgrade it to dictionary-mode for any one reason.

It is a fickle round to cross when you want predictable throughput
performance, TypedArrays afford this, but they are not generic(support any
value).

>About the other function proposal (`Function.create`) I don't see any
benefits in day to day use having a function without prototype

Both the Array.create and Function.create are not meant as day-to-day
data-structures.
They are meant as low-level building blocks for abstraction that might be
used on a day-to-day, abstractions that wish to guarantee better
predictable performance.

>and there'd be no way to get the length or iterate over it if you did.

You don't need a length property to iterate the array if you own and manage
the data-strucure:

Exhibit A:
var len = 10
var arr = Array.create(null, len)
for (var i = 0; i < len; i++) arr[i]

Exhibit B: (tuple)

var arr = Array.create(null, 2)
arr[0] = 'a'
arr[1] = 'b'
return a

In both examples you don't need a length property to access/visit all the
elements in the array given they are both statically known at creation time.


On Fri, Jan 11, 2019 at 12:20 AM Jordan Harband <ljharb at gmail.com> wrote:

> Sorry if I was unclear; it's *impossible* to have an array without a
> `.length` own property, and there'd be no way to get the length or iterate
> over it if you did. I'm also not clear on why you'd want to store named
> properties on an array, especially if you can't iterate it because it
> doesn't have a length?
>
> On Thu, Jan 10, 2019 at 11:04 AM T.J. Crowder <
> tj.crowder at farsightsoftware.com> wrote:
>
>> On Thu, Jan 10, 2019 at 1:54 PM Augusto Moura
>> <augusto.borgesm at gmail.com> wrote:
>> >
>> > If you don't want the iterable features neither the own properties,
>> > what're the benefits over a object indexed by numbers `const o =
>> > Object.create(null); o[0] = 12; ...`?
>>
>> Exactly.
>>
>> And re functions, using them as state containers without their usual
>> features seems like a bad idea^H^H^H^H^H^H^H^H edge case best handled
>> by `setPrototypeOf` and `delete`. :-)
>>
>> -- T.J. Crowder
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190111/5df31c85/attachment.html>


More information about the es-discuss mailing list