Brendan Eich wrote:
I suspect your very complicated translation with __prvTable__ etc. is
intended to hoist private somehow, once per declaration in source rather
than once per evaluation of declaration. That's too restrictive, since
Exactly. By design.
private declarations can be placed in outer blocks or closures for
singleton naming, or moved into inner constructor-like functions for
per-instance private names.
I proposed private to really only do the conventional per-source
singleton aliasing (I dubbed 'const foo = perSourceTable[index]'
aliasing for this discussion).
The motivation for this is exactly the "can be placed in outer blocks or
closures". My proposal for 'private' is precisely and only to create
conventional way to do these singletons without need for those annoying
wrappers.
Maybe I should include the example to illustrate how hard and
inconcievable it is to create such singleton for use in a few { levels
deeper, going there and back, creating them more for many nested levels
in one outer place, and so forth, but I believe you can imagine.
Users should be able to declare class-private and instance-private
names, in other words.
Instance-private:
These cases do not need any special syntax. They can use const foo =
Name.create(). It is very little hassle. I proposed 'private' only for
singletons, because for them the convenience is really useful.
Class-private:
Use singleton in class block scope.
Your block examples, which I modified, are not complete enough to judge
what's wanted. By asserting singleton private name per source
declaration you are deciding prematurely and overconstraining the
feature. Let the user put the block or closure at the right inner or
It was meant as a convenience only for singletion, as they are the hard
case. The other cases are easy without need for help from 'private'.
So user can put the local case there, by normal means.
Or he can put the hard case (singletion with wrapper) with conenient
'private'.
outer level and declare there. There are an arbitrary number of
generative layers (generations): class static private, class instance
private, inner closure private, etc. etc.
And I say (and hopefully I am not mistaken) that those runtime-local are
easy to do by playing with let, const and Name.create(); and those
lexically-local are hard so the convenience is placed especially for them.
Also, I'd say, the semantics of private can then be straightforward: for
_any_ {...} block, the private key is only created once and visible only
in the block. Never mind what block will it be; you have the spatially
local temporally shared key for your use.
/be
Herby
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss