On Thursday, May 5, 2016, Alon Zakai <[email protected]> wrote:

> Yeah, I don't think this is compatible with the modularize mode. Separate
> files means communication between them using global state, so it can't
> really be fully modular anyhow. We should probably warn or error on this at
> compile time, if we don't already.
>

The module constructor function is a global symbol, so it ought to work for
the second .js payload to append a function as a property onto it, which
the constructor can call with suitable parameters to append the asm
property onto the internally created object.

I'll see if I can whip up a patch that works, if it doesn't work I'll whip
one up that errors out at compile time. :)

-- brion


> On Thu, May 5, 2016 at 5:24 AM, Brion Vibber <[email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>
>> That sounds really useful for debugging!
>>
>> Hmm, will this work with modular mode? Since it has to reach into Module,
>> but Module is encapsulated in a function and hasn't been instantiated... If
>> the .asm.js file provides a function for the constructor to pass into the
>> module to fill the asm property that ought to work.
>>
>> -- brion
>>
>>
>> On Thursday, May 5, 2016, juj j <[email protected]> wrote:
>>
>>> Hi all,
>>>
>>> I'd like to raise some awareness about the awesome --separate-asm linker
>>> flag that Alon added some time ago to Emscripten, in version 1.34.8
>>> (9/9/2015). What it does is it splits out the generated output files so
>>> that instead of one large .js file that contains all the code, two files
>>> foo.js and foo.asm.js will be emitted. The file foo.js will contain the
>>> Emscripten preamble, runtime and all the handwritten JS functions
>>> (--js-library code) and the --pre-js and --post-js content, whereas the
>>> foo.asm.js will only contain the big asm.js module that it assigns to
>>> Module.asm.
>>>
>>> This has multiple benefits:
>>>    - Often the single monolithic output is too large to handle in
>>> browser debugger and most text editors that do syntax highlighting. Often
>>> the debugging activities occur on the bridge layer where the compiled code
>>> talks to the browser, so it is the handwritten JS code that is of most
>>> interest. Separating these out to two files makes it easier to navigate the
>>> code and set breakpoints in browsers to the JS runtime itself.
>>>     - Looking towards WebAssembly, if you intend to later ship both a
>>> wasm version and an asm.js version of a single page for backwards
>>> compatibility, we'll try to make this easy for you by creating a single
>>> .html file that loads .wasm if supported, and if not, it'll fall back to
>>> the .asm.js version. This will utilize the --separate-asm path.
>>>     - Just recently, we had a big memory improvement land in Firefox
>>> (currently in Nightly branch, looking at Firefox 49 release on 2016-09-13)
>>> where we are able to recognize the JS script only containing asm.js
>>> content, in which case we handle the script memory of that file much more
>>> efficiently. JavaScript has from an Emscripten developer's viewpoint a
>>> rather exotic feature that requires browsers to retain the JS file contents
>>> around, e.g. because one can print the function bodies to a string. For
>>> asm.js modules, this is not really needed, so we have pushed this to a cold
>>> path by compressing the asm.js script data in memory. This can save 50MB+
>>> of memory on large asm.js codebases. This improvement is something that is
>>> asm.js only, WebAssembly will by design avoid this source of memory
>>> consumption.
>>>     - Also noteworthy is that when you are building with -s
>>> USE_PTHREADS=2 or -s PRECISE_F32=2 flags to enable backwards compatibility
>>> for non-SharedArrayBuffer/Math.fround capable browsers, --separate-asm is
>>> already implied, because the backwards compatibility architecture on these
>>> two features requires this.
>>>
>>> For these reasons, we definitely recommend enabling --separate-asm when
>>> building if possible. There are some drawbacks to this though, which might
>>> make it undesirable for some cases:
>>>    - two files is more than one, which might be inconvenient.
>>>    - there is a small amount of extra complexity that needs to be taken
>>> into account when loading. The file foo.asm.js needs to be loaded up before
>>> the file foo.js, since the asm.js module needs to be available to run the
>>> main file. If you are outputting straight to html with -o foo.html, then
>>> Emscripten will generate a proper loader for you, which XHRs the data in in
>>> the proper order. If you are outputting -o foo.js however, it will still
>>> generate the foo.js and foo.asm.js, but you'll need to manage the required
>>> XHR sequence by yourself on your site .html page. If this is not run in
>>> correct order, you'll likely see the JS exception "Module['asm'] is not a
>>> function" be thrown in the page console.
>>>
>>> Hope that is useful!
>>>    Jukka
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "emscripten-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected]
>> <javascript:_e(%7B%7D,'cvml','emscripten-discuss%[email protected]');>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <javascript:_e(%7B%7D,'cvml','emscripten-discuss%[email protected]');>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to