Porting vanilla (minimal external API usage, no SIMD, no threading) C++ code to work in the browser with emscripten and WebAssembly is amazingly simple now. The Emscripten docs are excellent, but here are some things that could speed up the process of getting started:

1. Beware of code which does unaligned memory reads/writes (which "may be slow on some CPU architectures")
2. Test with -fsanitize=undefined -fsanitize=address
3. Link with "-s ALLOW_MEMORY_GROWTH=1" and "-s INITIAL_MEMORY=X", X is a multiple of 64k, allows the C++ heap to grow.
(I completely avoid unaligned memory reads/writes because when compiled to asm.js they "can fail silently".)
4. Link with "-s MALLOC=emmalloc" to reduce compiled size.
5. I usually test with -O1 because -O0 can take very long to load/execute.
6. For debugging link with -s DEMANGLE_SUPPORT=1 and -s ASSERTIONS=1
7. C++ printf() outputs to the Developer Console: Chrome Settings->More tools->Developer tools
8. If something crashes, try running in Firefox which may explain the error differently.
9. I use Web Server for Chrome for development:
https://t.co/3drLehhSlL
The C FILE I/O functions work, but on a virtual file system:
https://t.co/iyJyAAVBiu

You can package up individual files from a directory that gets preloaded before your module executes.
To wrap C++ functions, classes, types etc. to expose them to Javascript code, look for "EMSCRIPTEN_BINDINGS". It's quite slick and mostly automatic.
Reading an integer property on a Javascript object from C++:

const emscripten::val& srcBuffer;

unsigned int length = srcBuffer["length"].as();
Copying from a Javascript Uint8Array to a std::vector:
And the reverse: copying from a std::vector to a Javascript Uint8Array (which was sized in Javascript to be >= the size you want to copy):
To JavaScripte/WebAssembly wizards all of this is probably the most basic beginning stuff. However, to native C++ coders not very familiar with these technologies (like me), all of this takes a while to figure out.
I use "emcmake cmake ../" in my build directory, with my CMakeLists.txt file in the parent folder. It sets environment variables that CMake needs to use emcc (the compiler).
All the heavy lifting that I do (data compression, decompression, transcoding)- stuff that doesn't require external API access - is in C/C++. Pretty much everything else, like the UI, WebGL usage, etc. is written in Javascript.
WebAssembly SIMD is the tech you want to use for SIMD in the web world. Personally, I use the intrinsic function wrappers. Functionality wise it seems vaguely somewhere in between SSE v2 and v4.
Multithreading support is still the wild west. I wouldn't depend on it being available yet in all browsers:
https://t.co/hyK6E6Pvso
#emscripten #webassembly

More from Internet

You May Also Like

The YouTube algorithm that I helped build in 2011 still recommends the flat earth theory by the *hundreds of millions*. This investigation by @RawStory shows some of the real-life consequences of this badly designed AI.


This spring at SxSW, @SusanWojcicki promised "Wikipedia snippets" on debated videos. But they didn't put them on flat earth videos, and instead @YouTube is promoting merchandising such as "NASA lies - Never Trust a Snake". 2/


A few example of flat earth videos that were promoted by YouTube #today:
https://t.co/TumQiX2tlj 3/

https://t.co/uAORIJ5BYX 4/

https://t.co/yOGZ0pLfHG 5/
A THREAD ON @SarangSood

Decoded his way of analysis/logics for everyone to easily understand.

Have covered:
1. Analysis of volatility, how to foresee/signs.
2. Workbook
3. When to sell options
4. Diff category of days
5. How movement of option prices tell us what will happen

1. Keeps following volatility super closely.

Makes 7-8 different strategies to give him a sense of what's going on.

Whichever gives highest profit he trades in.


2. Theta falls when market moves.
Falls where market is headed towards not on our original position.


3. If you're an options seller then sell only when volatility is dropping, there is a high probability of you making the right trade and getting profit as a result

He believes in a market operator, if market mover sells volatility Sarang Sir joins him.


4. Theta decay vs Fall in vega

Sell when Vega is falling rather than for theta decay. You won't be trapped and higher probability of making profit.
Trading view scanner process -

1 - open trading view in your browser and select stock scanner in left corner down side .

2 - touch the percentage% gain change ( and u can see higest gainer of today)


3. Then, start with 6% gainer to 20% gainer and look charts of everyone in daily Timeframe . (For fno selection u can choose 1% to 4% )

4. Then manually select the stocks which are going to give all time high BO or 52 high BO or already given.

5. U can also select those stocks which are going to give range breakout or already given range BO

6 . If in 15 min chart📊 any stock sustaing near BO zone or after BO then select it on your watchlist

7 . Now next day if any stock show momentum u can take trade in it with RM

This looks very easy & simple but,

U will amazed to see it's result if you follow proper risk management.

I did 4x my capital by trading in only momentum stocks.

I will keep sharing such learning thread 🧵 for you 🙏💞🙏

Keep learning / keep sharing 🙏
@AdityaTodmal