4 ms·
I appreciate the link to https://dl.acm.org/doi/10.1145/3236774 https://dl.acm.org/doi/10.1145/3236774
by Iceland_jack 2y ago
I appreciate the link to https://dl.acm.org/doi/10.1145/3236774 https://dl.acm.org/doi/10.1145/3236774
- o11c 2y agoDefinitely interesting, but it's flat-out wrong about the limitations of `make`. In particular, the `release.txt` task is trivial by adding a dummy rule to generate and include dependencies; see https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html https://www.gnu.org/software/make/manual/html_node/Remaking-... (be sure to add empty rules to handle the case of deleted dynamic dependencies). You can use hashes instead of file modification times by adding a different kind of dummy rule. The only downside is that you have to think about the performance a little. I imagine it's possible for a project to have some kind of dynamic dependencies that GNU make can't handle, but I dare say that any such dependency tree is hard to understand for humans too, and thus should be avoided regardless. By contrast, in many other build tools it is impossible to handle some of the things that are trivial in `make`. (if you're not using GNU make, you are the problem; do not blame `make`)
- bjourne 2y agoI guess you aren't keen on Java then? Complex dynamic dependency graphs aren't difficult for humans to handle or many build tools other than make.
- throwaway2037 2y ago> I guess you aren't keen on Java then? Can you explain more? I don't follow.
- bjourne 2y agoJava dependencies are too complicated for make. See https://www.oreilly.com/library/view/managing-projects-with/0596006101/ch09.html https://www.oreilly.com/library/view/managing-projects-with/...
- o11c 2y agoI'm not keen on Java for other reasons. The fact that a single .java file can generate multiple .class files is annoying but not something tools can't handle (it's actually similar to .h files for C/C++ - remember, we only need the complete dependency graph for the rebuild, not the current build). The main part that's difficult for humans is if there's a non-public class at top level rather than nested (I forget all the Java-specific terminology for the various kinds of class nesting).