You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tempest.dev/posts/01_04_2023-advent-of-wasm.html

124 lines
4.1 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>Advent of Wasm</title>
<link rel="stylesheet" href="/resources/style.css"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<nav>
<a href="/">Home</a>
<a href="/about.html">About</a>
<a href="/posts/">Posts</a>
</nav>
<h1>
Advent of Wasm
<span class="subtitle">Now with 87% more pain</span>
</h1>
<p>
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.
</p>
<p>
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.
</p>
<p>
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?"
</p>
<br/>
<p>
Turns out I was definitely not ready for this.
</p>
<h2>So what was so hard about it?</h2>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h2>Tips if you want to get into writing wasm by hand?</h2>
<p>
Uhh ... maybe consider don't?
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<footer>
<a href="https://git.tempest.dev/ashe/tempest.dev">Site Source</a>
<a href="/pay-transparency.html">Pay Transparency</a>
</footer>
</body>
</html>