---
title: Advent of Wasm
subtitle: Now with 87% more pain
author: rose
---

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?"

<br/>

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 <em><strong>*should*</strong></em> 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
<a href="https://aoc2022.tempest.dev/" target="_blank">check it out</a>
if 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 <em><strong>*so much*</strong></em> 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.

