apologies.  reading the github issue more closely, i'm not an expert on this 
matter.

-kai

> On Dec 8, 2017, at 3:23 AM, Alex Vincent <ajvinc...@gmail.com> wrote:
> 
> TLDR:  -1 is much more useful in mathematics than in expressing an opinion.
> 
> Mr. Zhu,
> 
> In this case I am the implementer, and I generally know what I'm doing after 
> well over fifteen years of working with the language, including the membrane 
> library we're talking about, and including writing an 1100+ page book on the 
> language.  (The latter taught me a lot, by the way.  You should try it 
> sometime.  It's a very humbling experience, both at the time for what you 
> thought you knew that's actually quite wrong, and much later in life, when 
> you realize what you still got wrong.  I only hope Martin Honnen is still 
> around for me to reiterate my thanks to...)
> 
> I shouldn't be worried about the garbage collector, and I'm not.  
> 
> But I do know how my membrane can (a) create and (b) hold onto references.  
> This wasn't about the garbage collector at all.  This was about avoiding 
> creating the proxy and thus, the reference, in the first place.  I am dealing 
> with the concept of "when is wrapping something in the membrane 
> counter-productive in some way".
> 
> I said "essentially a memory leak", not meaning to be taken entirely 
> literally.  It is a memory leak in the sense that unless somebody visits that 
> proxy again -- which no one will ever know if it's necessary or not -- the 
> reference to the proxy will remain alive.  For that proxy to exist because of 
> a simple filter function is possibly less than ideal, to put it politely.  
> Especially when said filter function can be called many times for many 
> different objects.
> 
> So yes, maybe it's premature optimization, and I'm always willing to admit 
> I'm wrong... when it's clear that I am.  In my case, I'm not looking at 
> micromanagement of the gc, but to avoid certain work in the first place.
> 
> Now, parsing a function's source code to find out if that function will, say, 
> set a global variable that it shouldn't, is probably pretty expensive as 
> well... except that the JavaScript engine has already done that parsing and 
> might have retained some useful metadata that the specification doesn't 
> expose.  Which is why I'm not particularly interested in adding esprima and a 
> bunch of code I don't understand for a small bit of metadata.  It's why I 
> came to this mailing list today, to ask the experts, "Hey, is this a good 
> idea to look into?  I actually have a use-case, and it's not something that 
> can be easily done in raw JS."  That's my understanding of the general 
> requirements for adding new API.
> 
> I already explored at least two other ideas that turned into dead ends, and 
> it's quite possible (probable, given the feedback) that this one will be a 
> dead end too.  I'm fine with that.
> 
> So sure, asking end users to micromanage or optimize their code is 
> irresponsible.  But I'm writing a library for developers to use, and if I can 
> provide advice on the best way to use that library, I think it's worth the 
> time to think about how that library works, and how to be nice to the 
> machines that it will run on.  So I'd better think a lot about optimizing my 
> code, and about helping my users get the best reactions from it.
> 
> On Thu, Dec 7, 2017 at 11:26 AM, kai zhu <kaizhu...@gmail.com 
> <mailto:kaizhu...@gmail.com>> wrote:
>> This led down a long, rambling path [1] where I then realized:  if the 
>> callback function is a pure function, then for the purposes of that 
>> callback, the arguments probably do not need to be wrapped in proxies at 
>> all.  The big catch is that the callback can't store any of the arguments in 
>> variables external to the callback (a classic side effect).  If the function 
>> really is pure, though, I can avoid the memory leak.
> 
> -1
> users generally should not be encouraged to micro-manage/optimize the gc in 
> javascript (javascript is not c). that is the responsibility of 
> engine-implementers. making users think they can outsmart the gc (which they 
> don't) will only encourage them to waste time writing “high-performance” code 
> that is bike-shedding at best and tech-debt at worst (and my suspicion is 
> membrane/proxy will suffer either of those fates with this feature).
> 
>> On Dec 8, 2017, at 2:22 AM, Mike Samuel <mikesam...@gmail.com 
>> <mailto:mikesam...@gmail.com>> wrote:
>> 
>> 
>> 
>> On Thu, Dec 7, 2017 at 1:11 PM, Alex Vincent <ajvinc...@gmail.com 
>> <mailto:ajvinc...@gmail.com>> wrote:
>> > OK, OK, clearly, pure functions are a fantasy in JavaScript.  Once again, a
>> > great idea and a lengthy essay of a post falls to a real-world situation.
>> > Nuts.
>> >
>> > What if there's a middle ground?  In the case I was originally talking
>> > about, the developer calling on my membrane controls how the callback
>> > function executes.  I just want to ensure that, when the callback is passed
>> > controlled and trusted arguments (including possibly "this"), the function
>> > doesn't refer to anything outside those arguments and local variables
>> > derived from them.  Is that reasonable to ask for?
>> 
>> Do you want the same kind of thing that Joe-E provides for Java?
>> http://www.cs.berkeley.edu/~daw/papers/pure-ccs08.pdf 
>> <http://www.cs.berkeley.edu/~daw/papers/pure-ccs08.pdf>
>> > Proving that particular methods within a code base are functionally
>> > pure—deterministic and side-effect free—would aid verification of
>> > security properties including function invertibility, reproducibility of
>> > computation, and safety of untrusted code execution. Until now it
>> > has not been possible to automatically prove a method is functionally
>> > pure within a high-level imperative language in wide use, such as Java. 
>> 
>> Nothing that is well established really fits for JS, but there are some
>> proposals and experimental features.
>> 
>> The frozen realms proposal <https://github.com/tc39/proposal-frozen-realms> 
>> might also be of interest.
>> > Though initially separate, realms can be brought into intimate
>> > contact with each other via host-provided APIs.
>> 
>> In a browser setting, WebAssembly 
>> <http://webassembly.org/docs/js/#webassemblyinstance-constructor> might be 
>> your best bet.
>> WebAssembly.instantiate(module,importsObj) runs a sandboxed binary
>> that has access to functions and values in an importsObject, and
>> takes care to prevent following backwards edges in the object graph
>> (__proto__, .constructor and the like).
>> 
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss 
>> <https://mail.mozilla.org/listinfo/es-discuss>
> 
> 
> 
> 
> -- 
> "The first step in confirming there is a bug in someone else's work is 
> confirming there are no bugs in your own."
> -- Alexander J. Vincent, June 30, 2001

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to