On Thu, 1 Apr 2021 at 04:56, Benjamin Eberlei <kont...@beberlei.de> wrote:
> This RFC is using the declaration of the return type, to specify that it > never returns. As such noreturn or never is a keyword a long the lines of > public or final, but it is not a return type. > > I don't think the argument for potential optimizations in Opcache to > eliminate dead code or allow IDEs to hint at dead code are valuable enough > to justify this change. > By this argument "void" should also be an attribute – there's no reason to hint a value that's not being returned. You'd write functions like [\Void] function foo() { ... } But we don't do that, because the wider programming language community has agreed that "void" is a type, and at compile-time PHP's engine can ensure that "void" functions do not return a value. "Noreturn"/"never" is also recognised as a type by the wider programming language community. It can be checked at both compile-time and run-time by the engine, as detailed in the RFC. Indeed, _no other return type makes sense in the context_. The type definitely felt awkward when I first started using it in docblocks, but after a while it started to make intuitive sense. Best wishes, Matt/Ondrej