delete redundant post
This commit is contained in:
parent
61a74d3797
commit
4b2de355df
|
@ -1,78 +0,0 @@
|
||||||
---
|
|
||||||
title: SSG that packs a punch
|
|
||||||
date: 2024-05-02T21:17:43Z
|
|
||||||
desc: >
|
|
||||||
Let's create a yet another SSG from scratch, because that's just
|
|
||||||
what this world needs!
|
|
||||||
---
|
|
||||||
|
|
||||||
Long story short, I decided to write my own static site generator in Rust. The
|
|
||||||
language choice is purely pragmatic and at first I considered using Haskell,
|
|
||||||
but alas the Rust ecosystem seems better suited for this task. Rust is not only
|
|
||||||
a very ergonomic and efficient language, but also has lots of high quality
|
|
||||||
packages to choose from.
|
|
||||||
|
|
||||||
|
|
||||||
## The why
|
|
||||||
|
|
||||||
I used many different SSGs made by other people, but over the years I realized
|
|
||||||
that they simply can't cut it for me. I used simple generators like Hugo, which
|
|
||||||
offer little to no support for JavaScript. Eventually I ended up using Astro,
|
|
||||||
which treats JavaScript as a first class citizen.
|
|
||||||
|
|
||||||
The thing I didn't like the most about Hugo, was that it used some strange,
|
|
||||||
clumsy templating language, which was quite annoying to use, but I enjoyed the
|
|
||||||
fact that nearly everything was built in, and the generation speed was fast.
|
|
||||||
When it comes to Astro, I enjoyed the fact that in templates you could write
|
|
||||||
TypeScript, as well the great flexibility with which you could arrange the
|
|
||||||
structure of the website. However, the JavaScript ecosystem is a mess, so using
|
|
||||||
that was not that pleasant overall.
|
|
||||||
|
|
||||||
Astro was closer to what I wanted, but not quite there.
|
|
||||||
|
|
||||||
With time, I realized that what I truly need is the flexibility of Astro,
|
|
||||||
coupled with a different language. Ideally a fun one like Haskell or Rust.
|
|
||||||
|
|
||||||
I started looking around and came across a couple of [blog
|
|
||||||
posts](https://arne.me/blog/write-your-own-ssg) detailing how people made the
|
|
||||||
move to their custom generator. This was the inspiration I needed.
|
|
||||||
|
|
||||||
I thought that even if it ends up quite bad in the end, at least I'll learn
|
|
||||||
*something*. And it would be a good chance to learn more Rust, so that's a win
|
|
||||||
right there. With Haskell it would be an ever bigger win, but hey, can't have
|
|
||||||
everything in life.
|
|
||||||
|
|
||||||
|
|
||||||
## The what
|
|
||||||
|
|
||||||
When trying to write a computer program it's a good idea to think about what it
|
|
||||||
should ideally be able to do. We should at least know the sketch of the
|
|
||||||
requirements before we start, so that we know if we are getting any closer to
|
|
||||||
the goal as we keep writing it.
|
|
||||||
|
|
||||||
When it comes to my generator I think I would like for it to have these
|
|
||||||
qualities:
|
|
||||||
- The generator must be *simple* and *extensible*
|
|
||||||
- HTML shouldn't be generated using some bespoke templating language, I should
|
|
||||||
have the full ecosystem at my disposal.
|
|
||||||
- Ideally I should not be limited to Markdown, I should be able to use
|
|
||||||
different file text formats as needed, e.g. Djot, AsciiDoc.
|
|
||||||
- Code snippets should be highlighted using Tree-sitter.
|
|
||||||
- Math should be pre-rendered via MathML without any client-side JavaScript.
|
|
||||||
- There should be a way to render different pages differently, some collections
|
|
||||||
of Markdown files should output different looking pages.
|
|
||||||
- I should be able to generate HTML pages that don't have any original source
|
|
||||||
files related to them, think dynamically generated lists of pages, tags.
|
|
||||||
|
|
||||||
With these requirements in mind I decided to go with Rust, because Rust has
|
|
||||||
lots of up-to-date parsers that can be used while building a generator. On top
|
|
||||||
of that I can use Tree-sitter without any need for complicated FFI or using
|
|
||||||
outdated libraries in other ecosystems.
|
|
||||||
|
|
||||||
When moving to a non-JavaScript backend for building SSG some issues related to
|
|
||||||
JavaScript inevitably start to crop up. There is some friction with using tools
|
|
||||||
like ESBuild, but I feel like the benefits far outweigh the challenges in the
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
## The how
|
|
Loading…
Reference in a new issue