Save Object.observe()! (please) + make WeakMap/WeakSet observable.

Isiah Meadows isiahmeadows at
Tue Nov 3 17:13:33 UTC 2015

Lol... I feel I'm in an insane minority that can work relatively
productively in Java 7 and Haskell both.

Of course, I have a preference, but that preference lies around that of
OCaml and Clojure. It's more the expression-based, impure functional
languages that I'm most productive in. Observing mutations that I react to
using immutable data structures. Sounds very odd and/or blasphemous to
some, but that's what I like. MVC models like that are how Mithril and
similar smaller frameworks have started to get some attention. It prefers
highly local state, and an observed object would be a great state model for

And on that note, I'm going to stop before I derail the topic too far.

On Tue, Nov 3, 2015, 11:26 Andrea Giammarchi <andrea.giammarchi at>

> That would make functional-programming-oriented developers wining forever
> about such monstrosity in  specs ... I'd personally love such possibility!
> Regards
> On Tue, Nov 3, 2015 at 2:41 PM, Matthew Robb <matthewwrobb at>
> wrote:
>> I probably have a terrible understanding of how this all works at a low
>> level but I feel like a potential solution would be a method of "upgrading"
>> a non-proxy object to be a proxy. The reason accessors are being used as
>> they are now is because you can retro fit them. Maybe what I am suggesting
>> is essentially like swapping out the internal pointer of an object with
>> another object (such as the way live module bindings work). In this way you
>> might upgrade an existing object to behave like a proxy.
>> - Matthew Robb
>> On Tue, Nov 3, 2015 at 3:20 AM, Tom Van Cutsem < at>
>> wrote:
>>> 2015-11-02 23:34 GMT+01:00 Coroutines <coroutines at>:
>>>> I come from Lua.  In Lua we make proxy objects with metamethods.  You
>>>> create an empty table/object and define a metatable with a __index and
>>>> __newindex to catch accesses and changes when a key/property doesn't
>>>> exist.  I would primarily use this in sandboxes where I wanted to
>>>> track the exact series of operations a user was performing to modify
>>>> their environment (the one I'd stuck them in).
>>> For this type of use case, you can use an ES6 Proxy <
>>> You can think of the proxy handler's methods as the 'metamethods' of the
>>> proxy object.
>>> What O.o would provide beyond Proxy is the ability to observe changes to
>>> already pre-existing objects. However, since you mention you'd start with
>>> an empty table/object, you should be able to create a fresh Proxy and use
>>> that to trace all property accesses.
>>> Proxies are particularly well-suited when you want to sandbox things,
>>> since you should be in control of the sandboxed environment anyway and can
>>> set-up proxies to intermediate. O.o is particularly well-suited to
>>> scenarios where there are already plenty of pre-existing objects and you
>>> don't know ahead of time which ones to observe and which not.
>>> Cheers,
>>> Tom
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at
> _______________________________________________
> es-discuss mailing list
> es-discuss at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list