D is dead
David Nadlinger
code at klickverbot.at
Thu Aug 23 22:12:17 UTC 2018
On Thursday, 23 August 2018 at 21:31:41 UTC, Walter Bright wrote:
> My personal opinion is that constructors that throw are an
> execrable programming practice, and I've wanted to ban them.
> (Andrei, while sympathetic to the idea, felt that too many
> people relied on it.) I won't allow throwing constructors in
> dmd or any software I have authority over.
Throwing constructors are fundamental for making RAII work in a
composable fashion.
If constructors are not allowed to throw and you want to avoid
manually creating a "uninitialized" state – which is error-prone
and defeats much of the point of an RAII strategy –, all
dependencies need to be injected externally, that is, constructed
independently and then passed into the constructor. Sometimes,
inversion of control is of course the right call – cf. the hype
around DI –, but sometimes you'd rather cleanly abstract the
implementation details away.
Banning them from the language only pushes the complexity of
handling semi-constructed objects into ad-hoc user code
solutions, which I'd argue is worse in terms of usability and
potential for bugs.
I suppose you view this as advantageous because you place more
weight on the language not having to explicitly deal with this
scenario in the text of the specification?
— David
More information about the Digitalmars-d
mailing list