Php7 hhvm and co

61
PHP 7, HHVM & C #PHPKonf Istanbul Pierre Joye

Transcript of Php7 hhvm and co

PHP 7, HHVM & CO#PHPKonfIstanbulPierre Joye

PHP7, hhvm & co

Pierre Joye@[email protected]://www.slideshare.net/pierrej

PHP Core developerContributors to numerous OSS projects

Portability fan

PHP7, hhvm & co

Stats

PHP7, hhvm & co

Awesome new extension installer

https://github.com/FriendsOfPHP/pickle

PHP7, hhvm & co

What‘s going in the php world?

https://wiki.php.net/rfc/isset_ternary

PHP7, hhvm & co

PHP 5.32009 - 2014

PHP7, hhvm & co

PHP 5.4 and 5.5Security fixes only

PHP7, hhvm & co

PHP 5.42012 - 2015

PHP7, hhvm & co

PHP 5.52013 - 2016

PHP7, hhvm & co

PHP 5.6.11 is out!

PHP7, hhvm & co

5 + 1 = 7

PHP7, hhvm & co

6.6.6

PHP7, hhvm & co

PHP 7.0.0beta2 yesterday!

PHP7, hhvm & co

PHP 7.0 – Future is now

PHP7, hhvm & co

PHP 7.0 – speed++

PHP7, hhvm & co

LIES, DAMN LIES AND BENCHMARKS

PHP7, hhvm & co

PHP7, hhvm & co

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 instead of fatal error

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

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 (??)

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

Open & Public Specifications

Competions++

PHP7, hhvm & co

PHP7, hhvm & co

PHP7, hhvm & co

(Most) Focus on Speed

PHP7, hhvm & co

PHP7, hhvm & co

SPEED is NOT SCALE

PHP7, hhvm & co

SPEED is UX

PHP7, hhvm & co

Scale is Server SideArchitecture (Apps, Ops, Net, …)

PHP7, hhvm & co

My code sucks.

PHP7, hhvm & co

Yours too.

PHP7, hhvm & co

Steroids++

PHP7, hhvm & co

So?

PHP7, hhvm & co

PHP7, hhvm & co

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

Zephir

PHP7, hhvm & co

Zephir

Optimization & code generation

Compilation + optimization

Native execution

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

Zephir

<?php $filter = new MyLibrary\Filter();echo $filter>alpha("01he#l.lo?/1");

PHP7, hhvm & co

PHP Alternative Implementations

PHP7, hhvm & co

PHP Alternative Implementations

• HHVM (native code)• Recki-ct (native code)• Phalanger (.net engine)

PHP7, hhvm & co

PHP7, hhvm & co

HHVM

PHP Cache

Parser (AST in 7+)

HHVM Opcodes

Native Code

JIT ~

Cache

PHP7, hhvm & co

PHP7, hhvm & co

PHP

PHP Cache

Parser (AST in 7+)

OpCodes

PHP7, hhvm & co

Recki-ct

PHP7, hhvm & co

Recki-CT

PHP Cache

Parser (AST in 7+)

Recki IR

JIT~

Native Code

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://phpdbg.com/• http://windows.php.net/qa/• http://qa.php.net/• http://ongr.io• http://aka.ms/AzureCodeManiac2015