| > But with wasm, you just pull in csharp.wasm, python.wasm and java.wasm, so it's just one binding layer, not three. A bit of a rant, but there's nothing specific to WebAssembly about this. Whether you're using WebAssembly or native code: - The basic interface you get between caller and callee is a low-level calling convention, where essentially all you have are integers (which can be pointers), and any higher-level data structures need to be built out of that. - A slightly higher-level interface is the C ABI; many languages support exporting and consuming APIs using the C ABI, but it can be frustratingly low-level. - To provide an even higher-level interface, there are bindings generators, which could in principle either be designed as direct language-to-language bridges, or as a single common standard that any language can provide and consume APIs for. The WebAssembly Component Model standard and the wit-bindgen tool are an example of the latter. They happen to be defined specifically for WebAssembly rather than generically for any architecture. If they become ubiquitous at some point in the future like they're supposed to, then WebAssembly will have an advantage when it comes to high-level bindings, not because of any fundamental technical aspect of WebAssembly itself, but just because people building these bindings on top of WebAssembly have more motivation and more consensus. (WebAssembly does have a technical advantage when it comes to sandboxing between components, but this is relatively unimportant for most use cases.) But for now, wit-bindgen isn't ubiquitous, and most of those languages don't even work in WebAssembly yet… |
Sandboxing also goes a long way towards containing the supply chain security issues that every language is susceptible to.