[dmd-beta] 64 bit beta for Linux

Jonathan M Davis jmdavisProg at gmx.com
Sun Feb 6 18:01:34 PST 2011

On Sunday 06 February 2011 17:44:31 Jason House wrote:
> On Feb 6, 2011, at 6:58 PM, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > You really shouldn't be compiling with ddoc enabled unless you're
> > building the documentation. There are just too many cases where you need
> > separate declarations for ddoc - often because of differences between
> > OSes. There are cases where the ddoc version is different _on purpose_.
> > In the case of std.file.DirEntry.isDir, it's const on Windows because it
> > can be. But because it can't be on Linux, the ddoc version doesn't list
> > it that way. Now, maybe it's on negligble benefit to have isDir const on
> > Windows given that it can't be on Linux, but there are definitely cases
> > where ddoc is forced to be different from a particular OS' version of a
> > declaration, simply because that declaration is different on different
> > systems.
> > 
> > Do _not_ expect your code to work if you compile with ddoc enabled.
> Such requirements feel like a failure of design. Are there any lessons
> learned from these kinds of problems? I'm sure Walter did not intend
> separate ddoc versions.

Then why does version(D_Ddoc) even exist? It's _built in_. And honestly, I don't 
know how else you could do it. In cases such as when a function only exists on 
one OS, you _must_ use version(D_Ddoc) if you want it to show up on the 
documentation when generating it on other OSes. I don't know how it could be 
designed otherwise without doing something drastically different with ddoc.

Granted, the situation is not entirely ideal, but I don't see any way around it 
without just plain doing ddoc differently. Fortunately, the need for 
version(D_Ddoc) blocks is relatively rare, but it definitely happens. And it 
wouldn't surprise me at all if it happens _more_ in Phobos as Phobos' 
documentation is fixed so that it builds on _all_ platforms instead of just 
Windows as it has in the past. So, Phobos at minimum has this problem and can't 
get around it. A properly documented druntime would be rife with the problem.

It's quite possible (even likely) that most D projects won't have the problem, 
because they won't be writing functions which are OS-specific, and they won't be 
trying to massage their documentation to look better in version(D_Ddoc) blocks, 
but there _will_ be projects with the problem. druntime (assuming that it was 
properly documented - which it isn't) and Phobos definitely have the problem.

So, yes, perhaps it's a design flaw in ddoc. But I don't know how it would be 
fixed. On the whole, it works quite well, and while it's not exactly great that 
building with -D doesn't necessarily generate valid code and so you need two 
separate builds for  the code and the documenation, I don't think that it's all 
that big a deal. D builds quickly, and other documentation systems such as 
doxygen already have to be done as separate builds. The fact that ddoc is built 
into the compiler is a big boon, even if you really should be running the ddoc 
build as a separate build.

- Jonathan M Davis

More information about the dmd-beta mailing list