Proposed improvements to the separate compilation model
Steven Schveighoffer
schveiguy at yahoo.com
Mon Jul 25 09:19:38 PDT 2011
On Fri, 22 Jul 2011 18:06:19 -0400, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> A chat in IRC revealed a couple of possible improvements to the
> development scenario in which the interface file (.di) is managed
> manually and separately from the implementation file (.d).
I have mixed feelings on this proposal.
On one hand, one of the best parts of D over C++ is it's module system.
No more #ifdef __thisfile_included crap, and implementations just sit
right where they are defined. My concern with such an improvement is that
it would encourage people (especially C++ coders) to unnecessarily split
their implementation from the definition. I think there have been at
least 2 or 3 people ask how to do this in D. I really like that
implementation and definition are all in one file, and cannot be out of
sync (a common problem with C++). Already di files allow for these
problems to creep back in, but I understand it's a necessary evil.
On the other hand, the duplication of definitions and functions for
inlining when you do want to use .di files is a real problem, and this
would seem to address it. And as you point out, it doesn't eliminate the
existing solution.
Plus, D does not suffer from multiple-personality syndrome like C++ can.
For example, including a file more than once with different macro
definitions to alter the impact of the include file.
As a criticism though, I don't really like this:
module std.foo;
import std.foo; // huh?
I know we don't want to add too much to the syntax, but can we make that
line a bit more descriptive? and also less redundant? Suggestion:
module std.foo;
import interface; // imports the .di file that corresponds to std.foo.
I know that's keyword abuse, but it's kind of accurate ;)
-Steve
More information about the Digitalmars-d
mailing list