pacman.zig
book
pacman.zig | book | |
---|---|---|
3 | 22 | |
206 | 1,700 | |
- | 0.5% | |
7.6 | 0.0 | |
1 day ago | 2 months ago | |
Zig | Handlebars | |
MIT License | MIT License |
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.
pacman.zig
-
Zig and WASM
For a somewhat more complete example which runs in browsers, check out my little pacman.zig toy project [0]. This is cheating a bit by using Emscripten toolchain as 'sysroot' (needed for the Emscripten headers), and the Emscripten linker to create the html+js+wasm output file, but the actual code is all compiled with the Zig compiler.
The interesting part is that the platform abstraction is provided by the sokol headers [1], with auto-generated Zig bindings [2]. It's interesting because the C headers use "Emscripten magic" (mainly embedding Javascript snippets in the C sources via the EM_JS() macro), and the Zig compiler is able to compile this (when it has access to the Emscripten headers).
It would be nice if the "Emscripten platform" could get the same type of cross-compilation support as the desktop platforms eventually, but apart from bundling the Emscripten headers, this would also require to implement some of the "Emscripten magic" in the linker step.
Maybe projects like WaJIC can help with this (this basically implements the "Emscripten magic" of embedding Javascript snippets in C/C++ source code, but without Emscripten (only the wasm-opt tool is needed AFAIK).
Anyway... it's a lot of fun to tinker around with this stuff in Zig, and watch how it's all taking shape :)
[0] https://github.com/floooh/pacman.zig
- Cross-platform build with 3rd-party libraries?
-
To Learn a New Language, Read Its Standard Library
My advice would be: to learn a new language, start writing some non-trivial projects in it (a few thousand lines of code or so). In some languages (like Python), the standard library is the actually important feature, in other languages (like C), it better to mostly ignore the stdlib. Example: I started learning Zig by writing a Pacman clone (https://github.com/floooh/pacman.zig) and a home computer emulator (https://github.com/floooh/kc85.zig), the Pacman clone doesn't use any Zig stdlib features at all, and the emulator only minimally for parsing command line args and loading data from files.
Zig's stdlib is much more useful than C's, but it's still entirely possible to write useful programs without it and instead focus on learning Zig's language features first.
But on the other extreme, the whole point why I learned Python was its "batteries included" standard library.
book
-
Rust, WASM, and LOK
Like many Rust features, there is a Rust/WASM tutorial and book that was very good. I was able to follow the tutorial to get up and running with development pretty easily... though this entire ecosystem kind of has way too many moving parts. Webpack? NPM? Nodejs? Just for this? It's a bit heavyweight, but I guess like 90% of the development in the world uses stuff like this now, huh?
-
Implement React v18 from Scratch Using WASM and Rust - [1] Build the Project
For more information, you can refer to the Rust and WebAssembly.
-
Hello, I am React Developer who wants to start use wasm in rust.
As a starting point for Rust in general, you should read the book. And if you got some grasp of Rust, you should take a look at the book about Rust and Wasm.
-
WASM: memory.buffer byteLength smaller than the offset of the pointer
I am following the Rust Wasm book. I have the following struct.
- I’ve fallen in love with rust so now what?
-
Any idea about what Figma is using to run Rust/c++ code in browser?
https://rustwasm.github.io/docs/book goes over how to compile to WASM and rendering to a canvas.
-
Rust で WebAssembly (wasm) - Arch Linux + Webpack (Rust 1.66)
Rust 🦀 and WebAssembly 🕸 (英語)
-
Rust for Web for somebody who's never done any kind of WebUI before
I'm a little confused about how Rust fits into your UI-for-a-Python-API thing. Web UIs are typically written in Javascript or something that compiles to Javascript. Compiling Rust to Javascript is a not a common use of Rust at this time. The typical use of Rust in a web application would be the part that runs on the server (the "backend"), not the part that runs in the web browser (the "UI"). While you can write web UIs in Rust, this is a thing better learned after learning the normal way to do it, in Javascript.
-
Compiler option to make all panics be undefined behavior?
AFAIK unwinding in WASM is not a thing: https://github.com/rustwasm/book/issues/76
- What's the best way to generate WASM programmatically?
What are some alternatives?
libcxx - Project moved to: https://github.com/llvm/llvm-project
wasm-bindgen-rayon - An adapter for enabling Rayon-based concurrency on the Web with WebAssembly.
SDL.zig - A shallow wrapper around SDL that provides object API and error handling
wasm-bindgen - Facilitating high-level interactions between Wasm modules and JavaScript
zig-wefx - WEFX is a simple graphics drawing package using Zig, WASM, and an HTML canvas.
trunk - Build, bundle & ship your Rust WASM application to the web.
julia - The Julia Programming Language
zig-wasm-test - A minimal Web Assembly example using Zig's build system.
minimal-zig-wasm-canvas - A minimal example showing how HTML5's canvas, wasm memory and zig can interact.
wasmer - 🚀 The leading Wasm Runtime supporting WASIX, WASI and Emscripten
Dodgeballz - A mini game using Zig, WASM and JS
wasm-bindgen-rayon - An adapter for enabling Rayon-based concurrency on the Web with WebAssembly.