[dmd-internals] dmd commit, revision 657

Walter Bright walter at digitalmars.com
Thu Sep 2 23:40:46 PDT 2010



Brad Roberts wrote:
> On 9/2/2010 3:00 PM, Walter Bright wrote:
>   
>> Brad Roberts wrote:
>>     
>>> The major wish I have is that walter would start using the public test suite
>>> rather than the private one.  I'm working on getting the public one to work on
>>> windows -- making good progress, it runs most of the tests now.
>>>
>>>   
>>>       
>> It already works fine on Windows, and I disagree that it needed reengineering so
>> that it wouldn't.
>>     
>
> If you honestly think what I did was engineer it so that it wouldn't work on
> windows, we need to talk.

No, I don't mean that at all, and apologize for implying that. I meant 
the current setup is simple and effective and works on all the supported 
platforms.

I should add that Andrei agrees with you about this and disagrees with 
me strongly. So keep that in mind when you read the following.

>   It needed reenginering for other reasons (probably
> incomplete, but this is off the top of my head and quickly written):
>
> 1) to use a single driver for all platforms rather than one for each that were
> never kept in sync -- an old argument you keep loosing
>   

Except that there is much customization from one platform to the next. 
Switches are different, commands are different, paths are different, 
extensions are different, generated files are different, etc.

Not sure I keep losing the argument. For example, Phobos1 used to have 
std.c.stdio loaded with version declarations for the different _iobuf's 
for each platform. The trouble was, when one updated one platform one 
tended to break the others. Even worse, adding a new platform meant 
someone would just cut & paste the info from some other platform, and 
assume it worked. This added a bunch of work for me as I had to go 
through and vet every declaration. Things got better when I separated 
out each platform into its own import. These problems resurfaced with 
druntime, which tries to do a lot using version declarations instead of 
separate platform files.

So yes, on the one hand you can add files to all platforms 
simultaneously. On the other, there's constant breakage of the platforms 
the updater didn't test on.

> 2) to run tests in parallel -- your attempts at doing that in your custom shell
> engine didn't work out terribly well
>   

I didn't spend that much time on the multithreading, either <g>. One 
problem was that the text output of the different threads got 
interleaved, a problem that multithreaded make also has. The other 
problem is that optlink must always run on core 0, meaning that 
multithreading the test suite on Windows does not actually speed it up. 
Until I can fix that problem with optlink, it wasn't worth the effort to 
continue working on parallelizing the tests.

I've also got things set up now so that with one command I can fire off 
4 windows, and have each window ssh'ing into a different machine and 
running the build & test suite (Windows, Linux, OSX and FreeBSD). Those 
obviously all run in parallel (!). I can watch them all run on one screen.

> 3) to separate test driver output from test output -- spewing all that output to
> the screen is a mess.  Tests should have a single line of output: name of test
> and pass or fail
>   

I guess I never had any trouble noticing when one failed and which one 
it was.

> 4) to make it easy to run subsets of the test suite, specifically easy to run
> the one that's failing.
>   

I'm not sure what the problem is with typing:

   dmc test23


> 5) to run _all_ of the test suite -- note the 4 bugs I filed based on the
> failure tests that hadn't been run or would have caught a couple regressions.
>   

That failing was mine in not keeping the suite updated, not a fault in 
the methodology.

> Also of potential interest.. the biggest problem I've had with the windows
> support is switching from / to \ based on os since optlink can't handle it.  It
> looked like everything else was happy -- though dmd might have had some issues,
> I didn't try to isolate the issue between the two.  The o vs obj and nothing vs
> .exe were trivial.  Support for \ is a pain in the ass.. having to \\ in places
> -- right now something somewhere is retaining both \\'s rather than treating it
> as one escaped.  I got frustrated with that and your post so I set aside the
> project for the evening.
>   

The \ issue is always a problem. I'm always running into windows 
software, including Microsoft software, that doesn't recognize /.

> I'll finish it tomorrow or this weekend, maybe.
>
>
>   


More information about the dmd-internals mailing list