4 ms·
Does this mean wasm is effectively just another ISA to compile to and emscripten is no longer needed?
by Scuds 8y ago
Does this mean wasm is effectively just another ISA to compile to and emscripten is no longer needed?
- Orphis 8y agoIf you need really small functions, yes. emscripten is providing all the libc functions, WASM loading code and binding generators. You will probably need some of that when porting existing libraries or applications to the web!
- e12e 8y agoWell, you generally need a libc when compiling for any platform, so that shouldn't be too special?
- steveklabnik 8y agoYou don't inherently need a libc for wasm. That is, libc is usually the API for the platform; wasm doesn't have such a thing really. Your wasm module says "hey, these are the functions I expose, and these are the functions that I am planning to call from the environment" and it's the host's job to wire that up properly. In the browser, that means when you instantiate a wasm module, you need to provide all the required functions, and then you can call the exposed functions from JS. Outside the browser, what things you can call and will be called is defined by the host. A libc can be useful inside of wasm for existing C or C++ code (or whatever) that is built for another platform, so that you can more easily compile to wasm as well. But it's an option, not required.
- e12e 8y agoWell, I meant that if you want to cross compile general code, you might want malloc, printf etc... I'm not sure the primary appeal of wasm is treating it as a low level target (even if that is possible and sometimes useful).
- steveklabnik 8y agoYou can get that stuff without a libc, if you’re not literally compiling C or C++. If you are, you’re right, though.
- Orphis 8y agoYou don't necessarily need it. You could have some math focused code you want to call from JS.
- BubRoss 8y agoThat is a good question, but as I understand it (from reading only) emscripten does a few other things, such as convert opengl calls to webgl, as well as use special integrated versions of SDL and GLFW so that native programs that use those libraries can be compiled directly. Both of those would include input and I think audio is dealt with in a similar way.
- steveklabnik 8y agoIt's a bit more complex than that. emscripten tries to provide a full environment; it adds a runtime with features like a libc. It also produces some HTML and JavaScript to load up the wasm, etc. The new wasm target gives you none of that. This means smaller binaries for some things, but it's harder to get existing desktop codebases up and running. (In Rust, we've had this new target for a while, and it's where we're putting in all of our development efforts. We still technically support the emscripten target as well.)
- petters 8y agoNo, it is not needed any more. I have a demo here: https://github.com/PetterS/clang-wasm https://github.com/PetterS/clang-wasm But be prepared to work without libc if you don't use emscripten. Writing a malloc is fun though!
- s_tec 8y agoNice demo, thanks. It's funny how technology go in waves. This reminds me more of programming microcontrollers than writing Web stuff, and yet this is the hot new thing!