Add C/C++/Rust examples to go with the wat files
I'm not sure if this is the right place for this, but it would definitely help a lot in understanding how these parts fit if we had a C/C++/Rust (at least one) version of the examples.
This is a good point. We do have an article about compiling over from C++: https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasm
But there is nowhere where we show direct comparisons between source (e.g. C++) and equivalent WA, along with compilation to wasm and usage in the JS.
Early next year I am intending to add a bunch of information on Rust and it's advantages over C++ in being the source of WAT/WASM. I will make this part of that initiative for sure.
I actually am putting together an outline for a tutorial with a realistic example: passing a Unicode string from JS to C++-compiled WASM, and passing it back in chunks.
The inspiration is a need I have for a XML parser. I was thinking of compiling Expat in WebAssembly. Before I can do that, I need someone to fill in some gaps on bridging C++ and JS.
So, I want to provide a baseline demo project with very specific questions and a tutorial document outline. I also want to find a colleague who understands WebAssembly well enough to answer those questions and complete writing the tutorial. The tutorial will assume general familiarity with JavaScript and C++.
I would provide:
- Test code in C++ which passes
- Test code in JS which passes (without calling the C++ code)
- A not-insignificant Unicode string to pass around.
- I'm thinking a MathML fragment for the definition of a limit from calculus.
- A Makefile to build the C++ project and to run the test code in C++ and JS
- A partial tutorial document, with complete outline.
The questions I want answered:
- JS code to import the module
- JS code to create an instance of the module's desired WASM class
- Passing a JS callback function into the instance for the C++ code to invoke, with the first argument being an Unicode string
- JS code calling a C++ method of the WASM instance, with an Unicode string
- Excluding void main() from the generated WASM code
- Makefile changes needed to compile the C++ code by em++
- How to migrate comments from C++ to WASM module, if possible
- A configure script to check for a minimal version of em++ (and probably nodejs as well)
Is there anyone out there who could be an effective partner in this?
There's also a lot of work on ergonomics and integrating into existing ESM/node workflows over in https://rust-lang-nursery.github.io/rust-wasm/. In particular, you can see mentioned in the README.md that one of the goals of that project is a small book documenting the whole workflow and I see a lot of active work on that in my GH notifications.
I actually am putting together an outline for a tutorial with a realistic example: passing a Unicode string from JS to C++-compiled WASM, and passing it back in chunks.
The inspiration is a need I have for a XML parser. I was thinking of compiling Expat in WebAssembly. Before I can do that, I need someone to fill in some gaps on bridging C++ and JS.
So, I want to provide a baseline demo project with very specific questions and a tutorial document outline. I also want to find a colleague who understands WebAssembly well enough to answer those questions and complete writing the tutorial. The tutorial will assume general familiarity with JavaScript and C++.
I would provide:
Test code in C++ which passes
Test code in JS which passes (without calling the C++ code)
A not-insignificant Unicode string to pass around.
- I'm thinking a MathML fragment for the definition of a limit from calculus.
A Makefile to build the C++ project and to run the test code in C++ and JS
A partial tutorial document, with complete outline.
The questions I want answered:
- JS code to import the module
- JS code to create an instance of the module's desired WASM class
- Passing a JS callback function into the instance for the C++ code to invoke, with the first argument being an Unicode string
- JS code calling a C++ method of the WASM instance, with an Unicode string
- Excluding void main() from the generated WASM code
- Makefile changes needed to compile the C++ code by em++
- How to migrate comments from C++ to WASM module, if possible
- A configure script to check for a minimal version of em++ (and probably nodejs as well)
Is there anyone out there who could be an effective partner in this?
Hi, I was wondering if there was any follow-up?
No, sorry, life got in the way of my ambitions. Again.
No, sorry, life got in the way of my ambitions. Again.
May I ask you a question? I want to know how to receive functions and variables imported from JS in C language. From the tutorial, I can only see how to import functions and variables in wat format, but can not find how to operate in C language
You'll have to ask someone else. I really haven't done any WebAssembly work at all. This ticket was supposed to be a way into that for me.
May I ask you a question? I want to know how to receive functions and variables imported from JS in C language. From the tutorial, I can only see how to import functions and variables in wat format, but can not find how to operate in C language
Hey, @HackerWand. if you're still interested in an answer to that: you would use C's extern keyword before the function, and in emscripten you might need to use their macro before that, EMSCRIPTEN_KEEPALIVE. But you can always ask for how to do the same of dedicated programming assistance websites, such as stackoverflow.com.