June 06, 2015 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Atila Neves | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Atila Neves | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | 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 Re: Scaling rdmd up: build package at a time | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | 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 | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply