cunarist / rinf

Rust for native business logic, Flutter for flexible and beautiful GUI
MIT License
1.95k stars 69 forks source link

From `wasm32-unknown-unknown` to `wasm32-wasi` #204

Open temeddix opened 11 months ago

temeddix commented 11 months ago

Report

Rinf does smoothly connect Flutter and Rust right now, but there's one clunky part left: the web.

On the web, with the curren target wasm32-unknown-unknown, many native functionalities including std::thread, std::time::Instant, std::fs are not working. This limitation prevents many crates like tokio and rayon from working on the web, leaving the vast majority of Rust ecosystem being fallen out from the web platform.

The goal is to use wasm32-wasi target for the web, so that users can use Rusts's thread, time, file, network APIs and various crates just like they do on native platforms. If we are able to compile Rust crates to wasm32-wasi, the JavaScript polyfill libraries will handle the rest, utilizing existing web APIs.

This is a tracking issue, as this goal cannot be achieved without community support.

  1. [ ] wasmer-js or browser_wasi_shim supports threads polyfill
  2. [ ] wasm-bindgen supports wasm32-wasi target
  3. [ ] wasm-pack supports wasm32-wasi target
  4. [ ] Migrate the Rinf codebase to wasm32-wasi target

Steps to Reproduce

Use any kind of system I/O functionalities on the web. It's very clunky, sometimes even panicking.

System Information

Not really relevant.

temeddix commented 11 months ago
temeddix commented 11 months ago

https://github.com/temeddix/jco-test

temeddix commented 11 months ago

jco might be used as our new JavaScript shim in the future: