- π Modern language with really good WebAssembly support
- π Great ecosystem where most crates work perfectly fine in WebAssembly
- π Easy project setup
- π Ownership and borrowing make things a little harder
- π WebAssembly files are not small by default (you need a bunch of flags, no_std and co.)
- π Good WebAssembly support
- π What you see is what you get (full control over memory)
- π Not super trivial to set up a project (need WASI or other WASM sysroot and makefiles / CMake)
- π No modern language features
- π Easy language
- π Small WebAssembly files by default
- π Requires WASI (only a single import for writing an abort message though, could easily be snipped)
- π Project setup is absurd (GOROOT, GOPATH, go.mod, ...)
- π Huge compiler toolchain (2 GiB)
- π Easy language (TypeScript, though with a few semantic differences)
- π Very small WebAssembly files by default
- π Easy project setup
- π Limited and unclear limitations compared to real TypeScript
- π Toxic maintainers (project may even be half abandoned)
- π Easy language
- π Easy project setup
- π Slow due to being interpreted
- π The default number type is unsuitable for addresses (floating point)
Early WASI support with no custom imports or exports yet.
Early WASI support with no custom imports or exports yet.
Requires unfinished WASM proposals such as WASM GC that our runtime doesn't support yet. Freestanding support is somewhat unclear.