<story><title>Redo: A recursive, general-purpose build system</title><url>https://redo.readthedocs.io/en/latest/</url></story><parent_chain><item><author>AceJohnny2</author><text>As an intensive (and reluctant) user of GNU Make, I keep looking for a more modern replacement. Redo is not it.&lt;p&gt;Make is really a complicated combination of these components:&lt;p&gt;- a dependency definition language with in-place evaluation and half-assed wildcards&lt;p&gt;- A functional language with extremely limited datatypes (effectively just space-separated strings)&lt;p&gt;- a clunky macro system&lt;p&gt;- A &amp;quot;distributed&amp;quot; topological execution engine (did you know Make can coordinate job slots across recursive executions of Make? It&amp;#x27;s impressive! And shouldn&amp;#x27;t have to exist!) [1]&lt;p&gt;All the alternative build systems wisely choose to tackle &lt;i&gt;only some&lt;/i&gt; of these features. Redo is interesting in that it&amp;#x27;s a minimal system that leans on existing Unix tools to fill the gaps, but I can&amp;#x27;t say I&amp;#x27;m impressed with using Shell as the scripting language, though it is arguably more useful than Make&amp;#x27;s home-grown language that too few people know. Edit: actually, redo&amp;#x27;s doesn&amp;#x27;t enforce Shell, it can be any executable. That&amp;#x27;s more interesting, maybe (flexibility also introduces complexity!)&lt;p&gt;The most interesting development in this space is the paper &amp;quot;Build Systems A La Carte&amp;quot; [2] by Mokhov, Mitchell, &amp;amp; Peyton Jones, who did a great job of breaking down build systems to their fundamental concepts, and along the way found one particular point of the design space that wasn&amp;#x27;t fulfilled (Table 2, p79:16). Unfortunately, I fear it&amp;#x27;ll be some years before something production-ready emerges from that research, (and I&amp;#x27;m sure I&amp;#x27;ll be grumpy about some of their implementation details anyhow! Build systems do not a happy developer make)&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.gnu.org&amp;#x2F;software&amp;#x2F;make&amp;#x2F;manual&amp;#x2F;html_node&amp;#x2F;Job-Slots.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.gnu.org&amp;#x2F;software&amp;#x2F;make&amp;#x2F;manual&amp;#x2F;html_node&amp;#x2F;Job-Slots...&lt;/a&gt;&lt;p&gt;[2] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.microsoft.com&amp;#x2F;en-us&amp;#x2F;research&amp;#x2F;uploads&amp;#x2F;prod&amp;#x2F;2018&amp;#x2F;03&amp;#x2F;build-systems.pdf&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.microsoft.com&amp;#x2F;en-us&amp;#x2F;research&amp;#x2F;uploads&amp;#x2F;prod&amp;#x2F;2018&amp;#x2F;0...&lt;/a&gt;</text></item></parent_chain><comment><author>woodruffw</author><text>Not just a functional language -- I found that my ability to write maintainable (and performance) Makefiles drastically improved when I began to think of Make as a Prolog&amp;#x2F;Datalog variant with particularly heinous syntax and &lt;i&gt;very&lt;/i&gt; limited constraint resolution.</text></comment>
<story><title>Redo: A recursive, general-purpose build system</title><url>https://redo.readthedocs.io/en/latest/</url></story><parent_chain><item><author>AceJohnny2</author><text>As an intensive (and reluctant) user of GNU Make, I keep looking for a more modern replacement. Redo is not it.&lt;p&gt;Make is really a complicated combination of these components:&lt;p&gt;- a dependency definition language with in-place evaluation and half-assed wildcards&lt;p&gt;- A functional language with extremely limited datatypes (effectively just space-separated strings)&lt;p&gt;- a clunky macro system&lt;p&gt;- A &amp;quot;distributed&amp;quot; topological execution engine (did you know Make can coordinate job slots across recursive executions of Make? It&amp;#x27;s impressive! And shouldn&amp;#x27;t have to exist!) [1]&lt;p&gt;All the alternative build systems wisely choose to tackle &lt;i&gt;only some&lt;/i&gt; of these features. Redo is interesting in that it&amp;#x27;s a minimal system that leans on existing Unix tools to fill the gaps, but I can&amp;#x27;t say I&amp;#x27;m impressed with using Shell as the scripting language, though it is arguably more useful than Make&amp;#x27;s home-grown language that too few people know. Edit: actually, redo&amp;#x27;s doesn&amp;#x27;t enforce Shell, it can be any executable. That&amp;#x27;s more interesting, maybe (flexibility also introduces complexity!)&lt;p&gt;The most interesting development in this space is the paper &amp;quot;Build Systems A La Carte&amp;quot; [2] by Mokhov, Mitchell, &amp;amp; Peyton Jones, who did a great job of breaking down build systems to their fundamental concepts, and along the way found one particular point of the design space that wasn&amp;#x27;t fulfilled (Table 2, p79:16). Unfortunately, I fear it&amp;#x27;ll be some years before something production-ready emerges from that research, (and I&amp;#x27;m sure I&amp;#x27;ll be grumpy about some of their implementation details anyhow! Build systems do not a happy developer make)&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.gnu.org&amp;#x2F;software&amp;#x2F;make&amp;#x2F;manual&amp;#x2F;html_node&amp;#x2F;Job-Slots.html&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.gnu.org&amp;#x2F;software&amp;#x2F;make&amp;#x2F;manual&amp;#x2F;html_node&amp;#x2F;Job-Slots...&lt;/a&gt;&lt;p&gt;[2] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.microsoft.com&amp;#x2F;en-us&amp;#x2F;research&amp;#x2F;uploads&amp;#x2F;prod&amp;#x2F;2018&amp;#x2F;03&amp;#x2F;build-systems.pdf&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.microsoft.com&amp;#x2F;en-us&amp;#x2F;research&amp;#x2F;uploads&amp;#x2F;prod&amp;#x2F;2018&amp;#x2F;0...&lt;/a&gt;</text></item></parent_chain><comment><author>lolski</author><text>I second Bazel. People keep on mentioning how steep the learning curve is, but   the conceptual model is really simple, elegant, and intuitive.&lt;p&gt;What is steep is the technical know-hows:&lt;p&gt;1. When things don&amp;#x27;t work as expected. For example, while it worked flawlessly with languages that it natively support such as Java, that wasn&amp;#x27;t the case for other languages such as Javascript or Python.&lt;p&gt;2. When you have to do something advanced such as building custom Bazel rule. You&amp;#x27;ll need to understand Bazel internals and unfortunately the documentation isn&amp;#x27;t very intuitive and also somewhat sparse.</text></comment>