On Tue, 30 Mar 2021 at 13:51, Ilija Tovilo <tovilo.il...@gmail.com> wrote:
> Hi Matthew > > > I like the proposal. I also support the covariance. > > > > One question though. > > The RFC mentions possible future use of "nothing" as a bottom type for > > parameters in generics. This makes a lot of sense to me. Even without > > generics, it could be used for parameters in abstract methods. > > > > So why not already introduce "nothing" as the universal bottom type, and > > use it instead of "noreturn"? > > Can "noreturn" do anything that "nothing" can't? > > I'm also a little confused by this statement. The exact wording from the > RFC is: > > > Arguments for never: ... It's a full-fledged type, rather than a keyword > used in a specific situation. A far-in-the-future generics proposal could > use never as a placeholder inside contravariant generic types. > > From what I understand, in Hack noreturn and never are both > full-fledged types. Nothing is a bottom type while noreturn is not. > Since in your proposal noreturn would also be a bottom type there's no > reason why it couldn't be used in covariant or contravariant generic > parameters. > > Please correct me if I'm missing something. > > Ilija > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php > > In Hack it's a bit confusing. I think the Hack team ultimately decided that "nothing" was a better name for the bottom type than "noreturn", and confusingly introduced one while the other was still active. They have a long-term plan to deprecate "noreturn" in favour of "nothing" and stop supporting the former name, though it's unclear when that might happen.