How do the language teams build their own languages?
Key findings:
- Go: 3,428 owned TODOs (permanent, documenting limitations)
- Elixir: 127 version-gated TODOs (time-bombs with deadlines)
- Go: unsafe is 5th most-imported in its own source (1,304 times)
- Elixir: type system (13K lines) nearly as large as Kernel
- Go: 61 internal/ packages (shared-but-not-public pattern)
- Elixir: 1:1.2 test ratio vs Go's 1:3.3
- Both accept generated code, different delivery (checked-in vs compile-time)
Real PR threads from CockroachDB, Prometheus, and Oban showing:
- Handle pattern (PR #142059): 2.5 months, trace span issues discovered in review
- slog migration (PR #14906): 'merge and iterate', 162 files, one commit for 3.0
- AppenderV2 (issue #17632): maintainer pushback defeated by 'it's not user-facing'
- Oban inline testing (PR #684): <24h, zero discussion, solo maintainer
Key insight: 'merge and iterate' beats 'perfect before merge' for
pattern introductions.
How pure are these codebases? When do they break their own
conventions and why? Key finding: purity inversely correlates
with size. Ecto has 0 TODOs; CockroachDB has 1,048.
Neither is wrong — they're different kinds of systems.