Proposed improvements to the separate compilation model
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Jul 23 15:47:32 PDT 2011
On 7/23/11 5:34 PM, Vladimir Panteleev wrote:
> I was going to suggest something like this, but without creating the
> dependency on a 3rd-party build tool. I mentioned in another thread how
> DMD shouldn't touch the .di file's mtime. A better idea is to not
> attempt to overwrite the file at all if the generated .di is identical
> to the old one.
That's a must at any rate, and should be filed as an enhancement
request. The compiler should generate filename.di.tmp, compare it
against filename.di (if any), and then either remove the .tmp if
identical or rename it forcefully to filename.di if different. That's a
classic in code generation tools.
> Yes, this is a hack, but it's not the only solution. Aside writing a
> build tool, as you mentioned, I believe many organizations include
> automatic tests coupled with source control, which could easily detect
> check-ins that change .di files.
>
> Yes, neither of the above are "proper" solutions. But, unless I've lost
> track of something, you're trying to justify a solid amount of work on
> the compiler to implement the "proper" solution, when the above
> alternatives are much simpler in practice. (If you have more
> counter-arguments, I'd like to hear them.)
I don't think at all these aren't proper. As I said, people are willing
to do crazy things to keep large projects sane. The larger question here
is how to solve a failure scenario, i.e. what can we offer that senior
engineer who fixes the build when the .di files are not in sync anymore.
>> But wait, there's less. The programmers don't have the option of
>> grouping method implementations in a hierarchy by functionality (which
>> is common in visitation patterns - even dmd does so). They must define
>> one class with everything in one place, and there's no way out of that.
>
> Sorry, I don't understand this part. Could you elaborate?
A class hierarchy defines foo() and bar(). We want to put all foo()
implementations together and all bar() implementations together.
Andrei
More information about the Digitalmars-d
mailing list