ICHI BLOG

Why Go, Not C?

I am a great admirer of C, and I believe that nothing can truly compete with it. C is one of the purest tools we have. It offers no runtime, no dependencies, only an executable and the machine. In many ways, it represents the ideal of simplicity.

However, as already stated, absolute purity is not the goal. The goal is clarity.

This project does not aim to be as close as possible to bare metal. It aims to remove everything that is not essential, and that is a very different objective. Reducing layers is not the same as reducing complexity. Sometimes removing abstraction simply shifts complexity elsewhere instead of eliminating it.

C removes layers, but at this stage Go removes friction. This difference is important.

This tool is not an operating system. It is not a database engine. It is not performance-critical infrastructure. It is a content management tool. It reads files, transforms text, and writes files. The problem is not how to control memory precisely. The problem is how to keep the system understandable.

Everything in this system is text. Markdown files, even though I am still trying to understand which levels of formatting are truly necessary, metadata, templates, HTML output, paths, and URLs are all representations of text. This is the core of the problem.

C treats text as bytes. It offers full control, but also full responsibility. Go treats text as a first-class concept. It provides the right level of abstraction for working with strings, encoding, and structured data without forcing you to build everything from scratch.

This is not about convenience. It is about alignment. When the language matches the domain, the system becomes simpler. The amount of effort required to express ideas decreases, and the structure of the code reflects the structure of the problem.

Both C and Go can produce a single executable with no external runtime. Both can satisfy the requirement of a self-contained tool. The difference lies in the amount of effort required to reach that result and in how maintainable the system remains over time.

C optimizes for control. Go optimizes for clarity and completion. For this project, clarity is the most important constraint.

The goal is to make the system disappear, so that writing, editing, and publishing remain the only visible actions.

For this reason, I believe Go is the most direct path to achieving that result.