On Fri, 5 Apr 2019 at 09:57, Robert Hickman <robehick...@gmail.com> wrote:
> > > > For instance: > > > > function foo(): type nothrow { > > throw new SomethingException; > > } > > Would it be possible to analyse the call graph at compile time > (bytecode generation) and then trigger a fatal error? It wouldn't be > possible for variable functions/methods though. A separate static > analyser could do the same thing. > Yes, I think we are rapidly approaching the limit where to make the language stricter, we need an official static analysis tool, like Hack has, rather than trying to do everything at run-time. It might even be possible to build this into OpCache somehow, so that if you pre-analyse your code, it will skip runtime checks that it can prove will never fail (e.g. return type annotation on a function that always returns literals). The tricky part is that PHP is a highly dynamic language, so there's a lot of cases where the analysis can only return "maybe". My understanding is that this is what a lot of the work on Hack is doing: creating a language which looks a lot like PHP, but doesn't have as many ambiguous cases which can't be analysed statically. Regards, -- Rowan Collins [IMSoP]