Live data from Hacker News

Tup – A file-based build system for Linux, OS X, and Windows

gittup.org

21–30 of 110 posts

Re: Tup – A file-based build system for Linux, OS X, and Windows

#21
post #14

Earlier quoted context omitted.

The same functionality should be available in various inotify / dnotify implementations.

Not really. inotify requires you to set up a watch on every single file or directory that you want to watch. To see how this escalates, install the inotify-tools and do inotifywatch -d /path/to/directory/with/a/lot/of/files

What about kqueue or eventports?

Re: Tup – A file-based build system for Linux, OS X, and Windows

#23
post #16

Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! On a related note, I've always wondered if it was possible to have a build system based on dynamic library injection / strace. The idea would be that you just write your build rules in shell script. Then, you run it with a special shell that catches open(), etc. in child processes (via library injection, etc). These syste…

There is such a build system, but I can't remember the name right now.

It tracks system calls to see every file opened by the compiler to produce exact dependency graphs (assuming compiler is deterministic).

The downside is that it's Linux only.

If anyone remembers the name, please do share.

Re: Tup – A file-based build system for Linux, OS X, and Windows

#24
post #9
post #8

Earlier quoted context omitted.

> That said it still beats the crap out GNU Make How? Their description was useless in describing why it's "obviously" so much better.

> See the difference? The arrows go up. This makes it very fast. I don't think I've seen a more intelligence-insulting description of a product.

Well that was a bit light hearted but that's highlights the big difference: tup works bottom up, make works top down.

The paper linked there provides a more thorough explanation.

Re: Tup – A file-based build system for Linux, OS X, and Windows

#25
post #16

Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! On a related note, I've always wondered if it was possible to have a build system based on dynamic library injection / strace. The idea would be that you just write your build rules in shell script. Then, you run it with a special shell that catches open(), etc. in child processes (via library injection, etc). These syste…

> Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast!

To be honest, the only time I haven't felt like an army of build rules isn't a weight I have to carry uphill is when I use Lein (which is more of a build project tool as opposed to something as elemental as tup).

Systems like SBT and Ant end up with things that feel to me like a complete and total reliance on hand-tooled plugins as opposed to a reliance on executing pre-existing executables. Gulp is the same way; even though there are perfectly serviceable and stream-like executables on every OS ready for use, Gulp insists you write more javascript to glue things into its awkward model.

Maybe that's not the end of the world (as opposed to yet another make-like DSL), but in cases with truly and almost comically incomprehensible codebases like SBT (oh SBT team, every time you "simplify" your codebase you totally miss the point we don't care about your abstractions and just need to write command extensions) or Gulp (oh Gulp team, please make Gulp more like Storm/Trident or Hakyll's buidler arrows so it does more than just compile javascript and sass) then you're totally out of luck.

And when we consider GNU Automake and Autoconf that do have a ton of prebuilt rules, we see an even more dire situation: where the language describing the rules is more complicated than the underlying concepts they service.

Re: Tup – A file-based build system for Linux, OS X, and Windows

#26
post #23
post #16

Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! On a related note, I've always wondered if it was possible to have a build system based on dynamic library injection / strace. The idea would be that you just write your build rules in shell script. Then, you run it with a special shell that catches open(), etc. in child processes (via library injection, etc). These syste…

There is such a build system, but I can't remember the name right now. It tracks system calls to see every file opened by the compiler to produce exact dependency graphs (assuming compiler is deterministic). The downside is that it's Linux only. If anyone remembers the name, please do share.

I don't know if it's the one you're thinking of, but fabricate.py does basically that.

Re: Tup – A file-based build system for Linux, OS X, and Windows

#27
post #16

Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! On a related note, I've always wondered if it was possible to have a build system based on dynamic library injection / strace. The idea would be that you just write your build rules in shell script. Then, you run it with a special shell that catches open(), etc. in child processes (via library injection, etc). These syste…

> Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! To be honest, the only time I haven't felt like an army of build rules isn't a weight I have to carry uphill is when I use Lein (which is more of a build project tool as opposed to something as elemental as tup). Systems like SBT and Ant end up with things that feel to me like a complete and total reliance on hand-toole…

The one thing I like about Gulp is that it makes it easy to make a project out of your build process, to basically enforce your own convention over configuration. I have a single, canonical build process for all of my projects and it gets installed through NPM like every other dependency. The individual gulpfiles for my projects end up being very simple and readable. It has the side effect of drastically cleaning up my package.json file, too.

The only other thing I like about Gulp is that it works without too much hassle on Windows and *Nix.

Other than that, it's dung. Though it's certainly better than Grunt, it's not objectively good. That seems to be a problem with a lot of things these days, "relative better than the alternatives, not something you'd actually want on its own merits."

Re: Tup – A file-based build system for Linux, OS X, and Windows

#28
post #16

Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! On a related note, I've always wondered if it was possible to have a build system based on dynamic library injection / strace. The idea would be that you just write your build rules in shell script. Then, you run it with a special shell that catches open(), etc. in child processes (via library injection, etc). These syste…

> Tup's main problem is it's unusual, and it doesn't have a library of build rules. But it's fast! To be honest, the only time I haven't felt like an army of build rules isn't a weight I have to carry uphill is when I use Lein (which is more of a build project tool as opposed to something as elemental as tup). Systems like SBT and Ant end up with things that feel to me like a complete and total reliance on hand-toole…

[deleted]

Re: Tup – A file-based build system for Linux, OS X, and Windows

#29
post #14

Earlier quoted context omitted.

The same functionality should be available in various inotify / dnotify implementations.

Not really. inotify requires you to set up a watch on every single file or directory that you want to watch. To see how this escalates, install the inotify-tools and do inotifywatch -d /path/to/directory/with/a/lot/of/files

fanotify replaces inotify

Re: Tup – A file-based build system for Linux, OS X, and Windows

#30

While I can believe the claim it's better than make, it would be way more interesting to see how it compares to Bazel. After using it (or rather Blaze) at Google and now Bazel at Improbable, I consider it the gold standard in build tools. If anything, I wish Google would open source the rest of the build "ecosystem" that together with Blaze let you build the whole codebase in seconds. It was pretty amazing.

I've also been using Bazel for a couple of months now and it's fantastic. Simple, declarative syntax, blazingly fast. I can't recommend it highly enough.
Post reply on HN