I really don't think that it could be so much useful to optimize, because it could be used only on a specific part of the code, for example:
```js const foo = (anyType) => { // we can't optimize with typed array here } const bar = () => { const numbers = new TypedArray(0, 5) // we could optimize numbers array in this scope foo(numbers) } ``` Since this limitations, I don't think that it'll be so much useful, and I _think_ that moderns virtual machines already did these optimisations despite there isn't a TypedArray like that. On Fri, 7 Feb 2020 at 21:14, Andrea Giammarchi <andrea.giammar...@gmail.com> wrote: > Any name would do, I'm rather interested in the proposal itself, and its > ergonomics/logic ;-) > > On Fri, Feb 7, 2020 at 10:11 PM Scott Rudiger <scottrudi...@gmail.com> > wrote: > >> `StructuredArray` or `StructArray` for short? Just throwing it out there. >> >> On Fri, Feb 7, 2020, 1:08 PM Andrea Giammarchi < >> andrea.giammar...@gmail.com> wrote: >> >>> well, this proposal has nothing to do with Typed Arrays, as these are >>> all fixed size indeed ... scratch the TypedArray name, and use ArrayKind >>> instead, any better outcome? >>> >>> On Fri, Feb 7, 2020 at 7:51 PM Jordan Harband <ljh...@gmail.com> wrote: >>> >>>> the "type" in Typed Arrays refers to the bit size in memory; being able >>>> to pass an arbitrary value seems like it would require implementations to >>>> calculate the precise (not just the maximum) memory size a single item >>>> requires. >>>> >>>> On Fri, Feb 7, 2020 at 6:33 AM Andrea Giammarchi < >>>> andrea.giammar...@gmail.com> wrote: >>>> >>>>> As more and more often devs are shifting into TS, or would like to >>>>> have dynamic typed arrays without a fixed length, and as v8 and likely >>>>> other engines too optimize a lot for same-kind arrays, I wonder what >>>>> people >>>>> here think about this `TypedArray` rough proposal: >>>>> >>>>> # Signature: >>>>> >>>>> ```js >>>>> new TypedArray( >>>>> type, // either a "type" to infer, or a shape, or a Class >>>>> length // optional: if defined it's fixed size >>>>> ); >>>>> ``` >>>>> >>>>> >>>>> ## About the `type` >>>>> >>>>> * if the inferred type is `object`: >>>>> * if the object is `null`, throw new InvalidType >>>>> * if the object is a literal, or its `__proto__` is either `null` >>>>> or `Object.prototype, enforce own properties and respective types >>>>> * if the object is not literal, fallback to object Class (`/./` is >>>>> `RegExp`, `() => {}` is `Function`, etc) >>>>> * if the inferred `type` is `function`, fallback to Class >>>>> * if the inferred `type` is `Class`, ensure each entry is an >>>>> instance of such class, or throw InvalidType >>>>> * in every other case, make a _typed_ collection of `number`, >>>>> `string`, `boolean`, or `symbol` >>>>> >>>>> >>>>> ## About the `length` >>>>> >>>>> * if provided, the collection has a fixed, immutable, length, and >>>>> each initial entry a default value >>>>> >>>>> >>>>> # Use Cases: >>>>> >>>>> ```js >>>>> const numbers = new TypedArray(0, 5); >>>>> // creates [0, 0, 0, 0, 0] >>>>> // numbers length is immutable >>>>> // numbers accepts only typeof number >>>>> // out of bound entries throw >>>>> >>>>> let numbers = new TypedArray(0); >>>>> // numbers length is dynamic >>>>> // numbers accepts only typeof number >>>>> // out of bound entries throw >>>>> >>>>> const shapes = new TypedArray({name: '', age: 0}, 3); >>>>> // creates [{name: '', age: 0}, {name: '', age: 0}, {name: '', age: 0}] >>>>> // shapes length is immutable >>>>> // shapes accepts only objects with `name` and `age` and respective >>>>> types >>>>> // out of bound entries throw >>>>> >>>>> let shapes = new TypedArray({lat: 0, long: 0}); >>>>> // shapes length is dynamic >>>>> // shapes accepts only objects with `lat` and `long` and respective >>>>> types >>>>> // out of bound entries throw >>>>> >>>>> const classes = new TypedArray(HTMLElement, 2); >>>>> // creates [Object.create(HTMLElement.prototype), >>>>> Object.create(HTMLElement.prototype)] >>>>> // classes length is immutable >>>>> // classes accepts only instances of HTMLElement >>>>> // out of bound entries throw >>>>> >>>>> let classes = new TypedArray(HTMLElement); >>>>> // classes length is dynamic >>>>> // classes accepts only instances of HTMLElement >>>>> // out of bound entries throw >>>>> >>>>> // more options >>>>> let strings = new TypedArray(''); >>>>> let booleans = new TypedArray(true); >>>>> let functions = new TypedArray(Function); >>>>> let coords = new TypedArray({lat: 0, long: 0}); >>>>> ``` >>>>> >>>>> Thanks in advance for eventual thoughts on this 👋 >>>>> _______________________________________________ >>>>> es-discuss mailing list >>>>> es-discuss@mozilla.org >>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>> >>>> _______________________________________________ >>> es-discuss mailing list >>> es-discuss@mozilla.org >>> https://mail.mozilla.org/listinfo/es-discuss >>> >> _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss