3 ms·
The common interface is dependencies and dependents, but the problem with existing build systems is that they make assumptions about those two things. They also
by ghoward 4y ago
The common interface is dependencies and dependents, but the problem with existing build systems is that they make assumptions about those two things. They also place other restrictions.
For example, the Go build system assumes you set up the project according to the Go standard. Cargo sets things up a certain way too.
They also assume certain build tools, like the Go compiler and `rustc`.
Restrictions for ease of implementation are the reasons why every build system sucks. Figure out how to remove the restrictions and implement that, and you will have a universal build system.
Source: I am building such a build system, so whether I'm right will only become clear over time.
- Too 4y agoOne difficulty is that dependency resolution need to be language-aware, to understand the semantics of #include, import, require, CLASSPATH, compiler -i flags etc etc. Best would be if compiler could export this in a standard format for consumption by a build system. Like the language server. Looking at build tools that try to be cross language, you have Bazel probably being the most serious contender, which often requires you to vendor your dependencies and rewrite the build files entirely in a different mindset than how upstream packaged it.
- ghoward 4y agoYou are absolutely right, especially about understanding the semantics of importing code in each language. Fortunately, with few restrictions, it is possible to use hacks to simulate the effect, mostly.