The Birth & Death of JavaScript wasn't talking about WASM, it was talking about Asm.js, which crucially differs from WASM by being a backwards-compatible subset of JavaScript amenable to JIT compilation. The goals of these standards look similar if all you care about is transpiling c and running it on a browser, but Asm.js worked everywhere from day zero modulo performance; WASM continues to be a moving target.
Meta comment: I love that this is on a self-hosted forge.
I'm hoping that AT protocol-based self-hosted forges let us have the independence of self-hosted but the networking and gamification of GitHub. Maybe something like Tangled will bring that, though I haven't looked too deeply.
This isn't quite a standards conforming Scheme just yet.
On the other hand, Hoot supports WASM-GC on release [0], and has had wasm support for a few years now. (Though Safari support has been a pain point - they've found a few bugs in WebKit's wasm support.)
Just eyeballing it really quickly, it doesn’t look like it’s got the built-ins you’d want to quickly built a REPL (i.e. read or eval). It’s not really Scheme, yet.
It’s written in C, so you could compile that to wasm and then compile & run all inside the browser (I guess, assuming wasm is cool with that sort of thing, not a wasm guy here).
You can do that kind of JIT code generation with WASM but you need to compile a separate module and load and link things up in JS (doable but not technically within pure WASM, so it won’t work in standalone runtimes)
Nope. I was thinking about implementing call/cc; there is a neat trick involving first doing a CPS transformation to the source, then providing call/cc as a builtin function that more-or-less just grabs the continuation argument and returns it. This would slot pretty easily in between expansion and code gen and the code generator would remain mostly untouched.
In case you are interested I wrote a minimal OOP runtime in wasm-gc (using wasm text format) here: https://marianoguerra.org/posts/bootstrap-post-collapse-oop-...
I also wrote a forth in wasm by hand here: https://github.com/marianoguerra/ricardo-forth
And a wasm compiler that fits in a tweet: https://wasmgroundup.com/blog/wasm-compiler-in-a-tweet/
I'm also the co-author of a book that shows you how to write a compiler that targets wasm for a small languaje using js: https://wasmgroundup.com/
Here's a direct link to the wasm text format for the OOP and forth implementations:
- https://github.com/marianoguerra/mclulang/blob/main/wat/fatt...
- https://github.com/marianoguerra/ricardo-forth/blob/master/s...
The Birth & Death of JavaScript wasn't talking about WASM, it was talking about Asm.js, which crucially differs from WASM by being a backwards-compatible subset of JavaScript amenable to JIT compilation. The goals of these standards look similar if all you care about is transpiling c and running it on a browser, but Asm.js worked everywhere from day zero modulo performance; WASM continues to be a moving target.
a minimal OOP runtime
What does this mean?
Meta comment: I love that this is on a self-hosted forge.
I'm hoping that AT protocol-based self-hosted forges let us have the independence of self-hosted but the networking and gamification of GitHub. Maybe something like Tangled will bring that, though I haven't looked too deeply.
Related: Guile Hoot is a Scheme to Wasm compiler written in Scheme.
https://spritely.institute/hoot/
Can it be used as a interpreter once compiled to not need a compiler?
This isn't quite a standards conforming Scheme just yet.
On the other hand, Hoot supports WASM-GC on release [0], and has had wasm support for a few years now. (Though Safari support has been a pain point - they've found a few bugs in WebKit's wasm support.)
[0] https://spritely.institute/news/hoot-0-6-1-released.html
Just eyeballing it really quickly, it doesn’t look like it’s got the built-ins you’d want to quickly built a REPL (i.e. read or eval). It’s not really Scheme, yet.
It’s written in C, so you could compile that to wasm and then compile & run all inside the browser (I guess, assuming wasm is cool with that sort of thing, not a wasm guy here).
You can do that kind of JIT code generation with WASM but you need to compile a separate module and load and link things up in JS (doable but not technically within pure WASM, so it won’t work in standalone runtimes)
With call/cc ??
No, but with tail call (using underlying WebAssembly tail call).
Nope. I was thinking about implementing call/cc; there is a neat trick involving first doing a CPS transformation to the source, then providing call/cc as a builtin function that more-or-less just grabs the continuation argument and returns it. This would slot pretty easily in between expansion and code gen and the code generator would remain mostly untouched.