Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add C/C /Rust examples to go with the wat files #9

Open
gagyibenedek opened this issue Dec 12, 2017 · 8 comments
Open

Add C/C /Rust examples to go with the wat files #9

gagyibenedek opened this issue Dec 12, 2017 · 8 comments
Labels
effort: large Task is large effort. new example

Comments

@gagyibenedek
Copy link

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.

@chrisdavidmills
Copy link
Contributor

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.

@ajvincent
Copy link

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?

@lukewagner
Copy link
Contributor

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.

@HackerWand
Copy link

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?

@ajvincent
Copy link

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

@HackerWand
Copy link

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

@ajvincent
Copy link

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.

@ghost
Copy link

ghost commented Jun 23, 2022

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.

@caugner caugner added needs triage Triage needed by staff and/or partners. Automatically applied when an issue is opened. effort: large Task is large effort. new example and removed needs triage Triage needed by staff and/or partners. Automatically applied when an issue is opened. labels Oct 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
effort: large Task is large effort. new example
Projects
None yet
Development

No branches or pull requests

6 participants