fwsgonzo
What is this argument? Because it's slower it's bad? It could have been done better? Ok. Then learn the language. Or pick a language you do know. Or the performance doesn't matter.
At the end of the day, people were shipping absolute garbage that made them east 50k a year on the side 15 years ago. I know this because ...
Bad arguments all around.
Godot Sandbox: The Answer is 42
Regarding the Anthropic and Watermark Issue
I'm wondering if it's mostly the WASM setup itself (after transfer).
Automatia Update: Next of Kin
I'm working on a cozy voxel game with RPG and platforming elements. Still early days, so I'm still figuring things out. Players play on their own private instances. The world is very malleable as player instances are based on a "master tape" world that I maintain. After creation that fork is the players own, and they do whatever they want.
You can play a browser build here: https://automatia.libriscv.no:3000/
If playing is not your jam, here's my latest post: https://libriscv.no/blog/next-of-kin (although it will not explain much about the game)
Automatia Update: Friends in Cold Places
The number one thing to learn from all of this is that governments aren't really hands-on-wheel and maybe never have been. It's interesting to watch an old video of a politician from eg. the 60s, 70s or 80s and compare to today, though. So, I could be wrong.
And "others" will be blamed, if history repeats.
Automatia Update: A New Start
Automatia Update: Unbalanced Skills
Automatia Update: Better Living Through Alchemy
Automatia Update: Pulling the (API) Strings
C++ Scripting with Libriscv
In IPRE, I am pausing the caller while the remote call is on-going, which means "just having a shared block" is inferior to just sharing everything. It's just so much easier and nicer to be able to pass literally anything you want.
The caveat is that the callee has to wait, but I think the fact that the remote is now running in the SAME THREAD without any scheduling involved makes up for it. It's a true synchronous remote function call with some overhead.
There is a blog-style writeup here: https://fwsgonzo.medium.com/an-update-on-tinykvm-7a38518e57e...
Not as rigorous as the paper, but the gist is there.
Here is the abstract: This paper introduces Inter-Process Remote Execution (IPRE), whose primary function is enabling gated persistence for per-request isolation architectures with microsecond-latency access to persistent services. IPRE eliminates scheduler dependency for descheduled processes by allowing a virtual machine to directly and safely call, execute functions in a remote virtual machines address space. Unlike prior approaches requiring hardware modifications (dIPC) or kernel changes (XPC), IPRE works with standard virtualization primitives, making it immediately deployable on commodity systems. We present two implementations: libriscv (12-14ns overhead, emulated execution) and TinyKVM (2-4us overhead, native execution). Both eliminate data serialization through address-space merging. Under realistic scheduler contention from schbench workloads (50-100% CPU utilization), IPRE maintains stable tail latency (p99<5us), while a state-of-the-art lock-free IPC framework shows 1,463× p99 degradation (4.1us to 6ms) when all CPU cores are saturated. IPRE thus enables architectural patterns (per-request isolation, fine-grained microservices) that incur millisecond-scale tail latency in busy multi-tenant systems using traditional IPC.
Bottom line: If you're doing synchronous calls to a remote party, IPRE wouldn't require any scheduler mediation. The same applies to your repo. Passing allocator-less structures to the remote is probably a landmine waiting to happen. If you structure both parties to use custom allocators, at least for the remote calls, you can track and even steal allocations (using a shared memory area). With IPRE there is extra risk of stale pointers because the remote part is removed from the callers memory after it completes. The paper will explain all the details, but for example since we control the VMM we can close the remote session if anything bad happens. (This paper is not out yet, but it should be very soon)
The best part about this kind of architecture, which you immediately mention, is the ability to completely avoid serialization. Passing a complex struct by reference and being able to use the data as-is is a big benefit. It breaks down when you try to do this with something like Deno, unfortunately. But you could do Deno <-> C++, for example.
For libriscv the implementation is simpler: Just loan remote-looking pages temporarily so that read/write/execute works, and then let exception-handling handle abnormal disconnection. With libriscv it's also possible for the host to take over the guests global heap allocator, which makes it possible to free something that was remotely allocated. You can divide the address space into the number of possible callers, and one or more remotes, then if you give the remote a std::string larger than SSO, the address will reveal the source and the source tracks its own allocations, so we know if something didn't go right. Note that this is only an interest for me, as even though (for example) libriscv is used in large codebases, the remote RPC feature is not used at all, and hasn't been attemped. It's a Cool Idea that kinda works out, but not ready for something high stakes.
The iOS version is Swift-based.
Automatia and the Case for Vanilla
Since that storm, we have decided to buy a second fireplace for upstairs with a cooking top.