On 16 July 2018 at 12:06, Arvids Godjuks <arvids.godj...@gmail.com> wrote:

> Basically, you went wrong when you proposed a switch that controlls
> language behavior. To add to that - a switch that probably is not
> controllable by code that is running.
>


While I agree with your general principle here, I would like to raise one
point in this proposal's favour, which is that PHP's type hints are
effectively assertions - if the value is not of the given type at that
point, an error is raised. Assertions are always something you turn off in
production builds, with a global switch, to the point of compiling the code
as though they don't exist, so it's not unreasonable to have a similar
switch to disable run-time type checks.

As Nikita points out, this is not true of non-strict scalar hints, so that
does raise a complication.

I was going to point to Dart as an example where type checks have been
implemented this way, but it seems that version 2 has replaced the "checked
mode" with stronger static analysis, and run-time checks are automatically
inserted only for cases where the safety can't be inferred.

This might actually be a more promising optimisation for PHP - perhaps
OpCache could mark certain code paths as type-safe (or maybe it already
does?) As an exaggerated example, this code only really needs to check the
value's type once, not four times:

function foo(Bar $bar): Bar {
   return $bar;
}
function test(Bar $bar): Bar {
    return foo($bar);
}
$something = test($something);

Regards,
-- 
Rowan Collins
[IMSoP]

Reply via email to