summary refs log tree commit diff
path: root/posts/01_04_2023-advent-of-wasm.html
blob: 4f707a605991f2a684db603b6619c185cdc35c55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!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>