This is a feature demo for the blog with a simple example. It shows that the blog has support for compiling Go code to WASM and LaTeX rendering.
The lengths I will go to to not write javascript :,)
Setup
I needed to install TinyGo and Katex.
Katex was simple, it just required me adding it to templates/index.html
. In order to serve the compiled WASM, use the base Makefile
target. This will put the compiled WASM into the static/
assets.
In order to load in the exported functions using load_wasm
, I had to add this code.
One gotcha is that the functions must be defined explicitly via //export <function_name>
.
I also needed to add this to my config.toml
:
katex_enable = true
katex_auto_render = true
[mediaTypes]
[mediaTypes."application/wasm"]
suffixes = ["wasm"]
Finally, I had to add wasm_exec.js
to the static assets. Following this tutorial is a great place to start.
In order to see the pre-compiled Markdown, just look at this page's source code
Finding Primes
The canonical example for primality testing is the Sieve of Eratosthenes.
The algorithm works like so;
- Starting at
i = 2
, mark every multiple ofi
up to somen
as "seen". - Loop until $$ i > \sqrt{n} $$
- The "unseen" values are primes
This algorithm has the time complexity
$$ O(n \cdot log \cdot log ( n )) $$
Expressed in Go, this is:
func findPrimes(n float64) []int {
all := make([]bool, int(n))
for i := 2; i < int(n); i++ {
all[i] = true
}
nSqrt := int(math.Sqrt(n)) + 1
for p := 2; p < nSqrt; p++ {
if all[p] {
j := p * p
for j < int(n) {
all[j] = false
j += p
}
}
}
primes := []int{}
for i, e := range all {
if e {
primes = append(primes, i)
}
}
return primes
}
The code is also available here.
Demo