The WebRacket language is a subset of Racket that compiles to WebAssembly
github.com58 points by mfru 4 days ago
58 points by mfru 4 days ago
I read the WASM spec and became somewhat of an expert in it for the purpose of eventually designing a low-level language specifically for wasm, to be the most efficient and lowest-level language you could possibly have for wasm, and then gradually add high level concepts into it to make it more convenient. Kind of like building C on top of asm, and then gradually evolving it into C++. That project never came about though due to lack of community interest and time on my part, but I like seeing languages that take a fresh look at how to integrate with wasm using novel techniques to aim for maximal efficiency.
Is there any shared lineage between this and Whalesong, a previous Racket->JS compiler?
Of course both projects have the same maintainer if I recall, Jens Axel Søgaard is a rockstar :)
Jens Axel Søgaard is cool and involved in many things. We collaborated on SICP support.
Original developer of Whalesong was Danny Yoo. https://www.hashcollision.org/whalesong/
There was also this: https://docs.racket-lang.org/racketscript/
Dave Herman worked on various JS-related libraries for Racket (or PLT Scheme) before he was involved with Rust.
I love this. Racket is the future we were promised.
Is a (Web)Racket engineer a racketeer?
It is interesting to see another language target WebAssembly especially one like Racket. The fact that it compiles to a subset of the language limits its utility right now. I think it is a neat proof of concept but it needs full language support.
For folks curious about the supported language subset, here's a summary:
- Modules aren't implemented yet, but are high on the list
- Continuation-based control flow isn't supported yet, including break and promises. Tail calls are supported though.
- No support for complex numbers, bignums, weak hashtables, immutable hashtables, prefab structs, regexp, or file I/O support
Most of the rest of racket/base should work, according to the README. There's also a FFI for javascript, including bindings for Math, DOM, Canvas, MathJax, XTermJS, and JSXGraph. Overall feels like you can use most of the language right now unless you need odd Racket-isms or call/cc.
As far as I know compiling full Racket to WASM is impossible because of continuations.
I noticed the --expose-gc. Does this mean it's using the (now standardized) Wasm GC feature?