Can we at least agree that if some extension brings *exactly* same constructor name, StructType and ArrayType, and more or less exactly the same signature/usage of what Brendan showed in his slides it become kinda natural to compare/test/confuse these two different implementations for different purposes ?
What would you expect from a namespace.Array constructor if not something similar or exactly the Array constructor we are all familiar with ? On Sat, Sep 17, 2011 at 8:54 PM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu>wrote: > On Sat, Sep 17, 2011 at 2:34 PM, Andrea Giammarchi > <andrea.giammar...@gmail.com> wrote: > > First of all thanks for clarifications ... as I have said, js-ctypes > > extension looked way too similar to what Brendan showed in his slides. > > In any case, there are still a couple of confusing points to me and yes, > I > > will update my post as soon as these things are clear. > > For example ... > > > >> > >> 1. Binary Data, a spec for handling bit-level encodings of various > >> values. This is related to Typed Arrays, another spec that's shipping > >> already in some browsers. > > > > precisely, these are indeed part of the benchmark code: Int32Array > > Also I have explicitly slowed down the logic creating a "classic" literal > JS > > object per each loop iteration ... still, way too slow performances so > > whatever js-ctypes has been created for, something went wrong, imo > > The benchmark code you posted doesn't show how you use Int32Array, so > I can't say anything definitive about it, but again, Int32Array is > part of the Typed Arrays system, which is *not the same* as js-ctypes. > They are for totally different things. > > >> 2. js-ctypes, which is a foreign function interface for JS in Firefox. > >> This is used for calling host libraries using the native platform > >> (C-based) calling convention. If you're coming from a python > >> background, it's very similar to, and named after, the 'ctypes' > >> library. > > > > Still way too similar to what JS.next is proposing ... but I am actually > > glad this js-ctypes "thingy" is not the JS.next purpose. > > No, this is *not similar at all* to what is proposed for ES.next. > js-ctypes is an FFI, which is not related at all to any ES.next > proposal. > > >> 3. Cython, a restricted dialect of Python that compiles to C for > >> performance. > > > > And with TraceMonkey/tracer/whatever I would expect natively optimized JS > > structures and collections since it's about defining static type *into* > JS > > world, regardless the fact C will use them for its purpose. > > TraceMonkey does not add static types to JavaScript. TraceMonkey is a > system for dynamic optimization of JavaScript code, based on its > runtime behavior. Static types have nothing to do with it. > > > Again, glad I have used the only way I had to test this stuff and this is > > not what we gonna have on JS world. > > What you tested was not at all like what you thought you were testing, > or what you wrote about. > > >> These are all totally different things. Your blog post compares 2 and > >> 3, and then draws conclusions about 1. If you want to benchmark > >> js-ctypes against something from Python, you should benchmark it > >> against ctypes, although they both use the same underlying library, > >> libffi, so the results probably won't be that different. > > > > If I compare Cython with js-ctypes I bet Cython will be faster ... then > > again, why? > > Because Cython is a compiler from a restricted subset of Python, > annotated with static types, and js-ctypes is an FFI. The point of > js-ctypes is to bind to an existing C library, which you do not do in > your blogpost. > > > But at this point I don't care much since this extension brings > > JS.next without JS.next optimizations > > js-ctypes has nothing to do with anything in ES.next. > > >> There is currently no high-performance implementation of the Binary > >> Data spec, so it can't be usefully benchmarked at this point. > > > > at which point it will be useful to benchmark them then? > > Also why nobody gave me an answer about double memory/object allocation > per > > each typed instance? > > I'm sure that when browsers ship optimized implementations of Binary > Data, that will be widely announced. > > >> > >> Typed > >> Arrays does have high-performance implementations currently. There's > >> also no analogue of Cython of JS, because the JS implementation > >> community has focused on making fast implementations of all of > >> JavaScript, rather than limiting the language. > > > > and this is good, indeed Int32Array is part of my benchmark > > Int32Array is not for the same sort of thing as Cython. > > >> Finally, your use of the Function constructor prevents many > >> optimizations -- don't do that in JavaScript code that you want to be > >> high-performance. > > > > NWMatcher is the fastest DOM engine out there and it's based on this > trick > > ... I wonder why engines can optimize runtime but these cannot optimize > > runtime runtime created stuff ... in any case, check those functions, > these > > can rarely be faster in JagerMonkey since only necessary checks are > > performed so that a tracer will optimize once rather than twice or more > ... > > am I wrong? > > DOM interaction will almost certainly dominate the performance of > anything like NWMatcher, so the performance of eval is unlikely to be > the issue here. > > >> There's an excellent overview of how to write > >> high-performance JavaScript code by David Mandelin here: > >> > >> > http://blog.mozilla.com/dmandelin/2011/06/16/know-your-engines-at-oreilly-velocity-2011/ > > > > this has been linked in the post itself and I know those slides and I > have > > asked him personally questions ... questions that I really would like to > > understand in this ML before I update my post so that I can provide a > proper > > feedback about my doubts. > > However, you don't seem to have fully read the slides. As he says "Do > not use [eval] anywhere near performance sensitive code". The > Function constructor is a version of |eval|. > > > Once again, why once a struct has been defined we need to create per each > > instance its counterpart in native JS ? > > > > new Point2D({x: 1, y: 2}) ... why? > > what's wrong with a *shimmable* > > new Point2D(x = 1, y = 2) > > so that no object has to be created? > > You'd need a benchmark that shows that the object allocation you're > avoiding here is worth the lack of flexibility. > -- > sam th > sa...@ccs.neu.edu >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss