The WebRacket language is a subset of Racket that compiles to WebAssembly
56 points
by mfru
4 days ago
| 7 comments
| github.com
| HN
publicdebates
13 minutes 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.
reply
gcr
14 minutes ago
[-]
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 :)

reply
neilv
4 minutes ago
[-]
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.

reply
noelwelsh
1 hour ago
[-]
I love this. Racket is the future we were promised.
reply
KarenDaBass
12 minutes ago
[-]
Is a (Web)Racket engineer a racketeer?
reply
gcr
6 minutes ago
[-]
They're certainly a schemer. :-)
reply
dfajgljsldkjag
2 hours ago
[-]
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.
reply
gcr
7 minutes ago
[-]
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.

reply
volemo
8 minutes ago
[-]
As far as I know compiling full Racket to WASM is impossible because of continuations.
reply
d_philla
1 hour ago
[-]
check out grain! https://grain-lang.org/
reply
titzer
1 hour ago
[-]
I noticed the --expose-gc. Does this mean it's using the (now standardized) Wasm GC feature?
reply
apitman
45 minutes ago
[-]
Hoot is another interesting one: https://spritely.institute/hoot/
reply