Hostname: page-component-cd9895bd7-mkpzs Total loading time: 0 Render date: 2024-12-21T08:12:09.615Z Has data issue: false hasContentIssue false

Build systems à la carte: Theory and practice

Published online by Cambridge University Press:  21 April 2020

ANDREY MOKHOV
Affiliation:
School of Engineering, Newcastle University, Newcastle upon Tyne, UK, Jane Street, London, UK, (e-mail: andrey.mokhov@ncl.ac.uk)
NEIL MITCHELL
Affiliation:
Facebook, London, UK, (e-mail: ndmitchell@gmail.com)
SIMON PEYTON JONES
Affiliation:
Microsoft Research, Cambridge, UK, (e-mail: simonpj@microsoft.com)
Rights & Permissions [Opens in a new window]

Abstract

Core share and HTML view are not available for this content. However, as you have access to this content, a full PDF is available via the ‘Save PDF’ action button.

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 a 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.

Type
Research Article
Creative Commons
Creative Common License - CCCreative Common License - BY
This is an Open Access article, distributed under the terms of the Creative Commons Attribution licence (http://creativecommons.org/licenses/by/4.0/), which permits unrestricted re-use, distribution, and reproduction in any medium, provided the original work is properly cited.
Copyright
© The Author(s) 2020. Published by Cambridge University Press

References

Acar, U. A., Blelloch, G. E. & Harper, R. (2002) Adaptive functional programming. In Proceedings of the 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM, pp. 247259.CrossRefGoogle Scholar
Acar, U. A., Blume, M. & Donham, J. (2007) A consistent semantics of self-adjusting computation. In European Symposium on Programming. Springer, pp. 458474.CrossRefGoogle Scholar
Bernstein, D. J. (2003) Rebuilding target files when source files have changed. Available at: http://cr.yp.to/redo.htmlGoogle Scholar
Capriotti, P. & Kaposi, A. (2014) Free Applicative Functors. vol. 153. Open Publishing Association.CrossRefGoogle Scholar
Claessen, K. (1999) A poor man’s concurrency monad. J. Funct. Program., 9(3), 313323.CrossRefGoogle Scholar
Cormen, T. H., Leiserson, C. E., Rivest, R. L. & Stein, C. (2001) Introduction to Algorithms. MIT Press.Google Scholar
De Levie, R. (2004) Advanced Excel for Scientific Data Analysis. Oxford University Press.Google Scholar
Demers, A., Reps, T. & Teitelbaum, T. (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, pp. 105116.CrossRefGoogle Scholar
Dolstra, E., De Jonge, M., Visser, E., et al. (2004) Nix: A safe and policy-free system for software deployment. In LISA, vol. 4, pp. 7992.Google Scholar
Erdweg, S., Lichter, M. & Weiel, M. (2015) A sound and optimal incremental build system with dynamic dependencies. ACM Sigplan Notices 50(10), 89106.CrossRefGoogle Scholar
Esfahani, H., Fietz, J., Ke, Q., Kolomiets, A., Lan, E., Mavrinac, E., Schulte, W., Sanches, N. & Kandula, S. (2016) Cloudbuild: Microsoft’s distributed and caching build service. In Proceedings of the 38th International Conference on Software Engineering Companion. ACM, pp. 1120.CrossRefGoogle Scholar
Facebook. (2013) Buck: A high-performance build tool. Available at: https://buckbuild.com/Google Scholar
Feldman, S. I. (1979) Make—a program for maintaining computer programs. Software Pract. Exp. 9(4), 255265.CrossRefGoogle Scholar
Gandhi, V. (2018) Translation of build systems à la Carte to Rust. Available at: https://web.archive.org/web/20191020001014/https://github.com/cutculus/bsalc-alt-code/blob/master/BSalC.rsGoogle Scholar
Google. (2016) Bazel. Available at: http://bazel.io/Google Scholar
GRAIL. (2017) Reflow: A system for incremental data processing in the cloud. Available at: https://github.com/grailbio/reflowGoogle Scholar
Grosskurth, A. (2007) Purely top-down software rebuilding. M.Phil. thesis, University of Waterloo.Google Scholar
Hoyt, B., Hoyt, B. & Hoyt, B. (2009) Fabricate: The better build tool. Available at: https://github.com/SimonAlfie/fabricateGoogle Scholar
Hughes, J. (2000) Generalising monads to arrows. Sci. Comput. Program. 37(1–3), 67111.CrossRefGoogle Scholar
Hykes, S. (2013) Docker container: A standardized unit of software. Available at: https://www.docker.com/what-containerGoogle Scholar
Street, Jane. (2015) Incremental: A library for incremental computations. Available at: https://github.com/janestreet/incrementalGoogle Scholar
Street, Jane. (2018) Dune: A composable build system. Available at: https://github.com/ocaml/duneGoogle Scholar
Jaskelioff, M. & O’Connor, R. (2015) A representation theorem for second-order functionals. J. Funct. Program. 25, E13.CrossRefGoogle Scholar
Levenshtein, V. I. (1966) Binary codes capable of correcting deletions, insertions, and reversals. In Soviet Physics Doklady, vol. 10, No 8, pp. 707710.Google Scholar
Liang, S. Hudak, P. & Jones, M. (1995) Monad transformers and modular interpreters. In Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM, pp. 333343.CrossRefGoogle Scholar
Marlow, S., Brandy, L., Coens, J. & Purdy, J. (2014) There is no fork: An abstraction for efficient, concurrent, and concise data access. ACM SIGPLAN Notices 49, 325337.CrossRefGoogle Scholar
Martin, E. (2017) Ninja build system homepage. Available at: https://ninja-build.org/Google Scholar
McBride, C. & Paterson, R. (2008) Applicative programming with effects. J. Funct. Program. 18(1), 113.CrossRefGoogle Scholar
Microsoft. (2017) Git Virtual File System. https://www.gvfs.io/Google Scholar
Mitchell, N. (2012) Shake before building: Replacing Make with Haskell. ACM SIGPLAN Notices 47, 5566.CrossRefGoogle Scholar
Mitchell, N. (2013) How to write fixed point build rules in Shake. Available at: https://stackoverflow.com/questions/14622169/how-to-write-fixed-point-build-rules-in-shake-e-g-latexGoogle Scholar
Mitchell, N. (2019) GHC rebuild times – shake profiling. Available at: https://neilmitchell.blogspot.com/2019/03/ghc-rebuild-times-shake-profiling.htmlGoogle Scholar
Mokhov, A., Mitchell, N., Peyton Jones, S. & Marlow, S. (2016) Non-recursive make considered harmful: Build systems at scale. In Proceedings of the 9th International Symposium on Haskell, Haskell 2016. ACM, pp. 170181.CrossRefGoogle Scholar
Mokhov, A., Mitchell, N. & Peyton Jones, S. (2018) Build systems à la carte. Proc. ACM Program. Lang. 2(ICFP), 79:179:29.CrossRefGoogle Scholar
Mokhov, A., Lukyanov, G., Marlow, S. & Dimino, J. (2019) Selective applicative functors. Proc. ACM Program. Lang. 3(ICFP). https://dl.acm.org/doi/10.1145/3341694CrossRefGoogle Scholar
Pennarun, A. (2012) Redo: A top-down software build system. Available at: https://github.com/apenwarr/redoGoogle Scholar
Peyton Jones, S., Vytiniotis, D., Weirich, S. & Washburn, G. (2006) Simple unification-based type inference for GADTs. ACM SIGPLAN Notices 41, 5061.CrossRefGoogle Scholar
Pottier, F. (2009) Lazy least fixed points in ML. http://gallium.inria.fr/~fpottier/publis/fpottier-fix.pdfGoogle Scholar
Radul, A. (2009) Propagation Networks: A Flexible and Expressive Substrate for Computation. Ph.D. thesis, MIT. Google Scholar
Shal, M. (2009) Build system rules and algorithms. Available at: http://gittup.org/tup/build_system_rules_and_algorithms.pdf/Google Scholar
The, GHC Team. (2019) The Glasgow Haskell Compiler homepage. Available at: https://www.haskell.org/ghc/Google Scholar
Submit a response

Discussions

No Discussions have been published for this article.