Walter Bright wrote:
Andrei Alexandrescu wrote:
In my approach they are laid as you see them, which I find very well-organized.


There is no duplication in:
[snip]

I said there's either duplication or complication.

But there's no hard and fast rule here, and since you are doing the actual work, I defer to your judgment on those cases.

Great, thanks!

While individual details vary, having personality modules for an os offers some nice advantages:

1. It's pretty clear what is happening for each system.

Not clear to me. It's happened to me more than once to fix a function without knowing that it's version()ed (your fault: you didn't indent it) and that there's a corresponding Windows function some miles away.

To me it's much clearer to have all specializations of a given piece of functionality close to one another. They'd naturally tend to converge, not diverge.

2. An expert on OSA can work on the OSA implementation without risking breaking the OSB implementation for which he had no expertise.

Ok.

3. By looking at which files changed, you can tell which OS support got updated and which didn't.

I never look... :o)

4. Porting to a new platform is easier as you've got a list of personality modules that need to be created, rather than version statements threaded through the file contents.

No. This is where your point gets destroyed. Unittests should dictate what must be done for porting to a new platform. Your approach forces either duplicate unittests, or collector files that add clutter.

5. The "else" clause in OS version statements tend to be wrong when porting to a new system, meaning that each version has to be gone through manually - overlooking one doesn't always create an obvious error.

I try to avoid else. I want to implement setenv on Windows, I prefix it with Windows. I want to implement it on Posix, I prefix it with Posix. Then I write one unittest. Then when a new OS comes, setenv won't be found so the unittest can't run. Problem solved *much* better.

I think the std.core.sys.* modules illustrate the advantages nicely, especially considering the former kludge-fest bug-ridden way it was done. The core.stdc.stdio still needs some work in this regard, however.

I don't know about that.


Andrei

Reply via email to