Which part of `HOLEY_SMI_ELEMENTS` makes you think so?
V8 version 8.2.34
d8> %DebugPrint(Array.from({length: 2}, (_, i) => i))
DebugPrint: 0x5ab080c5ded: [JSArray]
- map: 0x05ab08281869 <Map(HOLEY_SMI_ELEMENTS)> [FastProperties]
- prototype: 0x05ab08248f7d <JSArray[0]>
- elements: 0x05ab080c5dfd <FixedArray[2]> [HOLEY_SMI_ELEMENTS]
- length: 2
- properties: 0x05ab080406e9 <FixedArray[0]> {
#length: 0x05ab081c0165 <AccessorInfo> (const accessor descriptor)
}
- elements: 0x05ab080c5dfd <FixedArray[2]> {
0: 0
1: 1
}
0x5ab08281869: [Map]
- type: JS_ARRAY_TYPE
- instance size: 16
- inobject properties: 0
- elements kind: HOLEY_SMI_ELEMENTS
- unused property fields: 0
- enum length: invalid
- back pointer: 0x05ab082817f1 <Map(PACKED_SMI_ELEMENTS)>
- prototype_validity cell: 0x05ab081c0451 <Cell value= 1>
- instance descriptors #1: 0x05ab08249605 <DescriptorArray[1]>
- transitions #1: 0x05ab08249639 <TransitionArray[4]>Transition array #1:
0x05ab08042e91 <Symbol: (elements_transition_symbol)>: (transition to
PACKED_DOUBLE_ELEMENTS) -> 0x05ab08281891 <Map(PACKED_DOUBLE_ELEMENTS)>
- prototype: 0x05ab08248f7d <JSArray[0]>
- constructor: 0x05ab08248e51 <JSFunction Array (sfi = 0x5ab081cbf85)>
- dependent code: 0x05ab080401ed <Other heap object
(WEAK_FIXED_ARRAY_TYPE)>
- construction counter: 0
[0, 1]
On Wed, Feb 12, 2020 at 7:01 AM Jordan Harband <[email protected]> wrote:
> No, `Array.from` never produces a holey array whatsoever; only ever a
> dense array.
>
> On Sun, Feb 9, 2020 at 11:08 PM Andrea Giammarchi <
> [email protected]> wrote:
>
>> Unfortunately, `Array.from({ length: 4 }, () => whatever)` produces a
>> holey array, so that the `.repeat(...)` idea, if capable of packing
>> elements in a better way, wouldn't be so terrible, as simplification.
>>
>> Although, the intent of this proposal was to also grant "shapes" or
>> kindness of each entry, same way typed Arrays do, but maybe that would
>> require some better primitive, as in `const Shape =
>> Object.defineShape(...)` and `Object.createShape(Shape)` or similar.
>>
>> On Sun, Feb 9, 2020 at 10:01 PM Jordan Harband <[email protected]> wrote:
>>
>>> That already exists - `Array.from({ length: 4 }, () => whatever)` - I
>>> assume that the hope is to have an array where it is *impossible* for it to
>>> have the wrong "kind" of data, and a userland factory function wouldn't
>>> provide that.
>>>
>>> On Sun, Feb 9, 2020 at 10:39 AM kai zhu <[email protected]> wrote:
>>>
>>>> > It's a bit of a mess to create an Array that is not holed and gets
>>>> best optimizations [1], and this proposal would like to address that exact
>>>> case.
>>>>
>>>> could the performance issue be resolved more easily with a simple
>>>> static-function `Array.repeat(<length>, <repeater>)`?
>>>>
>>>> ```js
>>>> let structuredList;
>>>> structuredList = Array.repeat(4, function (ii) {
>>>> return {
>>>> index: 2 * ii + 1,
>>>> tags: []
>>>> });
>>>> /*
>>>> structuredList = [
>>>> { index: 1, tags: [] },
>>>> { index: 3, tags: [] },
>>>> { index: 5, tags: [] },
>>>> { index: 7, tags: [] }
>>>> ];
>>>> */
>>>> ```
>>>>
>>>> the only time i can practically enforce the shape of a
>>>> "StructuredArray" is during element-insertion,
>>>> and a userland insertion/creation function would be just as effective
>>>> as a StructuredArray constructor.
>>>>
>>>> enforcing shapes during element deletions and updates are going to be
>>>> hard
>>>> and likely just as confusing with StructuredArray as they are with
>>>> regular Array.
>>>>
>>>> also note that most javascript arrays need to be easily JSON-serialized
>>>> for message-passing
>>>> over-the-wire (commonly http) to external systems.
>>>>
>>>> -kai
>>>>
>>>> On Sat, Feb 8, 2020 at 3:46 AM Andrea Giammarchi <
>>>> [email protected]> wrote:
>>>>
>>>>> > having to retroactively add checks like...
>>>>>
>>>>> we already have typed arrays in JS so I don't think this would be any
>>>>> different
>>>>>
>>>>> > I _think_ that moderns virtual machines already did these
>>>>> optimisations despite there isn't a TypedArray like that.
>>>>>
>>>>> It's a bit of a mess to create an Array that is not holed and gets
>>>>> best optimizations [1], and this proposal would like to address that exact
>>>>> case.
>>>>>
>>>>> [1] https://v8.dev/blog/elements-kinds
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> [email protected]
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> [email protected]
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss