On 28 November 2012 03:40, deadalnix <deadalnix@gmail.com> wrote:
On Wednesday, 28 November 2012 at 00:07:42 UTC, bearophile wrote:
Walter Bright:

It is unbelievably frustrating for people to have their code break with each new release, have older projects all invalidated, with few willing to do the maintenance work to bring them back on line.

I am still converting some of my D1 code to D2, plus I have lot of D2 code. Since many months I have stopped downloading official dmd releases because the amount of breakages in my D2 code between a version and the successive one was too much large. DMD 2.061 has so many changes and improvements that it will require several changes in everyone D2 code.

To avoid performing such large amount of changes I now compile dmd every two or three days, and I have scripts that compile all my D2 programs and report the breakages. This way I fix a small amount of breakages at a time in my D2 code, this is simpler.

Most of those breakages are caused by bug fixings that reveal bugs in my D2 code (example: since recently throwing constructors accepted a nothrow tag, and I have many more examples). But I am willing to perform this maintenance work because they improve my future D2 programming and code.

If we add to those bug-fixing-changes some breakage caused by design changes, this is not going to make my live significantly worse, it's just one more breakage among several others.


Don't you think that this whole situation is due to adding feature after feature in an unstabilized mess ?

Not really. I haven't seen any problems in any new stuff since I've been around.

Almost all the issues I encounter stem from the type system (like the alias/builtin type thing discussed), tuples (value/expression/type tuples? what is the syntax to identify these? what are they exactly?), is()/__traits not identifying things cleanly (strange workarounds to identify seemingly trivial details)... and ref.

Every one of these things was in the language before I started using it, so at least to me, they feel like old features that have just always been there...


I mean, how the fact that a nothrow constructor can throw can be explained in another way (to use your example) ? A feature in that state should have reached any release, ever !