Show HN: Common Lisp running natively over WebAssembly for the first time
A month or so ago, I ported a Common Lisp implementation (npt) to WebAssembly to make a silly blog post, because I was bored and have a lot of time on my hands to waste with things like this (I don&#x27;t have a job, and because I have next to no experience, these meaningless, silly projects tend to fill what time I do have).<p>This is significant as it&#x27;s the first time Common Lisp in particular has ever been hosted on it; wasm has a few poor decisions in its design that make it less-than-conducive to being a target for Common Lisp, and a lot of the more interesting implementations require an implementation to already be on the platform for bootstrapping purposes.<p>My previous attempts using other implementations haven&#x27;t gone so well, despite throwing a <i>lot</i> of time at it (as an example, I have a fork of Eclipse Common Lisp, a defunct implementation from the 1990s, sitting on my disk with a few hundred lines of changes that I finally got to successfully compile and run a handful of very basic expressions, but it blows up when you try and define anything). In comparison, I was pleasantly surprised by how little I had to do, even though I did end up scrapping <i>loads</i> of lines of my own changes to npt in the process as I got a handle on how to make it work acceptably.<p>The Emscripten toolchain and I don&#x27;t get along, partially because I don&#x27;t like inlining ECMAScript into my C and vice-versa, so it&#x27;s little more than a neat little demo right now.<p>You can load slightly more complex programs into it by hijacking the &quot;imp&quot; ECMAScript function every few hundred milliseconds with strings containing <i>complete forms</i> (this is essentially a batch processor, so there&#x27;s no interactivity that allows it to wait while you decide what the rest of a form should be). Only one at a time, though. It&#x27;s not that fancy.<p>If you mess up at all, even just a little error, it will crash. This is by design; I disabled the debugger. It&#x27;s a giant hack, and the hack I eventually decided on left it impossible to have a debugging experience, with the benefit of getting to use a closer-to-unmodified npt.<p>This could be more useful, if I spent more time on it, but it&#x27;s more fun if it&#x27;s just a demo. I hope you enjoy the toy I made for you.<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Batch_processing" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Batch_processing</a><p>If you don&#x27;t know what forms are in the context of Common Lisp:<p><a href="http:&#x2F;&#x2F;www.lispworks.com&#x2F;documentation&#x2F;HyperSpec&#x2F;Body&#x2F;03_aba.htm" rel="nofollow">http:&#x2F;&#x2F;www.lispworks.com&#x2F;documentation&#x2F;HyperSpec&#x2F;Body&#x2F;03_aba...</a><p><a href="http:&#x2F;&#x2F;www.lispworks.com&#x2F;documentation&#x2F;HyperSpec&#x2F;Body&#x2F;26_glo_c.htm#compound_form" rel="nofollow">http:&#x2F;&#x2F;www.lispworks.com&#x2F;documentation&#x2F;HyperSpec&#x2F;Body&#x2F;26_glo...</a>