Re: JIT (was RE: [PHP-DEV] Coercive Scalar Type Hints RFC)

From: Date: Mon, 23 Feb 2015 14:14:14 +0000
Subject: Re: JIT (was RE: [PHP-DEV] Coercive Scalar Type Hints RFC)
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14  Groups: php.internals 
Request: Send a blank email to internals+get-83572@lists.php.net to get a copy of this message
Zeev, >> Maybe I'm ignorant of something, but isn't the only way you can begin to >> infer the type with real confidence is by having strict typed parameters ? > > Not at all. You can definitely infer lots of type information without any > type hints, strict or weak. bench.php wouldn't be 25x faster and Mandelbrot > would not be as fast as an equivalent C program if we couldn't infer types > without type hints. Take a look at it (Zend/bench.php) - much like you can, > as a human, figure out that $i is an integer, and that $recen is a float, > etc. - you can write code that will do that automatically (by taking a look > at the assigned values, at the operators which are used, etc.) In general. Yes, but mandel() from bench.php isn't generic code. It is a subset of valid code. One that wouldn't need any changes to move to strict mode. Additionally: "would not be as fast as an equivalent C program". I compiled mandel() using C (via PECL). It wasn't 25x faster, it was 75734.13830x faster (3000x with -O0). So no, you're way off from C speed. > If you haven't, please read my reply to Jefferson from yesterday: > marc.info/?l=php-internals&m=142463029832159&w=2 > It illustrates the point as to why not only are strict types not necessary > to do type inference, they also don't provide you with additional data that > can help you generate better code *assuming the same input source code*. > The bets are off if you change your code and compare how the changed version > runs in the Strict mode and the unmodified one runs in Coercive. But if you > take the modified code and run it on both Strict and Coercive - you can > reach the same results (except for the obvious, intentional functionality > differences). Again, please make it clear to people that you're talking about special cases of userland code, where the rest of us are talking about general cases. Anthony

« previous php.internals (#83572) next »