When will D1 be finished?

grauzone none at example.net
Mon May 11 17:24:49 PDT 2009


Walter Bright wrote:
> Derek Parnell wrote:
>> D1 is not complete. That has nothing to do with the bugs it still 
>> contains.
>> It is not complete because there is documented functionality for which no
>> implementation has yet been attempted. This assumes that the 
>> documentation
>> is complete and accurate.
>>
>> The D-Team should be dedicating resources to ensuring that the D1
>> implementation and D1 documentation are in alignment with each other. By
>> dedicating, I mean that is all that this D1-subteam of the D-Team work 
>> on -
>> no D2 work at all. Any D1 fixes that need to be propagated to D2 
>> should be
>> done by the D2-subteam. Priority should be given to getting D1 completed.
> 
> Please help me understand - why is contract inheritance preventing you 
> from using D1? Exported templates haven't stopped anyone from using C++ 
> compilers from Microsoft/Sun/Intel/etc. I don't think anyone has made a 
> feature complete C99 compiler, either.

That's mainly because the language was designed by a committee, and not 
by a compiler author and his followers, isn't it? But you have full 
control about the language specification. If there are D1 features 
you're not going to implement, they simply should be removed from the 
language specification.

>> Unless of course, D1 is just a prototype for D2 and will thus be 
>> discarded
>> the instant that D2 is released.
>>
>> What are the support plans for D1 after D2 is released? (I consider 
>> current
>> D2 releases as beta editions at best).
> 
> D1 will continue to be supported as long as there is a significant 
> userbase for it. I've said this many times.
> 
> I also fail to understand this perception that D1 is abandoned. Every 
> month an update is released for it that fixes a load of problems. D1 has 
> led the way in ports to other platforms.
> 
> What isn't being done with D1 is adding a boatload of new features - 
> because that would destroy any pretense of it being a stable release.

That's because we don't really know what we want. You gave us D1, but it 
turns out it's not really what we expected it to be.

On one side, D1 users want a stable language. That means they don't want 
to update their code with each compiler release. I think D1 reached this 
goal. Or, at least it's getting better.

On the other hand, we don't want to rely on a dead end. We don't want to 
put up with some trivial issues, that were solved in D2, but will stay 
in D1 forever. For example, D1 will never be able to support proper 
serialization, just because it lacks __traits(). That specific thing 
would (probably) be easy to port back to D1, and it wouldn't break any 
existing code.

I know, you're saying introducing new features goes against stability. 
But it makes D1 frustrating to use. Everyone feels it's a dead end, and 
that you shouldn't rely on it. In the end, it might be rock-stable, but 
nobody wants to use it. Because it will still have some problems, which 
were solved in D2. D1 will simply vanish in some time.

Now you could say, "If you want new features, use D2. If you want 
something stable, use D1. But the gap is simply too big: do you stick 
with the dead end D1, or with the heavily changing D2?

The worst thing is, you can't really interface between D1 and D2. So you 
can't use it, if you're using the wrong D version. Or the library tries 
to work under both D versions, which makes maintenance harder and bloats 
up the code. This just causes endless pain.

I propose the following:

Make D1 open for new features again. As soon as backward compatible 
features get mature and stable enough in D2, add them to D1 too. To 
prevent regressions, use the test suite. A new version of the compiler 
will only be released, if the test suite doesn't report any new regressions.

D2 will be bleeding edge. It will not need to care about _any_ breakages 
new versions might introduce. Right now, this isn't really possible, 
because there are people using D2 for "useful" stuff (instead of using 
D1). With the change, D2 would be a truly experimental testbed, and not 
the pseudo-stable "next generation D" it is today.

 From time to time, allow breaking changes to D1. It isn't really worth 
to maintain ancient versions of the compiler, like D1 will be if D3 is 
out. If someone doesn't want to deal with the breakages, he has to use 
an old compiler version. A steady transition in small increments is 
probably still better than requiring a user to do a D1 -> D2 sized 
switch all some years. While the former may require annoying but trivial 
fixes to the source code, the latter will always be a nightmare.

But I don't really know what to do with breaking changes, that are just 
too big. Like const or the new threading model. Everyone, you just 
wasted your time reading this posting.



More information about the Digitalmars-d mailing list