A brief survey of build tools, focused on D

Olivier FAURE couteaubleu at gmail.com
Mon Dec 17 11:27:11 UTC 2018


On Sunday, 16 December 2018 at 00:17:55 UTC, Paul Backus wrote:
> There's something important you're glossing over here, which is 
> that, in the general case, there's no single obvious or natural 
> way to compose two DAGs together.
>
> For example: suppose project A's DAG has two "output" vertices 
> (i.e., they have no outgoing edges), one corresponding to a 
> "debug" build and one corresponding to a "release" build. Now 
> suppose project B would like to depend on project A. For this 
> to happen, our hypothetical DAG import function needs to add 
> one or more edges that connect A's DAG to B's DAG. The question 
> is, how many edges, and which vertices should these edges 
> connect?

That doesn't seem right.

Surely you could write

     externalDependencies = [ someSubmodule.release ]

in your language-specific build tool, and have it convert to an 
equivalent import edge targeting the correct vertice in the 
standardized dependency graph?

It might be inconvenient in some cases (eg you have to manually 
tell your tool to import someSubmodule.release in release mode 
and someSubmodule.debug in debug mode), but it would still be 
infinitely more convenient and elegant than the current "multiple 
incompatible build tools per language, and shell/make scripts to 
link them together" paradigm.

Especially with the increasing usability of WebAsm, it would be 
nice to have a standard build model to link multiple modules in 
different languages together into a single wasm binary.

A standardized DAG model would also help making a project-wide 
equivalent to the Language Server Protocol. (I'm not convinced by 
BSP)


More information about the Digitalmars-d-announce mailing list