|
|
|
|
|
by klodolph
2369 days ago
|
|
> Then it hit me... And I'm sure the same is for buck, pants, please.build, gn and other similar systems. There’s an exercise you can do where you design a build system on the basis that it shouldn't do unnecessary work (which can be very slow and frustrating in practice). My personal experience is that you can really quickly get to the point where just reading the entire graph into memory gets expensive. People talk about how Google is huge… but long before you get to that scale, you can end up with a build graph that just takes forever to parse and evaluate. (At Google's scale, it doesn't even fit in memory any more.) So you decide that, as a hard design requirement, you should be able to only load the portion of the repository that you are building. And then you want to make this cacheable, so you can change the repository and know what’s changed in some quick / reasonable way. If you go down this path, you end up rediscovering some of the big design decisions behind Bazel, Buck, Pants, Please, and GN. |
|