4 ms·
Make, particularly, stands out for me. As an embedded/firmware programmer, it's a core tool of mine that I've had to begrudgingly learn. Make is awful, but it's
by AceJohnny2 8y ago
Make, particularly, stands out for me. As an embedded/firmware programmer, it's a core tool of mine that I've had to begrudgingly learn. Make is awful, but it's irreplaceable.
At it's core, it's really a mix of three things:
1. A language to define a dependency graph ("target: dependencies") and how the nodes are connected ("rules")
2. a functional scripting language to be able to factorize the declaration of the graph
3. and finally a graph traversal worker to dispatch and perform those rules that are required (including a sophisticated "job server" to maintain the concurrent job limit across child make processes with no developer intervention!)
I haven't encountered a good replacement tool that properly tackles all 3 of these feature sets. (Granted, I haven't done an in-depth analysis of the field...)
- gavinpc 8y agoHave you tried Tup? http://gittup.org/tup/ http://gittup.org/tup/ I used it on a project with many thousands of files and hundreds of (mostly dynamic) build rules. This was a literate program, and most build steps required the extraction of code from the source docs --- including build rules themselves --- and I still maintained sub-second updates. I think Joe would have loved it.
- AceJohnny2 8y agoI have! Tup was high on my list of potential replacement candidates (despite being initially put-off by the cheekiness of its homepage). In my experiments though, Tup failed hard on point 2, lacking a good language to factorize the dependency graph declaration. (and to be clear, I think Make's is pretty terrible by itself, before GMSL or Guile extensions come into the picture) Edit: I see tup supports Lua extensions, which may cancel my complaint above.
- deleted 8y ago[deleted]
- porker 8y ago> This was a literate program What language and/or system were you writing in? I discovered literate programming in 2003 and was excited by it (still am). But it never took off and the tooling was poor (Leo, the Literate Programming Editor, is the one I remember - and shudder thinking about)
- gavinpc 8y agoI started to write this up then remembered answering a similar question a while back. https://news.ycombinator.com/item?id=12398098 https://news.ycombinator.com/item?id=12398098 I'm still on that "detour," but still a believer. Edit: some dead links there. This "bootstrap" directory contains the custom tangler and the custom rule processor. This 10K, plus the tiny configs in the root, are the only code in the project not in documents. https://bitbucket.org/gavinpc/willshake/src/master/bootstrap/ https://bitbucket.org/gavinpc/willshake/src/master/bootstrap...
- jstimpfle 8y agoHave you considered just writing your own? The dependency graph should be a DAG - finding dependencies in a DAG is not hard. If you use a language like Python, This will easily give you point 2) - you can express abstractions in a much saner language than make.
- AceJohnny2 8y agoFrankly, I have much better things to do than writing my own ad-hoc, bug-ridden implementation of Lisp^h^h Make. I did look at SCons years ago, which is a Python-based build-system, but as I recall it ended up being the worse of both worlds by attempting a declarative syntax that was marred by its imperative warts.
- Ixiaus 8y agoNix meets most of those requirements I think. I've replaced make with it in all of my workflows now.
- nikofeyn 8y agothe fact that people find make acceptable in any way, shape, or form makes me wonder if i even belong as a software engineer. and your points sound like you're just describing a dsl in lisp/scheme.