php7 hhvm and co
TRANSCRIPT
PHP7, hhvm & co
Pierre Joye@[email protected]://www.slideshare.net/pierrej
PHP Core developerContributors to numerous OSS projects
Portability fan
PHP7, hhvm & coAnatol Belski@[email protected]#php.pecl on efnet#winphp-dev on freenode
PHP 7.0 release managerPHP core developer
OSS guy
PHP7, hhvm & co
Features
• Rewamped Engine• True 64bit support• Large string and LFS (Large file support)• Consistent variables syntax• Error exception instead of fatal error• Scalar type declarations• Zero cost asserts
PHP7, hhvm & co
Features
• Secure RNG• PHP4 constructors deprecated• JIT enabled PCRE• Removed ext/mysql, ext/ereg and more• New ?? Operator• New JSON parser• Many other features, a lot already target 7.1
PHP7, hhvm & co
Error exception
https://wiki.php.net/rfc/catchable-call-to-member-of-non-object
<?php try { $x = null; var_dump($x->method());// The exception class name is EngineException// in alpha1} catch (Error $e) { // pass} echo "Alive\n";
PHP7, hhvm & co
Scalar Type Declarations
<?phpdeclare(strict_types = 1); function add(int $a, int $b) : int { return $a + $b;} $x = add(1, 2);
// The exception class name TypeException// in alpha1$y = add(0.1, 0.2); // TypeError exception
https://wiki.php.net/rfc/scalar_type_hints_v5
PHP7, hhvm & co
Null Coalesce Operator (??)
<?php$username = $_GET['user'] ?? 'nobody'; $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Method/function call$model = Model::get($id) ?? $default_model;if (($model = Model::get($id)) === NULL) { $model = $default_model; }
// Chained$x = NULL; $y = NULL; $z = 3; var_dump($x ?? $y ?? $z);
https://wiki.php.net/rfc/isset_ternary
PHP7, hhvm & co
PHP Language Specificationhttps://github.com/php/php-langspec
PHP7, hhvm & co
QB<?php class OilPaintFilter {
/** @var int32 */ public $levels = 25;/** @var int32 */ public $filterSize = 5;/** * @engine qb * * @param image $dst * @param image $src * * @local float32[*][r,g,b,a] $bin * @local float32 $max_intensity * @local int32 $(current_index|max_index) * @local int32 $(filter_x|filter_y|filter_offset) * @local int32 $(x|y|x_limit|y_limit) * @local int32 $(width|height) * @local float32[r,g,b,a] $pixel * @local float32 $multiplier */public function filter(&$dst, $src) {…
PHP7, hhvm & co
QB
<?php function calc($n, &$a) {
$b = 18;while($n) {
$a = $b * $b * $b * $b;$n--;
}}$n = 5000000;$a = 0;calc($n, $a); $end = microtime(true);
PHP7, hhvm & co
QB
Source: http://php-qb.net/index.php/2-uncategorised/27-comparing-performance-in-qb-with-hhvmSee http://benchmarksgame.alioth.debian.org/u32/performance.php?test=spectralnorm or other
PHP7, hhvm & co
Zephirnamespace MyLibrary; class Filter {public function alpha(string str) {
char ch;string filtered = "";for ch in str {
if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
let filtered .= ch;}
} return filtered; }}
PHP7, hhvm & co
PHP Alternative Implementations
• HHVM (native code)• Recki-ct (native code)• Phalanger (.net engine)
PHP7, hhvm & co
Recki-ctphp 5.5 Recki-CT hhvm 3.2 hippy-c qb
simple() 139.63357 1.00000 8.30447 7.65693 8.35018
simplecall() 38.99476 FAIL 1.32552 1.00000 FAIL
simpleucall() 54.02041 1.00000 3.52439 1.51072 47.91090
simpleudcall() 52.14534 1.00000 3.75936 1.41614 47.55259
mandel() 21.26249 1.00000 2.03372 2.11208 FAIL
mandel_typed() 23.16553 1.00000 2.11128 2.09212 3.00061
mandel2() 24.43275 1.00000 2.57704 1.87802 FAIL
mandel2_typed() 23.79989 1.00000 2.90105 1.57193 7.11054
PHP7, hhvm & co
Recki-ctphp 5.5 Recki-CT hhvm 3.2 hippy-c qb
ary(50000) 1.39338 FAIL 1.00000 4.47888 FAIL
ary2(50000) 1.26952 FAIL 1.00000 2.28231 FAIL
ary3(2000) 5.96015 FAIL 1.70997 1.00000 FAIL
fibo(30) 39.48440 1.00000 1.60647 16.40883 FAIL
hash1(50000) 1.70014 FAIL 1.00000 3.27314 FAIL
hash2(500) 2.23648 FAIL 1.00000 1.30044 FAIL
heapsort(20000) 3.67800 FAIL 1.00000 4.96699 FAIL
PHP7, hhvm & co
Resources
• http://wiki.php.net/rfc/• http://zephir-lang.com/• http://
www.slideshare.net/ircmaxell/high-performance-php-phpnw
• https://github.com/google/recki-ct• http://
blog.ircmaxell.com/2014/08/introducing-recki-ct.html
• https://github.com/chung-leong/qb/wiki/Introduction
PHP7, hhvm & co
Resources
• https://wiki.php.net/rfc/phpng• https://wiki.php.net/rfc/abstract_syntax_tree• http://
hhvm.com/blog/6323/the-journey-of-a-thousand-bytecodes
• https://github.com/php/php-src/blob/master/UPGRADING
• https://github.com/php/php-src/blob/master/UPGRADING.INTERNALS
PHP7, hhvm & co
Resources
• http://phpdbg.com/• http://windows.php.net/qa/• http://qa.php.net/• http://ongr.io