code ramblings and technical oddities

Advent of Wasm

Now with 87% more pain

So the last few years I have done Advent of Code off and on. Sometimes I have tried to learn a new language, other times I was just trying to beat my dad each evening. This year though, this year I don't know what I was thinking.

It was several weeks after everyone else had started, I had largely written it off for the year - I was not up for it. Until a terrible idea crossed my mind.

Like an intrusive thought, my mind asked: "Well you've been wanting to do something in web assembly for a while right? How bad could it be?"

Turns out I was definitely not ready for this.

So what was so hard about it?

More than anything else, I forgot how much you need to do by hand to do any sort of assembly. The first day saw me spending several hours just on some loader code to pass the puzzle input in from JS, call a wasm function, and then read back the result.

Next was a few functions for reading numbers out of the wasm memory buffer, parsing them from ascii, etc. The core read loop was not too tricky, but the bit that took far longer than it had any reason to was converting my answer back to ascii and shoving it into an output area.

Really none of it was surprising, and none of it should have been that hard ... it's just been a while since this Javascript girl has written truly low-level code.

To make matters worse I got hard-core distracted by the non-wasm part of my wasm project. After the first day I returned to my stub JS loader and expanded it into a little wasm explorer.

I added a code view, syntax highlighting, auto-loaded my puzzle inputs, even made a janky little dynamic list that would automatically pick up new days' solutions as I added them to the repo without needing me to touch the loader page each day.

In the end I'm really quite proud of it, I will absolutely be reusing this setup for future years, and you should check it outif you haven't already ... but for wanting to challenge myself with something new I was doing a lot of the same-old.

Ultimately I got through 3 days before giving up jusst because every step along the way involved so much extra code. I may come back to some of the puzzles later, but for now I'm kind of happy with what I did, and I don't feel like I need to prove myself by doing more. I was doing it for fun, and so I stopped when it stopped being fun.

Tips if you want to get into writing wasm by hand?

Uhh ... maybe consider don't?

Jokes aside: do a throwaway project or two so you get used to passing data into and out of wasm, whatever parsing you're going to do, etc.

Do everything in your power to make sure you can focus on the actual wasm part of your project, because (at least if you're anything like me) it's easy to get sidetracked with all that.

With that said: I had fun. Doing new things is always a treat, so if you're looking for something new to try definitely consider giving webassembly a look.