Abstract
Build systems are awesome, terrifying -- and unloved. They are used by every developer around the world, but are rarely the object of study. In this paper we offer a systematic, and executable, framework for developing and comparing build systems, viewing them as related points in landscape rather than as isolated phenomena. By teasing apart existing build systems, we can recombine their components, allowing us to prototype new build systems with desired properties.
Supplemental Material
- Umut A. Acar, Guy E. Blelloch, and Robert Harper. 2002. Adaptive Functional Programming. In Proceedings of the 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM, 247–259. Google ScholarDigital Library
- Umut A Acar, Matthias Blume, and Jacob Donham. 2007. A consistent semantics of self-adjusting computation. In European Symposium on Programming. Springer, 458–474. Google ScholarDigital Library
- Daniel J. Bernstein. 2003. Rebuilding target files when source files have changed. (2003). http://cr.yp.to/redo.html .Google Scholar
- Paolo Capriotti and Ambrus Kaposi. 2014. Free applicative functors. Proceedings 5th Workshop on Mathematically Structured Functional Programming 153, 2–30.Google ScholarCross Ref
- Koen Claessen. 1999. A poor man’s concurrency monad. Journal of Functional Programming 9, 3 (1999), 313—-323. Google ScholarDigital Library
- T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. 2001. Introduction To Algorithms. MIT Press. Google ScholarDigital Library
- R. De Levie. 2004. Advanced Excel for Scientific Data Analysis. Oxford University Press. Google ScholarDigital Library
- Alan Demers, Thomas Reps, and Tim Teitelbaum. 1981. Incremental Evaluation for Attribute Grammars with Application to Syntax-directed Editors. In Proceedings of the 8th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM, 105–116. Google ScholarDigital Library
- Eelco Dolstra, Merijn De Jonge, Eelco Visser, et al. 2004. Nix: A Safe and Policy-Free System for Software Deployment. In LISA, Vol. 4. 79–92. Google ScholarDigital Library
- Sebastian Erdweg, Moritz Lichter, and Manuel Weiel. 2015. A sound and optimal incremental build system with dynamic dependencies. ACM SIGPLAN Notices 50, 10 (2015), 89–106. Google ScholarDigital Library
- Hamed Esfahani, Jonas Fietz, Qi Ke, Alexei Kolomiets, Erica Lan, Erik Mavrinac, Wolfram Schulte, Newton Sanches, and Srikanth Kandula. 2016. CloudBuild: Microsoft’s distributed and caching build service. In Proceedings of the 38th International Conference on Software Engineering Companion. ACM, 11–20. Google ScholarDigital Library
- Facebook. 2013. Buck: A high-performance build tool. (2013). https://buckbuild.com/ .Google Scholar
- Stuart I Feldman. 1979. Make—A program for maintaining computer programs. Software: Practice and experience 9, 4 (1979), 255–265.Google Scholar
- Google. 2016. Bazel. (2016). http://bazel.io/ .Google Scholar
- GRAIL. 2017. Reflow: A system for incremental data processing in the cloud. (2017). https://github.com/grailbio/reflow .Google Scholar
- Alan Grosskurth. 2007. Purely top-down software rebuilding. Master’s thesis. University of Waterloo.Google Scholar
- Berwyn Hoyt, Bryan Hoyt, and Ben Hoyt. 2009. Fabricate: The better build tool. (2009). https://github.com/SimonAlfie/ fabricate .Google Scholar
- John Hughes. 2000. Generalising monads to arrows. Science of computer programming 37, 1-3 (2000), 67–111. Google ScholarDigital Library
- Solomon Hykes. 2013. Docker container: A standardized unit of software. (2013). https://www.docker.com/what-container .Google Scholar
- Jane Street. 2015. Incremental: A library for incremental computations. (2015). https://github.com/janestreet/incremental .Google Scholar
- Jane Street. 2018. Dune: A composable build system. (2018). https://github.com/ocaml/dune .Google Scholar
- Vladimir I Levenshtein. 1966. Binary codes capable of correcting deletions, insertions, and reversals. In Soviet physics doklady, Vol. 10. 707–710.Google Scholar
- Sheng Liang, Paul Hudak, and Mark Jones. 1995. Monad transformers and modular interpreters. In Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. ACM, 333–343. Google ScholarDigital Library
- Simon Marlow, Louis Brandy, Jonathan Coens, and Jon Purdy. 2014. There is no fork: An abstraction for efficient, concurrent, and concise data access. In ACM SIGPLAN Notices, Vol. 49. ACM, 325–337. Google ScholarDigital Library
- Evan Martin. 2017. Ninja build system homepage. (2017). https://ninja-build.org/ .Google Scholar
- Conor McBride and Ross Paterson. 2008. Applicative programming with effects. Journal of Functional Programming 18, 1 (2008), 1–13. Google ScholarDigital Library
- Microsoft. 2011. Excel Recalculation (MSDN documentation). (2011). https://msdn.microsoft.com/en-us/library/office/ bb687891.aspx . Also available in Internet Archive https://web.archive.org/web/20180308150857/https://msdn.microsoft. com/en-us/library/office/bb687891.aspx .Google Scholar
- Microsoft. 2017. Git Virtual File System. (2017). https://www.gvfs.io/ .Google Scholar
- Neil Mitchell. 2012. Shake before building: Replacing Make with Haskell. In ACM SIGPLAN Notices, Vol. 47. ACM, 55–66. Google ScholarDigital Library
- Neil Mitchell. 2013. How to write fixed point build rules in Shake. (2013). https://stackoverflow.com/questions/14622169/ how-to-write-fixed-point-build-rules-in-shake-e-g-latex .Google Scholar
- Andrey Mokhov, Neil Mitchell, Simon Peyton Jones, and Simon Marlow. 2016. Non-recursive Make Considered Harmful: Build Systems at Scale. In Proceedings of the 9th International Symposium on Haskell (Haskell 2016). ACM, 170–181. Google ScholarDigital Library
- Avery Pennarun. 2012. redo: a top-down software build system. (2012). https://github.com/apenwarr/redo .Google Scholar
- François Pottier. 2009. Lazy least fixed points in ML. (2009). http://gallium.inria.fr/~fpottier/publis/fpottier-fix.pdf .Google Scholar
- Alexey Radul. 2009. Propagation Networks: A Flexible and Expressive Substrate for Computation. Ph.D. Dissertation. MIT.Google Scholar
- Mike Shal. 2009. Build System Rules and Algorithms. (2009). http://gittup.org/tup/build_system_rules_and_algorithms.pdf/ .Google Scholar
Index Terms
- Build systems à la carte
Recommendations
A Large-Scale Empirical Study of the Relationship between Build Technology and Build Maintenance
Build systems specify how source code is translated into deliverables. They require continual maintenance as the system they build evolves. This build maintenance can become so burdensome that projects switch build technologies, potentially having to ...
Extracting build changes with BuildDiff
MSR '17: Proceedings of the 14th International Conference on Mining Software RepositoriesBuild systems are an essential part of modern software engineering projects. As software projects change continuously, it is crucial to understand how the build system changes because neglecting its maintenance can lead to expensive build breakage. ...
Forward build systems, formally
CPP 2022: Proceedings of the 11th ACM SIGPLAN International Conference on Certified Programs and ProofsBuild systems are a fundamental part of software construction, but their correctness has received comparatively little attention, relative to more prominent parts of the toolchain. In this paper, we address the correctness of forward build systems, ...
Comments