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

Figuring out a proper JS fallback #175

Open
CryZe opened this issue May 11, 2018 · 9 comments
Open

Figuring out a proper JS fallback #175

CryZe opened this issue May 11, 2018 · 9 comments

Comments

@CryZe
Copy link

CryZe commented May 11, 2018

I feel like we should have some reasonable solution for supporting older browsers. So far I haven't really found a good solution so that's why I'm bringing it up here. Also once we have a good solution, we should probably document it.

@alexcrichton
Copy link
Contributor

AFAIK there's two major solutions here:

  1. Use wasm2asm in Binaryen. The wasm-bindgen repo has an example of this and has a mode for the wasm2es6js tool which runs wasm2asm.
  2. Use a wasm emulator in the browser, mentioned here.

Neither of these solutions is robust (AFAIK) in the sense that wasm2asm still has a lot of shortcomings and I'm not sure if there's much progress towards emulating wasm in the browser through JS.

I'd personally see wasm2asm as the best route forward here, but it'd certainly require a lot more love before we could officially recommend it I think

@Pauan
Copy link

Pauan commented May 12, 2018

There's also asmjs-unknown-emscripten (though obviously that has the overhead of emscripten)

@xtuc
Copy link
Member

xtuc commented May 12, 2018

I'll do more concrete benchmark on the JavaScript interpreter inplementation. What would be acceptable performances?

@Pauan
Copy link

Pauan commented May 12, 2018

@xtuc It will vary from project to project. Some projects may be fine with a 100x slowdown, others obviously will find that unacceptable.

@tlively
Copy link

tlively commented May 12, 2018

I should be free to continue work on wasm2asm soon if that would be useful to the community.

@CryZe
Copy link
Author

CryZe commented May 12, 2018

Alright, I've dug a bit further into this and this seems to be the current state:

  1. There's a WebAssembly interpreter called webassemblyjs, but that straight up just crashes completely on a stack overflow on Internet Explorer.
  2. Compiling wasm to asm.js via wasm2asm doesn't work for any actual large project as a lot of instructions aren't implemented right now.
  3. While asmjs-unknown-emscripten is a solution, I'm trying to actually switch away from emscripten as it hugely reduces the amount of potential contributors to the project as people don't really want to compile full on LLVM just to contribute to the project. That's a huge turn off.

@xtuc
Copy link
Member

xtuc commented May 12, 2018

@CryZe I should have mentioned it before sorry. I'm the author of webassemblyjs.

First, could you please open an issue with the crash? Thanks. Currently the interpreter doesn't support the full instruction set and on my few microbenchmarks It's arround 50 times slower than native.

On a side note, is that I'd like to take advantage of asm.js semantics in the interpreter.

@fitzgen
Copy link
Member

fitzgen commented May 25, 2018

binaryen's wasm2js (ne wasm2asm) has been getting a lot of love (mostly from @alexcrichton) recently. I think this is what we should recommend going forward.

With that in mind, would anyone like to write a section of the book about making JS fallback work via wasm2js?

@jrvidal
Copy link

jrvidal commented Mar 14, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants