Hello TC39, I recently opened an issue[1] in the tc39/ecma262[2] repository, proposing a new syntax for lazy getters, and I was directed to the CONTRIBUTING[3] page which stated that I should start a conversation on this mailing list. So, my feature proposal is to have syntactic sugar for creating lazy getters[4]. To summarize my original proposal (which you can read by following the very first link above), I find that creating lazy getters is very verbose. For example, consider: const take = (n, xs) => n === ? null : xs && { head: xs.head, get tail() { delete this.tail; return this.tail = take(n - 1, xs.tail); } };
My proposed solution is to add a new keyword lazy to the language. This keyword can only be used as a prefix to longhand property names in object initializers, and it defers the execution of the value expression until the property is accessed. In short, it's just syntactic sugar for lazy getters: const take = (n, xs) => n === ? null : xs && { head: xs.head, lazy tail: take(n - 1, xs.tail) }; This is purely syntactic sugar. The semantics of this new syntax would remain the same as that of the desugared syntax. In particular, calling Object.getOwnPropertyDescriptor(list, "tail") would return an accessor descriptor before accessing list.tail and a data descriptor afterwards. Furthermore, there are other advantages of having this syntactic sugar. For example, creating cyclic data structures becomes much easier. Examples are provided in my original proposal which is linked above. Hope to hear your thoughts on this. Regards, Aadit M Shah Links: 1. https://github.com/tc39/ecma262/issues/1223 2. https://github.com/tc39/ecma262 3. https://github.com/tc39/ecma262/blob/master/CONTRIBUTING.md 4. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get#Smart_self-overwriting_lazy_getters
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss