Skip to content

Rationale

The design rationale

Why Makoto exists, and why each big decision was made.

rationale.md · 1,253 lines · 53 min read

The canonical docs (language-design.md, language-grammar.md, official_libraries.md, extensions.md, tooling.md) say what Makoto is. This set says why: why the language exists and why each big decision was made. It is not a tutorial nor an API reference. It is the essay of the reasoning, mined from the design sessions (the real back-and-forth, the rejected alternatives, the pains, the accepted frictions).

Makoto redefines things that other languages take for granted: memory, async, errors, absence, concurrency, strings. Each file below takes one of these concepts and shows the rewrite. What it is in the general world, how Makoto positions itself, the argument, why not the alternatives, the concrete pain, and the mental model the programmer carries.

# Document The redefinition
00 Why Makoto the thesis: Rust leaks, Go fuses, Makoto separates
01 Philosophy the root models: opt-in, non-poisoning, boundaries, tiers
02 Memory colorless: the object carries its strategy, no lifetimes
03 Async and IO colorless: the process suspends, no async/await
04 Concurrency shared-nothing: actors + channels + supervision
05 Errors an error is a value: Result + error-sets; no ?, no exception
06 Absence no null, no zero-value; absence is typed
07 Types arbitrary width, decl unifies, structural satisfaction
08 Comptime and reflection metaprogramming is a library, not magic
09 Strings explicit unit; comparing is a method because “equal” is ambiguous
10 FFI @cimport reads the header; all C shouts under c.
11 Ecosystem and tiers stability comes from the architecture, and who owns the promise
12 Honest names the name tells the truth about the consequence
13 Verification guarantees as a ladder you climb one obligation at a time, never a mode you enter

One sentence reappears in every decision: “you only pay for what you summon” (the opt-in test). And one image governs the entire architecture. The language is made of subsystems that compose because they never stain each other: async does not color the type, memory does not leak strategy, FFI does not pollute the namespace. The name Makoto (誠, “sincerity/truth”) is not decoration. It is the thesis incarnate, the refusal to hide the cost of anything. That is why the doc is honest about what each choice costs (each file names the accepted friction), the same way §1 of the design doc is.