Compilation strategy

H. S. Teoh hsteoh at quickfur.ath.cx
Sat Dec 15 09:59:15 PST 2012


On Sat, Dec 15, 2012 at 06:31:17PM +0100, RenatoUtsch wrote:
> On Saturday, 15 December 2012 at 17:05:59 UTC, Peter Alexander
> wrote:
> >On Saturday, 15 December 2012 at 16:55:39 UTC, Russel Winder
> >wrote:
> >>A quick straw poll.  Do people prefer to have all sources compiled
> >>in a single compiler call, or (more like C++) separate compilation
> >>of each object followed by a link call.
> >
> >Single compiler call is easier for small projects, but I worry
> >about compile times for larger projects...
> 
> Yes, I'm writing a build system for D (that will be pretty damn
> good, I think, it has some interesting new concepts), and compiling
> each source separately to an object, and then linking everything
> will allow easily to make the build parallel, dividing the sources
> to compile in various threads. Or the compiler already does that if
> I pass all source files in one call?
[...]

I find that the current front-end (common to dmd, gdc, ldc) tends to
work better when passed multiple source files at once. It tends to be
faster, presumably because it only has to parse commonly-imported files
once, and also produces smaller object/executable sizes -- maybe due to
fewer duplicated template instantiations? I'm not sure of the exact
reasons, but this behaviour appears consistent throughout dmd and gdc,
and I presume also ldc (I didn't test that). So based on this, I'd lean
toward compiling multiple files at once.

However, in very large project, clearly this won't work very well. If it
takes half an hour to build the entire system, it makes the code -
compile - test cycle very slow, which reduces programmer productivity.

So perhaps one possible middle ground would be to link packages
separately, but compile all the sources within a single package at once.
Presumably, if the project is properly organized, recompiling a single
package won't take too long, and has the perk of optimizing for size
within packages. This will probably also map to SCons easily, since
SCons builds per-directory.


T

-- 
They pretend to pay us, and we pretend to work. -- Russian saying


More information about the Digitalmars-d mailing list