Live data from Hacker News

Buck – A build system developed and used by Facebook

buckbuild.com

61–70 of 131 posts

Re: Buck – A build system developed and used by Facebook

#61
post #53

Earlier quoted context omitted.

I'm not commenting about Drake or its usefulness, but concerning (GNU) make : * you can specify several inputs & outputs per rule * you can specify which script interpreter is used ($SHELL), and python can be it. See https://www.gnu.org/software/make/manual/html_node/One-Shell... * downstream make can indeed be interesting. however you can try to build all ultimate targets ans let make sort out which ones can be avoi…

AFAIK, you can't specify several outputs per rule in GNU Make without relying on horribly complex workarounds. It's actually the feature I miss the most in it.

Is this too complex and/or insufficient? https://www.gnu.org/software/automake/manual/html_node/Multi...

Re: Buck – A build system developed and used by Facebook

#63
So much complexity to put some pictures on a screen and have people click 'like'.

It's dizzying.

I wonder if build-system complexity is an artifact of reducible complexity in other areas.

Perhaps the next time we develop a language, it should comprise of it's own build system that doesn't require any configuration, or rather minimal. To the point wherein we didn't need to think that much beyond the obvious.

Re: Buck – A build system developed and used by Facebook

#64

Continuing the trend of Facebook creating competing tools more often than persisting with and improving existing ones, which I feel dilutes effort and has fragmented a number of ecosystems. We've got a couple of Facebook fans at work, which has left us with a number of our systems using different tools to accomplish essentially the same tasks, and no strong case on either side for us to standardise on one of them. Ma…

Facebook and Google have a problem I am familiar with: Not Invented Yet Syndrome.

Typically they face a problem that few people have ever faced. There may be an existing solution, but not in the open. So they have to roll their own.

Others in this thread say Buck was inspired by Blaze. That seems reasonable and I hardly think Facebook can be blamed for rolling their own when that was the only available option.

You might as well blame Google for fragmenting the Hadoop ecosystem by creating their MapReduce framework.

Re: Buck – A build system developed and used by Facebook

#65
post #61

Earlier quoted context omitted.

AFAIK, you can't specify several outputs per rule in GNU Make without relying on horribly complex workarounds. It's actually the feature I miss the most in it.

Is this too complex and/or insufficient? https://www.gnu.org/software/automake/manual/html_node/Multi...

That's the kind of workaround I had in mind and is probably sufficient, but yes, ~25 lines of cryptic and error-prone interleaved GNU make and shell script just to express multiple outputs correctly is way above my personal threshold for “too complex” or even “sane”.

Re: Buck – A build system developed and used by Facebook

#66
post #61

Earlier quoted context omitted.

AFAIK, you can't specify several outputs per rule in GNU Make without relying on horribly complex workarounds. It's actually the feature I miss the most in it.

Is this too complex and/or insufficient? https://www.gnu.org/software/automake/manual/html_node/Multi...

GNU Make works intuitively in pattern rules, but differently for normal rules? Uh oh.

Re: Buck – A build system developed and used by Facebook

#67
post #66
post #61

Earlier quoted context omitted.

Is this too complex and/or insufficient? https://www.gnu.org/software/automake/manual/html_node/Multi...

GNU Make works intuitively in pattern rules, but differently for normal rules? Uh oh.

It even has builtin implicit rules. Enabled by default. Checking for the existence of files that are not found in any new project for maybe ten or twenty years (such as RCS and SCSS version control files).

On. Every. Single. Run.

Yup.

Re: Buck – A build system developed and used by Facebook

#68
post #8

I don't work in a shop where performance/speed is important, but I am looking for other ways to do things I would do in Make but...not in Make. For example, my use-case is similar to what Mike Bostock described in "Why Use Make" [0] when explaining how he uses Make to build out his data tranformation process. Most of my work is data transformation/small-scale ETL, but I just haven't been able to get into Make beyond…

Closest in spirit to make, and does essentially all you want to do is "redo", concept drafter by djb, implemented independently by apenwarr[0] and by others. apenwarr's version has a super short "do" script (a couple of hundred lines of portable sh IIRC) which uses the same configuration but does a full rebuild each time.

The two weak points are: (1) multiple outputs from a compilation step (yytab.c yytab.h from yacc) is not properly supported, and (2) no windows support. Other than that it's the perfect minimalistic make replacement -- what make should have been.

Additionally, there tup[1]. With some assumptions about the build process that usually hold in non-distributed builds, it is the fastest, simplest make replacement; You just write a list of commands that builds your final outputs, and by tracing the processes it figures out exactly what needs to be done next time -- nothing more, and nothing less.

[0] https://github.com/apenwarr/redo [1] http://gittup.org/tup/

Re: Buck – A build system developed and used by Facebook

#69
post #55

Earlier quoted context omitted.

Doesn't support windows. You're better off with bazel or GN.

How do you in 2017 come up with a build system that doesn't even run on Windows.

They made buck for themselves where their infrastructure runs on (*nix). Google's internal build tool (before bazel) was the same. Now chromium's GN build tool was made for their product that was targetted to run everywhere, which is why windows support is good.

Re: Buck – A build system developed and used by Facebook

#70
post #8

I don't work in a shop where performance/speed is important, but I am looking for other ways to do things I would do in Make but...not in Make. For example, my use-case is similar to what Mike Bostock described in "Why Use Make" [0] when explaining how he uses Make to build out his data tranformation process. Most of my work is data transformation/small-scale ETL, but I just haven't been able to get into Make beyond…

I tried Buck and found it to be a poor clone of the Google build tool it's based on. If you're interested, go straight to Bazel -- it's the real thing.

Edit to add: here's a specific complaint. To run arbitrary commands and shell scripts, you use genrule(), but in Buck a genrule can only have a single output. I used Buck to preprocess and organize the assets for a game, and that restriction made it very awkward.

It's been a while since I used Buck, and it looks like this has improved a bit -- you can now output a folder of files: https://buckbuild.com/rule/genrule.html

Post reply on HN