On Saturday, 25 August 2018 at 20:52:06 UTC, Walter Bright wrote:
You want to remove autodecoding (so do I) and that will break
just about every D program in existence. For everyone else,
it's something else that's just as important to them.
I wanted to get rid of autodecode and I even offered to test it
on my string heavy code to see what breaks (and maybe write
guidelines for the transition), but somehow the whole idea of
getting rid of autodecode was silently abandoned. What more could
I do?
I am fully aware of the fact that it's always something else to
someone else. But you can have a list of common sense priorities.
For example, fast and efficient string handling should be up
there, because in times of data mining and machine learning (cf.
translation tools) string handling is _very_ important.
My suggestion is
- breakage only where it is absolutely necessary
- new features as opt in but not as breaking features
- new versions of dmd should be more tolerant of older code. Say,
let's introduce a _guaranteed_ backwards compatibility of at
least N versions. In this way one could work with the latest
version (and benefit from new features, bug fixes, optimizations)
and bit by bit upgrade old code as you go along.
- maybe introduce a feature freeze for a while and have a poll
about which features are really being used on a day to day basis.
In this way you can spend time on fixing stuff that is really
needed instead of wasting time on features that are not really
used that often (as seems to be the case with @safe)
- stick to a list of clear goals instead of taking on board
random requests, interesting as they may be. In other words: more
focused work, harden your heart a little bit ;)
For example, Shachar wants partially constructed objects to be
partially destructed, a quite reasonable request. Ok, but
consider the breakage:
struct S {
~this() {}
}
class C {
S s;
this() nothrow {}
}
I.e. a nothrow constructor now must call a throwing destructor.
This is not some made up example, it breaks existing code:
https://github.com/dlang/dmd/pull/6816
If I fix the bug, I break existing code, and apparently a
substantial amount of existing code. What's your advice on how
to proceed with this?
I have no opinion on this. But it's indicative of the way D is
being developed atm. A half baked feature (partially constructed
objects with no partial destructor) that if you fix it, breaks
existing code. But what for was it introduced at all and why
wasn't it thought through properly right from the start?
See if I donate (a humble amount of) money to the D foundation I
don't want to see it used on experimental container library
optimizations. I want it to be spent on D being turned into a
sound and stable language with certain guarantees.