[HN Gopher] Redo: A recursive, general-purpose build system
       ___________________________________________________________________
        
       Redo: A recursive, general-purpose build system
        
       Author : jstearns
       Score  : 38 points
       Date   : 2021-12-28 19:31 UTC (3 hours ago)
        
 (HTM) web link (redo.readthedocs.io)
 (TXT) w3m dump (redo.readthedocs.io)
        
       | stargrave wrote:
       | One of redo's implementations (on Go) has complete documentation
       | on the whole redo build system (applicable to most (all?) redo-s)
       | usage: http://www.goredo.cypherpunks.ru/Usage-rules.html
        
       | pdimitar wrote:
       | Not impressed by shell incantations. What would sell such a tool
       | to me is a feature to replace those with new and more intuitive
       | syntax. And a terser one, too.
       | 
       | Holding on to how things are done in the shell is not a thing to
       | be proud of. I think a lot of us around here stopped counting the
       | times we got tripped by globbing, forgetting or misplacing one
       | special character in a ${} block, or quoting.
       | 
       | Let those monstrosities die already. Please.
       | 
       | There's this tool -- https://github.com/ejholmes/walk -- that is
       | pretty good and I liked it but dropped it for the same reasons:
       | it leaves the heavy lifting to you and it depends on your mastery
       | in the black arts.
       | 
       | Now obviously I'm not managing huge projects but nowadays
       | https://github.com/casey/just serves me just fine for everything
       | I need.
        
         | stargrave wrote:
         | Nobody forces you to use any kind of shell with redo. Its .do
         | files can be anything you want: ELF object files, shell
         | scripts, Perl, Python, whatever, just make it executable and
         | obey trivial simple rules (stdout and three arguments).
        
           | pdimitar wrote:
           | I see. That makes it a little better. At least we can utilize
           | higher-level scripting then. Cool.
           | 
           | I'm still not sure about having more than one file that's
           | handling building however...
        
             | stargrave wrote:
             | And again noone forces you to use multiple files too :-).
             | You can literally have just single default.do file for the
             | whole project. apenwarr/redo somewhere explicitly noted
             | that. Separate .do files are only for convenience and
             | ability to automatically depend on target's build rules
             | independently from others, that Make just do not do at all.
        
               | pdimitar wrote:
               | Well, the fact that this is a bit confusing is not a good
               | sign. But maybe I should read the page again and more
               | slowly.
        
         | melony wrote:
         | > _Let those monstrosities die already. Please._
         | https://github.com/thought-machine/please
        
           | pdimitar wrote:
           | I got turned off by the docs when I wanted to try this tool
           | some months ago, maybe it's worth to revisit. Do you
           | recommend it? Do you use it often?
        
             | melony wrote:
             | Using it without Bazel experience is not recommended. It is
             | very rough around the edges, I often had to refer to Bazel
             | docs when using it.
        
               | pdimitar wrote:
               | Thanks for the honest take, appreciate it.
        
       | AceJohnny2 wrote:
       | As an intensive (and reluctant) user of GNU Make, I keep looking
       | for a more modern replacement. Redo is not it.
       | 
       | Make is really a complicated combination of these components:
       | 
       | - a dependency definition language with in-place evaluation and
       | half-assed wildcards
       | 
       | - A functional language with extremely limited datatypes
       | (effectively just space-separated strings)
       | 
       | - a clunky macro system
       | 
       | - A "distributed" topological execution engine (did you know Make
       | can coordinate job slots across recursive executions of Make?
       | It's impressive! And shouldn't have to exist!) [1]
       | 
       | All the alternative build systems wisely choose to tackle _only
       | some_ of these features. Redo is interesting in that it 's a
       | minimal system that leans on existing Unix tools to fill the
       | gaps, but I can't say I'm impressed with using Shell as the
       | scripting language, though it is arguably more useful than Make's
       | home-grown language that too few people know. Edit: actually,
       | redo's doesn't enforce Shell, it can be any executable. That's
       | more interesting, maybe (flexibility also introduces complexity!)
       | 
       | The most interesting development in this space is the paper
       | "Build Systems A La Carte" [2] by Mokhov, Mitchell, & 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't fulfilled (Table
       | 2, p79:16). Unfortunately, I fear it'll be some years before
       | something production-ready emerges from that research, (and I'm
       | sure I'll be grumpy about some of their implementation details
       | anyhow! Build systems do not a happy developer make)
       | 
       | [1] https://www.gnu.org/software/make/manual/html_node/Job-
       | Slots...
       | 
       | [2] https://www.microsoft.com/en-
       | us/research/uploads/prod/2018/0...
        
         | AceJohnny2 wrote:
         | I see GNU Make as sitting on the opposite end of a spectrum
         | than Git. Git is fascinating as a sophisticated, featureful
         | system emerging from a simple fundamental concept (Merkle tree
         | of file hashes), whereas Make is a mish-mash of concepts
         | cobbled together to expose a particular set of user features
         | (describe and execute a graph of executions _in a factorized
         | way_ ).
         | 
         | Git emerged decades after other version control systems were
         | first invented, and found a neat abstraction that covered the
         | space.
         | 
         | That's why I have such hope for the BSalC paper and what can
         | emerge from it.
        
         | qbasic_forever wrote:
         | Have you given bazel a serious look? It hits quite a few of the
         | points you mention. There's a steep learning curve and you kind
         | of have to go all in with it, but once you're there it's quite
         | nice.
        
       ___________________________________________________________________
       (page generated 2021-12-28 23:00 UTC)