Array pointer getter?
I recently put together rbuckton/ecmascript-ref which is somewhat similar to this.
From: es-discuss [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Alex Falcon Sent: Friday, June 2, 2017 9:06 AM To: es-discuss at mozilla.org Subject: Array pointer getter?
Hello. I heard about SIMD, Atomics, etc. and they accept as first arguments "array, index", so because ES6 have spreads, I suggest to make next things:
let array = [0, 2, 3]; let ptr = array{0}; // don't get value, but pair of [array, 0], also this is proxied which you have setter and getter "value" let ptr = array.ptr(0); // alternate, functional
ptr.value = 1; // setter let acceptance = ptr.value; // getter
// also you can just use these pointers without extra indexing let idx = Atomics.add(...ptr, 1);
It should available for both: typed and regular arrays.
This is easily done in userland, is there a strong justification for new syntax for it?
Quick example (jsfiddle.net/Ljm9gcmo):
// Accessor
const entryAccessor = (array, index) => {
return {
get value() { return array[index]; },
set value(x) { array[index] = x; }
}
};
// Example usage
const a = ["a", "b", "c"];
const e = entryAccessor(a, 0);
console.log(e.value); // "a"
e.value = "A";
console.log(e.value); // "A"
If you wanted and don't object to modifying built-in prototypes, you could
even put something on Array.prototype
for it (non-enumerable, of course).
-- T.J. Crowder
Main targeting - passing two and more arguments, mainly "instance, key" sequences. Much function don't uses array value directly, but passing these pairs (may have different reasons). Mostly these indexes may constant, so just simply bake array/object reference and index into one interface, and operate like simple variables, or passing to function through spreads.
Also, I forgot to press "Reply to All".
Hello. I heard about SIMD, Atomics, etc. and they accept as first arguments "array, index", so because ES6 have spreads, I suggest to make next things:
let array = [0, 2, 3]; let ptr = array{0}; // don't get value, but pair of [array, 0], also this is proxied which you have setter and getter "value" let ptr = array.ptr(0); // alternate, functional
ptr.value = 1; // setter let acceptance = ptr.value; // getter
// also you can just use these pointers without extra indexing let idx = Atomics.add(...ptr, 1);
It should available for both: typed and regular arrays.
Simular possible with objects, where you can pass to "defineProperty". Main problem - getting through point syntax. I thinking "->" syntax (against C++), but may corrupt compatibilies. But is not cancels obj{'foo'} getting pointers.