2013/1/22 David Bruant <[email protected]>
> Just realizing now, but how does the membrane do the symbol unwrapping
> if private symbols pierces it?
> 2 contexts A and B share a symbol, the symbol initially has to go through
> a public channel (get trap with a string name for instance) and if A
> created a symbol a, the membrane can provide a symbol b to the B context,
> but when A does "someObject[a] = 2" and B does "someObject[b]", both
> accesses pierce proxies, so the membrane can't do its unwrapping job.
>
The membrane doesn't need to unwrap. Evaluating "someObject[a]" in A, and
"someObject[b]" in B will result in different values.
In the context of membranes, "someObject" is actually a "Harvey Two-Face"
type of object (its split across two worlds, one in A, and a proxy
representation in B). Symbol-keyed indexing on the A face is distinct from
symbol-keyed indexing on the B face. But that's OK: it's the job of the
membrane to separate the A and the B face in the first place.
> Also, in some cases, the membrane can't switch a value.
> // in context A
>
> var s = new PrivateSymbol()
> var o = Object.freeze({s:s});
> // send o across the membrane
>
> In B, invariants checks make that the membrane can't answer anything else
> than the original symbol when b retrieves the "s" property
>
This is independent of private symbols. The same issue occurs if s were a
String. That's what requires the shadow-target work-around in membrane
proxies in general.
Cheers,
Tom
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss