skip to main content
research-article
Open Access
Artifacts Available
Artifacts Evaluated & Functional

Build systems à la carte

Published:30 July 2018Publication History
Skip Abstract Section

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.

Skip Supplemental Material Section

Supplemental Material

a79-jones.webm

webm

74.9 MB

References

  1. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  2. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  3. Daniel J. Bernstein. 2003. Rebuilding target files when source files have changed. (2003). http://cr.yp.to/redo.html .Google ScholarGoogle Scholar
  4. Paolo Capriotti and Ambrus Kaposi. 2014. Free applicative functors. Proceedings 5th Workshop on Mathematically Structured Functional Programming 153, 2–30.Google ScholarGoogle ScholarCross RefCross Ref
  5. Koen Claessen. 1999. A poor man’s concurrency monad. Journal of Functional Programming 9, 3 (1999), 313—-323. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. 2001. Introduction To Algorithms. MIT Press. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. R. De Levie. 2004. Advanced Excel for Scientific Data Analysis. Oxford University Press. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  9. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  10. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  11. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  12. Facebook. 2013. Buck: A high-performance build tool. (2013). https://buckbuild.com/ .Google ScholarGoogle Scholar
  13. Stuart I Feldman. 1979. Make—A program for maintaining computer programs. Software: Practice and experience 9, 4 (1979), 255–265.Google ScholarGoogle Scholar
  14. Google. 2016. Bazel. (2016). http://bazel.io/ .Google ScholarGoogle Scholar
  15. GRAIL. 2017. Reflow: A system for incremental data processing in the cloud. (2017). https://github.com/grailbio/reflow .Google ScholarGoogle Scholar
  16. Alan Grosskurth. 2007. Purely top-down software rebuilding. Master’s thesis. University of Waterloo.Google ScholarGoogle Scholar
  17. Berwyn Hoyt, Bryan Hoyt, and Ben Hoyt. 2009. Fabricate: The better build tool. (2009). https://github.com/SimonAlfie/ fabricate .Google ScholarGoogle Scholar
  18. John Hughes. 2000. Generalising monads to arrows. Science of computer programming 37, 1-3 (2000), 67–111. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. Solomon Hykes. 2013. Docker container: A standardized unit of software. (2013). https://www.docker.com/what-container .Google ScholarGoogle Scholar
  20. Jane Street. 2015. Incremental: A library for incremental computations. (2015). https://github.com/janestreet/incremental .Google ScholarGoogle Scholar
  21. Jane Street. 2018. Dune: A composable build system. (2018). https://github.com/ocaml/dune .Google ScholarGoogle Scholar
  22. Vladimir I Levenshtein. 1966. Binary codes capable of correcting deletions, insertions, and reversals. In Soviet physics doklady, Vol. 10. 707–710.Google ScholarGoogle Scholar
  23. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  24. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  25. Evan Martin. 2017. Ninja build system homepage. (2017). https://ninja-build.org/ .Google ScholarGoogle Scholar
  26. Conor McBride and Ross Paterson. 2008. Applicative programming with effects. Journal of Functional Programming 18, 1 (2008), 1–13. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. 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 ScholarGoogle Scholar
  28. Microsoft. 2017. Git Virtual File System. (2017). https://www.gvfs.io/ .Google ScholarGoogle Scholar
  29. Neil Mitchell. 2012. Shake before building: Replacing Make with Haskell. In ACM SIGPLAN Notices, Vol. 47. ACM, 55–66. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. 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 ScholarGoogle Scholar
  31. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  32. Avery Pennarun. 2012. redo: a top-down software build system. (2012). https://github.com/apenwarr/redo .Google ScholarGoogle Scholar
  33. François Pottier. 2009. Lazy least fixed points in ML. (2009). http://gallium.inria.fr/~fpottier/publis/fpottier-fix.pdf .Google ScholarGoogle Scholar
  34. Alexey Radul. 2009. Propagation Networks: A Flexible and Expressive Substrate for Computation. Ph.D. Dissertation. MIT.Google ScholarGoogle Scholar
  35. Mike Shal. 2009. Build System Rules and Algorithms. (2009). http://gittup.org/tup/build_system_rules_and_algorithms.pdf/ .Google ScholarGoogle Scholar

Index Terms

  1. Build systems à la carte

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      Full Access

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader