Re: ZEND_ARG_TYPE_INFO usage in core?

From: Date: Sat, 29 Apr 2017 21:06:44 +0000
Subject: Re: ZEND_ARG_TYPE_INFO usage in core?
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-98915@lists.php.net to get a copy of this message
On Sat, Apr 29, 2017 at 3:54 PM, Nikita Popov <nikita.ppv@gmail.com> wrote: > 1. In weak mode, arginfo type violations throw, while zpp violations warn > and return NULL. As such, adding arginfo types to existing functions is a BC > break. > 2. For methods in particular, prior to PHP 7.2, adding arginfo types was > also a BC break. This is no longer the case, as variance is now respected. > 3. Arginfo types for internal functions are enforced by the runtime. Because > the types are already checked by zpp, this is an unnecessary duplicate > check. Additionally, type-checking for internal functions is on the > slow-path (to the point there it uses a different opcode). While of course > this doesn't matter for some functions, in other cases type checking / > parameter parsing is the main overhead of a function (which is why fast zpp > was introduced in the first place). I'm sure we do not want to have > decisions on whether to add or not add arginfo for a particular function > based on whether it would have a significant performance impact. > > The solution to these problems is simple: Stop checking arginfo types for > internal functions, just use them for reflection / inheritance checks, but > leave the actual type-checking to zpp. However, this doing this will also > change current behavior due to point (1.), as in weak-mode some type errors > that are currently throwing would be reduced to warn + null. Personally I > don't have a problem with that, as I'd consider this a compatible change, > and it would make type-checking for internal functions consistent. > Ugh.... This is why we can't have things. I'm with you on personally being fine with not enforcing ARG_INFO hints in the runtime for internal functions (leaving it to zpp), but as you say that doesn't work due to #1. Something for 8.0, I suppose. -Sara P.S. Or to quote a common acquaintance: Who uses weak mode? Weak people, that's who.

« previous php.internals (#98915) next »