Thanks Dave, high praise! I was inspired after seeing you all take over the declarative & minimalist programming room at FOSDEM this year.
If you thought this was cool, wait until you see what I ended up using it for: https://deosjr.github.io/dynamicland/
I personally think this is much cooler :) But it needs some more explaining before I can broadly share, I think.
Now that I have you here, a question: am I correct in thinking that in Hoot, eval in the browser does not currently work with macros?
I'm glad you felt inspired! This Dynamicland implementation looks awesome. I look forward to this being shared to a wider audience. :)
Regarding your question, as of Hoot 0.6.1 we now have a psyntax-based macro expander integrated with eval so you can use syntax-rules and syntax-case. There are still rough edges, though. I'm currently focused on some non-Hoot tasks but the next Hoot priority is to implement a Guile-like REPL and really kick the tires on the interpreter before the 0.7.0 release.
Assuming you're talking about reading binary data like (array i8), the GC MVP doesn't have a great answer right now. Have to call back into wasm to read the bytes. Something for the group to address in future proposals. Sharing between wasm modules is better right now.
This was a fun read! I wrote a Wasm interpreter in Scheme awhile back so it makes me happy to see more people writing their own. It is less difficult than you might think. I encourage others to give the spec a look and give it a try. No need to implement every instruction, just enough to have fun.
IMHO the article is not mainly about the implementation of the Log, but rather leveraging on the idea of the log to build reliable and fault tolerant applications. The implementation of the log itself can be either centralised or decentralised.
That gist is correct - I would add that the log needs a few specific properties and conceptually be the shared log for state, communication, execution scheduling.
The next step is the, how do you make this usable in practice...
You can absolutely do graphics rendering with GC'd languages. The trick is the same as with manual memory management: Minimize allocation. You mention C# which is a language that has been used very successfully in the games industry.
Hope my post didn't come across as complaining because I agree! Wasm is great right now for lots of things, just wanted to highlight a use case that isn't great yet.
In Scheme what you want to do is allocate a big bytevector and use it over and over. This is what I already do outside of Wasm. I don't want or need linear memory involved, I just want access to my (array i8) from JS.