Dear sir, you have built a compiler (2022)
What the discussion sees the article as describing
- Many relate it to the inner-platform effect: rebuilding a general-purpose language or platform inside an app (templating, config, workflow) until it’s essentially a compiler.
- Some note similar dynamics in web tech: SPAs, canvases, and WebAssembly can become “platforms inside platforms”.
How people accidentally build compilers
- Common paths:
- Template engines that gain conditionals, loops, and complex expression syntax.
- Configuration formats that grow predicates, workflows, and data transformations.
- “Simple” domain languages (forms, onboarding, workflows) that accumulate logic.
- Several report real projects where thousands of lines of bespoke logic were thrown away and replaced by simpler templates or plain code.
Is building a compiler / DSL a bad thing?
- One camp: it’s fine or even good, as long as it’s intentional, scoped, and you understand compiler basics (lexing, parsing, ASTs, semantic checks).
- Another camp: if you don’t realize early you’re writing a compiler, you almost always end up with an unmaintainable mess.
- Some recommend writing toy compilers to get intuition before doing this “for real”.
Build vs buy and dependency choices
- Strong disagreement:
- Some see homegrown systems as the worst disasters; prefer robust, battle-tested libraries.
- Others say third‑party deps, toolchains, and transitive bloat have been their biggest pain, and prefer small in‑house solutions.
- Several frame “when to build on top vs from scratch” as a key senior skill, with no easy metric; both over‑engineering and over‑dependency can backfire.
Config, scripting, and “everything is a compiler”
- Many observe that rich config languages, YAML + templating (Helm, Kustomize), Kubernetes manifests, Yocto builds, and similar systems are effectively compilers or language workbenches.
- Alternatives discussed: embed established languages (Lua, JS, Python) instead of inventing new DSLs; or use safer config-as-code systems (e.g., Dhall, Starlark).
- Some argue every non-trivial config parser is a mini-compiler; the question is how explicit and well‑engineered you make it.