Happy New Fiscal Year everyone, at least in the UK. March was another shorter month for me, beginning with a family holiday. I also spent too much time moving my blog over from the moribund Jekyll to the newer Hugo, both static site generators. Apart from the age Jekyll took to build my very simple site, its highlighting for newer languages like Julia and WebAssembly is terrible – kind of a dealbreaker.
The silver lining of that work is a new blog post on stack shuffling in WebAssembly. I only developed the final algorithm after I started writing: before then I hadn’t tested the code enough to see the slowdown on larger inputs. Though it didn’t matter for my own simple needs, I could hardly publish work with such a trapdoor in it. As the post describes, fuzzing is a useful tool, but I guess blogging is too.
Coding-wise, I’ve been trying out a new trick in Raven’s caching infrastructure. Raven’s caches are akin to Rust’s Salsa and enable incremental compilation – useful both for speeding up batch compiles and for interactivity in the REPL. If you’ve looked into Salsa, you may have seen comparisons to Datalog, and Salsa calls its runtime state a “database” and its procedures “queries”. I think the analogy is misleading: the system is just declarative enough to give a false sense of confidence, until you start playing whack-a-mole with the dreaded “cycle” errors that come from unintentionally recursive queries.