Top Banner
PHP 7, HHVM & CO Pierre Joye
58
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Php7 HHVM and co

PHP 7, HHVM & CO

Pierre Joye

Page 2: Php7 HHVM and co

PHP7, hhvm & co

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

PHP Core developerContributors to numerous OSS projects

Portability fan

Page 3: Php7 HHVM and co

PHP7, hhvm & coAnatol Belski@[email protected]#php.pecl on efnet#winphp-dev on freenode

PHP 7.0 release managerPHP core developer

OSS guy

Page 4: Php7 HHVM and co

PHP7, hhvm & co

Stats

Page 5: Php7 HHVM and co

PHP7, hhvm & co

What‘s going in the php world?

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

Page 6: Php7 HHVM and co

PHP7, hhvm & co

PHP 5.32009 - 2014

Page 7: Php7 HHVM and co

PHP7, hhvm & co

PHP 5.4 and 5.5Security fixes only

Page 8: Php7 HHVM and co

PHP7, hhvm & co

PHP 5.42012 - 2015

Page 9: Php7 HHVM and co

PHP7, hhvm & co

PHP 5.52013 - 2016

Page 10: Php7 HHVM and co

PHP7, hhvm & co

PHP 5.6.10 is out!

Page 11: Php7 HHVM and co

PHP7, hhvm & co

5 + 1 = 7

Page 12: Php7 HHVM and co

PHP7, hhvm & co

6.6.6

Page 13: Php7 HHVM and co

PHP7, hhvm & co

PHP 7.0.0alpha1 is out!

Page 14: Php7 HHVM and co

PHP7, hhvm & co

Awesome new extension installer

https://github.com/FriendsOfPHP/pickle

Page 15: Php7 HHVM and co

PHP7, hhvm & co

PHP 7.0 – Welcome in the Future

Page 16: Php7 HHVM and 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

Page 17: Php7 HHVM and co

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

Page 18: Php7 HHVM and co

PHP7, hhvm & co

Error exception instead of fatal error

Page 19: Php7 HHVM and co

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";

Page 20: Php7 HHVM and co

PHP7, hhvm & co

Scalar Type Declarations

Page 21: Php7 HHVM and co

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

Page 22: Php7 HHVM and co

PHP7, hhvm & co

Null Coalesce Operator (??)

Page 23: Php7 HHVM and co

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

Page 24: Php7 HHVM and co

PHP7, hhvm & co

PHP Language Specificationhttps://github.com/php/php-langspec

Page 25: Php7 HHVM and co

PHP7, hhvm & co

Open & Public Specifications

Competions++

Page 26: Php7 HHVM and co

PHP7, hhvm & co

Page 27: Php7 HHVM and co

PHP7, hhvm & co

Page 28: Php7 HHVM and co

PHP7, hhvm & co

(Most) Focus on Speed

Page 29: Php7 HHVM and co

PHP7, hhvm & co

Page 30: Php7 HHVM and co

PHP7, hhvm & co

SPEED is NOT SCALE

Page 31: Php7 HHVM and co

PHP7, hhvm & co

SPEED is UX

Page 32: Php7 HHVM and co

PHP7, hhvm & co

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

Page 33: Php7 HHVM and co

PHP7, hhvm & co

My code sucks.

Page 34: Php7 HHVM and co

PHP7, hhvm & co

Yours too.

Page 35: Php7 HHVM and co

PHP7, hhvm & co

Steroids++

Page 36: Php7 HHVM and co

PHP7, hhvm & co

So?

Page 37: Php7 HHVM and co

PHP7, hhvm & co

Page 38: Php7 HHVM and co

PHP7, hhvm & co

Page 39: Php7 HHVM and 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) {…

Page 40: Php7 HHVM and co

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);

Page 42: Php7 HHVM and co

PHP7, hhvm & co

Zephir

Page 43: Php7 HHVM and co

PHP7, hhvm & co

Zephir

Optimization & code generation

Compilation + optimization

Native execution

Page 44: Php7 HHVM and co

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; }}

Page 45: Php7 HHVM and co

PHP7, hhvm & co

Zephir

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

Page 46: Php7 HHVM and co

PHP7, hhvm & co

PHP Alternative Implementations

Page 47: Php7 HHVM and co

PHP7, hhvm & co

PHP Alternative Implementations

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

Page 48: Php7 HHVM and co

PHP7, hhvm & co

Recki-ct

Page 49: Php7 HHVM and co

PHP7, hhvm & co

Recki-CT

PHP Cache

Parser (AST in 7+)

Recki IR

JIT~

Native Code

Page 50: Php7 HHVM and co

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

Page 51: Php7 HHVM and co

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

Page 52: Php7 HHVM and co

PHP7, hhvm & co

Page 53: Php7 HHVM and co

PHP7, hhvm & co

HHVM

PHP Cache

Parser (AST in 7+)

HHVM Opcodes

Native Code

JIT ~

Cache

Page 54: Php7 HHVM and co

PHP7, hhvm & co

Page 55: Php7 HHVM and co

PHP7, hhvm & co

PHP

PHP Cache

Parser (AST in 7+)

OpCodes

Page 58: Php7 HHVM and co

PHP7, hhvm & co

Resources

• http://phpdbg.com/• http://windows.php.net/qa/• http://qa.php.net/• http://ongr.io