wat-compiler
winter
wat-compiler | winter | |
---|---|---|
2 | 1 | |
18 | 1 | |
- | - | |
0.0 | 2.7 | |
over 1 year ago | 10 months ago | |
JavaScript | C++ | |
- | 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.
wat-compiler
-
Understanding Every Byte in a WASM Module
For some time I've been fascinated by the codebase of a small WAT compiler written in JavaScript.
https://github.com/stagas/wat-compiler/blob/main/story.txt
And I mean "small" as a real complement to how readable the entire compiler is. It's also been a great way to appreciate the design of the WASM text format and WASM overall. It's not a Lisp but has a similar feel to it.
I've been meaning to get more fluent at writing WAT directly, not for any practical purpose but just for pleasure of it. I could see myself gradually building up some abstractions to help me deveolp larger programs, perhaps a slightly higher-level language.
-
Grain: WebAssembly-First Programming Language
I was also disappointed that this isn't included in the browsers given that it was designed to be very simple to parse and compile. So I tried as an exercise to build such a compiler[0] and indeed it was much easier than I expected (with a few shortcuts of course, being a POC). It is just 5kb gzipped and it compiles to binary most of the WAT code out there and also quite fast, just a few ms. That said, I think writing WAT by hand is only helpful for very small critical hot code, anything more complex and IMO you need an abstraction of some sort.
[0]: https://github.com/stagas/wel
winter
-
Understanding Every Byte in a WASM Module
I entered into WASM assuming it was simple and minimal but there are a lot of runtime edge cases that are quite surprising. I built an interpreter that passes all the non-SIMD test cases from the official spec. Would be interesting to clean-up the spec to be a real minimal execution only core. There is a real barrier to entry for producing new lightweight implementations.
https://github.com/peterseymour/winter
What are some alternatives?
bytenode - A minimalist bytecode compiler for Node.js
sia - Sia - Binary serialisation and deserialisation
gc - Branch of the spec repo scoped to discussion of GC integration in WebAssembly
website - AssemblyScript's website and documentation.