Hi Rasmus,
> This parameter type widening RFC, I didn't know about, but I have a remark. > > The feature, as implemented, will allow accidental omission of type-hints, > will it not? > Yes, correct. > Previously, the implements keyword guaranteed a correctly type-hinted > implementation - it's now possible to (purposefully, obviously, in certain > rare cases) omit type-hints by accident, making the implements keyword much > less (or not any) of a guarantee that the interface is implemented > correctly. > The interface will just work correctly, what's the actual problem you're seeing? > The addition of an explicit "mixed" or "any" pseudo-type would have made > this possible, without losing the guarantee that the implements keyword > used to provide - that is, it would have been possible to have this feature > for the few cases where it's useful, without affecting safety in the > majority of other cases where it's not. > > I feel like this feature takes a pretty dangerous shortcut by simply > removing a constraint check that we used to have - in favor of supporting a > few rare cases, we removed a guarantee that interfaces and the > implements-keyword has always provided. > > Those rare cases could have been supported in a safe manner by introducing > a "mixed" or "any" type, which would have made the use of this feature > explicit - which would have removed the risk of accidental omission of > type-hints in the majority of cases. > Unfortunately, that doesn't work for the second (maybe even primary) use case of the RFC: Adding types to a class isn't a BC break anymore with the RFC, as child classes will just widen the type and need explicit checks as before. Without the RFC or with a version with "mixed" or "any", method signatures will be incompatible again and thus be a BC break when adding types to the base class. "mixed" has been mentioned in the original discussion, but there was not a lot of interest and mostly explicit disinterest. > The RFC page doesn't link to any discussion, and the Github thread was shut > down after some negative remarks. > > I didn't see a discussion or a vote here on internals - did I miss > something? Where or how did this get discussed and passed? Are these > discussions happening somewhere else besides internals now? - Original discussion: https://externals.io/thread/505 - Vote announcement: https://externals.io/thread/613 - Vote resumption after internals having issues: https://externals.io/thread/619 Regards, Niklas