What is a build system, anyway?
2 days ago
- #build-systems
- #dependency-management
- #software-development
- Build systems are tools that define and execute transformations from input to output data, with caching for efficiency.
- Transformations are called steps or rules, forming a dependency graph. Circular dependencies are usually banned.
- Outputs can be intermediate (used by other rules) or final (interesting to end-users).
- A build is correct if incremental builds match full builds. It's minimal if rules run only when necessary.
- Build systems can be inter-process (file-based) or intra-process (function-based), with different dependency tracking methods.
- Applicative build systems declare all inputs/outputs ahead of time; monadic systems allow dynamic dependencies.
- Early cutoff avoids rerunning rules if outputs match previous versions, improving efficiency.
- Rebuild detection ensures rules rerun only when inputs change. Unsound systems may require force-reruns.
- Executors schedule tasks respecting dependencies, detect changes, and manage progress reporting.
- Inter-process builds involve artifacts (output files) and source files (project-specific inputs).
- Hermetic builds avoid system dependencies; sandboxing isolates builds but doesn't ensure hermeticity.
- Deterministic builds produce the same output in the same environment; reproducible builds do so across environments.
- Remote caching speeds up builds but requires hermeticity and reproducibility for soundness.
- Targets specify which parts of the build to run, often as filenames or abstract rule names.
- Meta-build systems (e.g., CMake) generate build rules but rely on other tools for execution.
- Intra-process builds face challenges with global state and IPC, making caching tricky.
- Tracing intra-process systems (query systems) track function calls to manage dependencies.
- Functional Reactive Programming (FRP) libraries explicitly declare dependencies, useful in UIs.
- Examples of build systems include Make, Docker, Rustc, Shake, and Ninja.