webassembly-examples icon indicating copy to clipboard operation
webassembly-examples copied to clipboard

Add C/C++/Rust examples to go with the wat files

Open gagyibenedek opened this issue 8 years ago • 8 comments

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.

gagyibenedek avatar Dec 12 '17 17:12 gagyibenedek

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.

chrisdavidmills avatar Dec 13 '17 16:12 chrisdavidmills

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?

ajvincent avatar Mar 08 '18 06:03 ajvincent

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.

lukewagner avatar Mar 08 '18 17:03 lukewagner

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?

HackerWand avatar Feb 02 '22 12:02 HackerWand

No, sorry, life got in the way of my ambitions. Again.

ajvincent avatar Feb 02 '22 14:02 ajvincent

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

HackerWand avatar Feb 03 '22 02:02 HackerWand

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.

ajvincent avatar Feb 03 '22 05:02 ajvincent

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.

ghost avatar Jun 23 '22 00:06 ghost