`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