"I told you so": noreturn sucks a leech and has virtually no utility

Timon Gehr timon.gehr at gmx.ch
Fri Oct 15 22:15:35 UTC 2021


On 10/15/21 11:48 PM, H. S. Teoh wrote:
> On Fri, Oct 15, 2021 at 01:13:29PM -0400, Andrei Alexandrescu via Digitalmars-d wrote:
>> It has been predicted by several folks that noreturn has very limited
>> utility and a variety of weird corner cases that will cause a hecatomb
>> of complications in the language, the standard library, and the
>> implementation.
> 
> Besides its weird name (it's really a bottom type than anything else;
> calling it noreturn is somewhat misleading), what exactly is wrong with
> it?
> 
> 
> T
> 

- What's in DMD is an incomplete implementation of DIP 1034, often 
resulting in ICEs.
- It gives more static information to the compiler, exacerbating the 
issue of dead code warnings in generic code.
- Existing template constraints sometimes don't deal with the new type 
correctly.
- It implicitly converts to everything, so you can have ambiguous 
overloads:

```d
void foo(int x){ }
void foo(string x){ }

void main(){ foo(assert(0)); }
```

I suspect that's ultimately the underlying issue why 
isInputRange!(noreturn[]) was false. (noreturn[] was treated as an 
autodecodable string due to some questionable design decisions in 
Phobos, but then it was not clear which overload of `decode` to use. Is 
`noreturn[]` encoded in utf-8 or utf-16? The answer is both.)


More information about the Digitalmars-d mailing list