June 06, 2015
On Saturday, 6 June 2015 at 19:44:15 UTC, Andrei Alexandrescu wrote:
> On 6/6/15 11:47 AM, Jacob Carlborg wrote:
[...]
>> I mean that rdmd should compile all files that has changed
>> including its dependencies, no more, no less. It should compile all
>> these files in one go.
>
> Yah, that's the traditional C-style module-at-a-time approach.

I think the traditional approach would be to compile modules separately, not "all [...] in one go".

> Somewhat paradoxically, for D it's faster to compile several files at once, even though not all were affected by the change.
>
> So in the package-at-a-time approach if at least one module in a package is affected by a change, the entire package gets rebuilt.

This may beat separately compiling modules that needs rebuilding. But it doesn't beat compiling all of them at once, does it?

My understanding of things:

Current behaviour: When any module changed, pass all source files to one dmd invocation.

The makefile approach: Separately recompile every module that needs rebuilding; then link the new object files with the cached ones.

Your proposal, variant 1: For every module that needs rebuilding, separately recompile its whole package; then link the new object files with the cached ones of other packages.

Variant 2: For every module that needs rebuilding, determine what package it belongs to; then pass the source files of those packages and the cached object files of other packages to one dmd invocation.

The seemingly obvious thing to do: Pass the source files that need rebuilding and the object files of other modules to one dmd invocation.
June 06, 2015
On 2015-06-06 22:27, anonymous wrote:

> The seemingly obvious thing to do: Pass the source files that need
> rebuilding and the object files of other modules to one dmd invocation.

That's what I've been thinking all along and trying to say.

-- 
/Jacob Carlborg
June 06, 2015
On Saturday, 6 June 2015 at 21:10:22 UTC, Jacob Carlborg wrote:
> On 2015-06-06 22:27, anonymous wrote:
>
>> The seemingly obvious thing to do: Pass the source files that need
>> rebuilding and the object files of other modules to one dmd invocation.
>
> That's what I've been thinking all along and trying to say.

I don't think I understand. Where would these object files come from unless you're doing per-module compilation, C-style?

What I've already implemented is variant 1 mentioned before.

Atila
June 06, 2015
On 6/6/15 1:27 PM, anonymous wrote:
> The seemingly obvious thing to do: Pass the source files that need
> rebuilding and the object files of other modules to one dmd invocation.

Doesn't work because no separate object file per source is being produced. -- Andrei
June 06, 2015
On Saturday, 6 June 2015 at 21:24:05 UTC, Atila Neves wrote:
> I don't think I understand. Where would these object files come from unless you're doing per-module compilation, C-style?

Huh, I somehow assumed dmd would spit out multiple object files when given multiple source files. Since that's not so, variant 2 and the "seemingly obvious thing" are seemingly not possible.

But if dmd could be made to produce multiple object files ...
(I have no idea if that's doable.)
June 06, 2015
On 6/6/15 2:42 PM, anonymous wrote:
> But if dmd could be made to produce multiple object files ...
> (I have no idea if that's doable.)

Not advantageously. -- Andrei
June 07, 2015
On 2015-06-06 23:24, Atila Neves wrote:

> I don't think I understand. Where would these object files come from
> unless you're doing per-module compilation, C-style?
>
> What I've already implemented is variant 1 mentioned before.

If you compile multiple files with DMD without linking it will produce multiple object files:

$ ls
bar.d foo.d
$ dmd -c bar.d foo.d
$ ls
bar.d bar.o foo.d foo.o

-- 
/Jacob Carlborg
June 07, 2015
On 2015-06-06 23:41, Andrei Alexandrescu wrote:

> Doesn't work because no separate object file per source is being
> produced. -- Andrei

They're produced if you don't link.

-- 
/Jacob Carlborg
June 14, 2015
On Saturday, 6 June 2015 at 20:27:12 UTC, anonymous wrote:
> The seemingly obvious thing to do: Pass the source files that need rebuilding and the object files of other modules to one dmd invocation.

I implemented this. Preliminary pull request:
https://github.com/D-Programming-Language/tools/pull/170
1 2
Next ›   Last »