wajic
multi-memory
wajic | multi-memory | |
---|---|---|
6 | 8 | |
205 | 133 | |
3.9% | 0.8% | |
0.0 | 7.7 | |
about 3 years ago | 5 months ago | |
JavaScript | WebAssembly | |
zlib License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
wajic
-
CoWasm: An alternative to Emscripten, based on Zig (demo: Python in the browser)
This is a slim alternative to Emscripten which focuses only on the C/C++ <=> JS interoperability part:
https://github.com/schellingb/wajic
-
From a WebAssembly Perspective
There's actually a super interesting project called wajic here:
https://github.com/schellingb/wajic
It's basically clang plus wasm-opt and some magic pixie dust which enables some of the most important features of Emscripten, but without the whole 'technology zoo' :)
- Zig and WASM
-
WebAssembly and C++
There's now an interesting alternative to Emscripten called WaJIC:
https://github.com/schellingb/wajic
Enables most of the "Emscripten magic" (like embedding Javascript code into C/C++ files), but in a more bare bones package (apart from clang it essentially just uses the wasm-opt tool from Binaryen for post-processing).
(to be clear, wajic has fewer out-of-the-box features than Emscripten, but it might be an alternative for very small projects which don't need all the compatibility shims which are coming with Emscripten, while still providing tools for calling between C/C++ and JS.
-
Show HN: How to compile C/C++ for WASM, pure Clang, no libs, no framework
Since I haven't seen it mentioned in the comments yet, here's another interesting project in the general area of "WASM without Emscripten":
https://github.com/schellingb/wajic
This provides an alternative implementation of Emscripten's EM_JS() magic (embed Javascript snippets right in the C/C++ source code), but without the Emscripten SDK. It still needs some additional tools next to Clang, so it sits somewhere between "pure Clang" and "full Emscripten SDK".
-
Writing bindings to `dos-like` for Rust: some lessons learned
Alas, although there is WebAssembly support in the original dos-like, it is still not supported in the bindings for Rust. It would require a Rust toolchain to integrate with WAjic, which I am pretty much unfamiliar with. If you have any idea on how to achieve this, I would love to know.
multi-memory
-
Revisiting the DOS Memory Models
Interesting!
https://github.com/WebAssembly/multi-memory/blob/main/propos...
The scaling point is what I was thinking of.
"As long as Wasm memories are limited to 32 bit address space, there is no way to scale out of 4 GB memory efficiently. Multiple memories at least provide an efficient workaround until 64 bit memories become available (which may still take a while)."
-
Top 8 Recent V8 Updates
Support for multi-memory to deal with multiple memories in Wasm.
-
WASI Support in Go
> You can do attacks that most people haven't been able to do for 20+ years.
This is a bad and roundabout way to say that vulnerabilities in WebAssembly modules may cause a corruption in their linear memory. Which is absolutely true, but those attacks still matter today (not everyone turns ASLR on) and similar defences also apply. In the future multiple memories [1] should make it much easier to guard against remaining issues. WebAssembly is a lucrative target only because it is so widespread, not because it has horrible security (you don't know what the actually horrible security looks like).
[1] https://github.com/WebAssembly/multi-memory/blob/main/propos...
- WASI: WebAssembly System Interface
-
Accessing WebAssembly reference-typed arrays from C++
There are stray references to the concept of multiple address spaces (or 'memories') in the wasm spec at present, and I recall at one point you may have always been passing 'memory #0' to your load/store opcodes. It looks like people are still working on that as the solution.
https://github.com/WebAssembly/multi-memory
-
WebAssembly and C++
It's not segmented, so no... or rather, not yet.
The wasm spec already accommodates to some extent the notion of multiple "memories" (i.e. distinct flat heaps), although it only allows for one in practice:
https://webassembly.github.io/spec/core/syntax/modules.html#...
And there's an active proposal to allow for multiple memories:
https://github.com/WebAssembly/multi-memory/blob/main/propos...
In an environment like that, you'd need full-fledged pointers to carry both the memory index and the offset; and then you might want a non-fat "pointer to same memory" alternative for perf. Might as well call them far and near.
- WebAssembly 2.0 Working Draft
What are some alternatives?
memory-control - A proposal to introduce finer grained control of WebAssembly memory.
reference-crdts - Simple, tiny spec-compliant reference implementations of Yjs and Automerge's list types.
minimal-zig-wasm-canvas - A minimal example showing how HTML5's canvas, wasm memory and zig can interact.
clang-wasm - How to build webassembly files with nothing other than standard Clang/llvm.
uwm-masters-thesis - My thesis for my Master's in Computer Science degree from the University of Wisconsin - Milwaukee.