{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:54Z","timestamp":1779836754852,"version":"3.53.1"},"reference-count":45,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2020,4,21]],"date-time":"2020-04-21T00:00:00Z","timestamp":1587427200000},"content-version":"unspecified","delay-in-days":111,"URL":"http:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2020]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>Build systems are awesome, terrifying \u2013 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.<\/jats:p>","DOI":"10.1017\/s0956796820000088","type":"journal-article","created":{"date-parts":[[2020,4,21]],"date-time":"2020-04-21T02:14:00Z","timestamp":1587435240000},"source":"Crossref","is-referenced-by-count":8,"title":["Build systems \u00e0 la carte: Theory and practice"],"prefix":"10.1017","volume":"30","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-2493-3177","authenticated-orcid":false,"given":"ANDREY","family":"MOKHOV","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"NEIL","family":"MITCHELL","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"SIMON","family":"PEYTON JONES","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2020,4,21]]},"reference":[{"key":"S0956796820000088_ref44","unstructured":"Shal, M. (2009) Build system rules and algorithms. Available at: http:\/\/gittup.org\/tup\/build_system_rules_and_algorithms.pdf\/"},{"key":"S0956796820000088_ref43","unstructured":"Radul, A. (2009) Propagation Networks: A Flexible and Expressive Substrate for Computation . Ph.D. thesis, MIT."},{"key":"S0956796820000088_ref39","doi-asserted-by":"publisher","DOI":"10.1145\/3341694"},{"key":"S0956796820000088_ref36","unstructured":"Mitchell, N. (2019) GHC rebuild times \u2013 shake profiling. Available at: https:\/\/neilmitchell.blogspot.com\/2019\/03\/ghc-rebuild-times-shake-profiling.html"},{"key":"S0956796820000088_ref34","doi-asserted-by":"publisher","DOI":"10.1145\/2398856.2364538"},{"key":"S0956796820000088_ref28","doi-asserted-by":"publisher","DOI":"10.1145\/199448.199528"},{"key":"S0956796820000088_ref27","first-page":"707","article-title":"Binary codes capable of correcting deletions, insertions, and reversals","volume":"10","author":"Levenshtein","year":"1966","journal-title":"In Soviet Physics Doklady"},{"key":"S0956796820000088_ref25","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796815000088"},{"key":"S0956796820000088_ref24","unstructured":"Street, Jane . (2018) Dune: A composable build system. Available at: https:\/\/github.com\/ocaml\/dune"},{"key":"S0956796820000088_ref29","doi-asserted-by":"publisher","DOI":"10.1145\/2692915.2628144"},{"key":"S0956796820000088_ref9","first-page":"79","article-title":"Nix: A safe and policy-free system for software deployment","volume":"4","author":"Dolstra","year":"2004","journal-title":"In LISA"},{"key":"S0956796820000088_ref30","unstructured":"Martin, E. (2017) Ninja build system homepage. Available at: https:\/\/ninja-build.org\/"},{"key":"S0956796820000088_ref6","volume-title":"Introduction to Algorithms","author":"Cormen","year":"2001"},{"key":"S0956796820000088_ref12","doi-asserted-by":"publisher","DOI":"10.1145\/2889160.2889222"},{"key":"S0956796820000088_ref31","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"S0956796820000088_ref5","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796899003342"},{"key":"S0956796820000088_ref8","doi-asserted-by":"publisher","DOI":"10.1145\/567532.567544"},{"key":"S0956796820000088_ref2","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-71316-6_31"},{"key":"S0956796820000088_ref45","unstructured":"The, GHC Team . (2019) The Glasgow Haskell Compiler homepage. Available at: https:\/\/www.haskell.org\/ghc\/"},{"key":"S0956796820000088_ref32","unstructured":"Microsoft. (2011) Excel recalculation (msdn documentation). Available at: 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"},{"key":"S0956796820000088_ref23","unstructured":"Street, Jane . (2015) Incremental: A library for incremental computations. Available at: https:\/\/github.com\/janestreet\/incremental"},{"key":"S0956796820000088_ref1","doi-asserted-by":"publisher","DOI":"10.1145\/503272.503296"},{"key":"S0956796820000088_ref41","doi-asserted-by":"publisher","DOI":"10.1145\/1160074.1159811"},{"key":"S0956796820000088_ref10","unstructured":"Eichmann, D. (2019) Exploring cloud builds in Hadrian. Available at: https:\/\/web.archive.org\/web\/20191008171120\/https:\/\/well-typed.com\/blog\/2019\/08\/exploring-cloud-builds-in-hadrian\/"},{"key":"S0956796820000088_ref22","unstructured":"Hykes, S. (2013) Docker container: A standardized unit of software. Available at: https:\/\/www.docker.com\/what-container"},{"key":"S0956796820000088_ref18","unstructured":"GRAIL. (2017) Reflow: A system for incremental data processing in the cloud. Available at: https:\/\/github.com\/grailbio\/reflow"},{"key":"S0956796820000088_ref19","unstructured":"Grosskurth, A. (2007) Purely top-down software rebuilding. M.Phil. thesis, University of Waterloo."},{"key":"S0956796820000088_ref3","unstructured":"Bernstein, D. J. (2003) Rebuilding target files when source files have changed. Available at: http:\/\/cr.yp.to\/redo.html"},{"key":"S0956796820000088_ref38","doi-asserted-by":"publisher","DOI":"10.1145\/3236774"},{"key":"S0956796820000088_ref4","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.153.2"},{"key":"S0956796820000088_ref40","unstructured":"Pennarun, A. (2012) Redo: A top-down software build system. Available at: https:\/\/github.com\/apenwarr\/redo"},{"key":"S0956796820000088_ref11","doi-asserted-by":"publisher","DOI":"10.1145\/2858965.2814316"},{"key":"S0956796820000088_ref37","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976011"},{"key":"S0956796820000088_ref33","unstructured":"Microsoft. (2017) Git Virtual File System. https:\/\/www.gvfs.io\/"},{"key":"S0956796820000088_ref13","unstructured":"Estevez, P. & Shetty, D. (2019) Translation of Build Systems \u00e0 la Carte to Kotlin. Available at: https:\/\/web.archive.org\/web\/20191021224324\/https:\/\/github.com\/arrow-kt\/arrow\/blob\/paco-tsalc\/modules\/docs\/arrow-examples\/src\/test\/kotlin\/arrow\/BuildSystemsALaCarte.kt."},{"key":"S0956796820000088_ref42","unstructured":"Pottier, F. (2009) Lazy least fixed points in ML. http:\/\/gallium.inria.fr\/~fpottier\/publis\/fpottier-fix.pdf"},{"key":"S0956796820000088_ref35","unstructured":"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-latex"},{"key":"S0956796820000088_ref26","unstructured":"Kosara, R. (2008) Decimal expansion of A(4,2). Available at: https:\/\/web.archive.org\/web\/20080317104411\/http:\/\/www.kosara.net\/thoughts\/ackermann42.html"},{"key":"S0956796820000088_ref7","volume-title":"Advanced Excel for Scientific Data Analysis","author":"De Levie","year":"2004"},{"key":"S0956796820000088_ref15","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380090402"},{"key":"S0956796820000088_ref14","unstructured":"Facebook. (2013) Buck: A high-performance build tool. Available at: https:\/\/buckbuild.com\/"},{"key":"S0956796820000088_ref16","unstructured":"Gandhi, V. (2018) Translation of build systems \u00e0 la Carte to Rust. Available at: https:\/\/web.archive.org\/web\/20191020001014\/https:\/\/github.com\/cutculus\/bsalc-alt-code\/blob\/master\/BSalC.rs"},{"key":"S0956796820000088_ref17","unstructured":"Google. (2016) Bazel. Available at: http:\/\/bazel.io\/"},{"key":"S0956796820000088_ref20","unstructured":"Hoyt, B. , Hoyt, B. & Hoyt, B. (2009) Fabricate: The better build tool. Available at: https:\/\/github.com\/SimonAlfie\/fabricate"},{"key":"S0956796820000088_ref21","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-6423(99)00023-4"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796820000088","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:50Z","timestamp":1779835010000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796820000088\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020]]},"references-count":45,"alternative-id":["S0956796820000088"],"URL":"https:\/\/doi.org\/10.1017\/s0956796820000088","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020]]},"article-number":"e11"}}