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