Array.create and Function.create

Matthew Robb matthewwrobb at gmail.com
Fri Jan 11 00:18:10 UTC 2019


Fwiw I'd absolutely love a way to create function objects that inherit from
an existing custom object.

On Thu, Jan 10, 2019, 2:13 PM Sultan <thysultan at gmail.com wrote:

> >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
>>
> _______________________________________________
> 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/20190110/bebadb3b/attachment.html>


More information about the es-discuss mailing list