4developers 2015: phpng kontra hhvm - leszek krupiński

78
PHPNG kontra HHVM Leszek Krupiński 4developers 2015

Upload: proidea

Post on 16-Jul-2015

182 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHPNG kontra HHVM

Leszek Krupiński 4developers 2015

Page 2: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

LEAFNODE

Page 3: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 4: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

.pl

/PHPersPL+grupy

Page 5: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Teraz

Page 6: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHP 5.6

Page 7: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Drobne zmiany składniowe

Page 8: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHP 7

Page 9: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHP NG

Page 10: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Głęboka refaktoryzacja

Page 11: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Optymalizacja struktur

wewnętrznych

Page 12: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Operacje na stosie

Page 13: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Zarządzanie pamięcią

Page 14: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Immutable Array

Page 15: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Efekty

Page 16: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

30% lepsze wyniki w testach

syntetycznych

Page 17: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

20-70% szybsze działanie prawdziwych

aplikacji

Page 18: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 19: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Lies, damned lies, benchmarks

Page 20: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Autor: Dmitry Stogov

Page 21: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Autor: Dmitry Stogov

Page 22: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

http://devplant.net/2014/08/11/optimizing-php-code/

Page 23: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Abstract Syntax Tree

Page 24: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

LEKSER

PARSER / KOMPILATOR

URUCHOMIENIE

LEKSEMY

OPCODE

Page 25: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

$y = 5;

$y

=

5

array[309, ‘$y’, 1]

=

array[305, 5, 1]

309 - T_VARIABLE 305 - T_LNUMBER

Page 26: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 27: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

LALR(1) parser Single-pass compiler

Page 28: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

[$a, $b, $c] = $array;

Page 29: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

LEKSER

PARSER / KOMPILATOR

URUCHOMIENIE

LEKSEMY

OPCODE

OPCACHE / OPTIMIZER

Page 30: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 31: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

LEKSER

PARSER

KOMPILATOR

URUCHOMIENIE

LEKSEMY

WĘZŁY AST

OPCODE

Page 32: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

A = B + C = 1; D

var var var var

value value value

* 2

value

products products products

sums sums

assign assign

stmtstmtstatements

Page 33: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Usunięcie ograniczeń składniowych

Page 34: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Uruchomienie

Page 35: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Niekompatybilność

Page 36: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

ROZSZERZENIA

interbase

oci8

mssql

pdo_oci

pdo_dblib

sybase_ct

Page 37: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Drobne zmiany w składni

Page 38: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 39: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HHVM

Page 40: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HipHop for PHP

Page 41: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

KOD PHP

KOD C

KOMPILACJA

URUCHOMIENIE

Page 42: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HHVM

Page 43: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

KOD PHP

BYTECODE

JIT COMPILER

URUCHOMIENIE

Page 44: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Hack

Page 45: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Return type hinting

Member variable types

Type-safe collections

Generics

Type aliasing

Nullable types

Tuples

Shapes

Page 46: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 47: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 48: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 49: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 50: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 51: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

XHP

Page 52: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Transpiler

Page 53: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Zgodność HHVM z PHP

Page 54: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Open Source Tests: 95.15%25 Frameworks at 100%

http://hhvm.com/frameworks/

Page 55: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Uruchamianie

Page 56: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HTTP Server PHP FPM Backend

class2.php

class1.php

index.php

Page 57: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HTTP Server HHVM Backend

class2.php

class1.php

index.php

Page 58: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Używać?

Page 59: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

1. google.com 2. facebook.com 3. youtube.com 4. yahoo.com 5. baidu.com 6. amazon.com 7. wikipedia.org 8. twitter.com 9. taobao.com 10. qq.com

Page 60: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

1. google.com 2. facebook.com 3. youtube.com 4. yahoo.com 5. baidu.com 6. amazon.com 7. wikipedia.org 8. twitter.com 9. taobao.com 10. qq.com

Page 61: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Roadmap 2015Integracja LLVM

Nowe platformy

Garbage collector

Zarządzanie pamięcią

Wsparcie dla OS X

Integracja z Hack typechecker

Pliki INI

XHP 2.0 w Hack

Poprawki zgodności

Page 62: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Fight!

Page 63: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHPNG/PHP7

+ duże community

+ szeroka baza testowa

+ perspektywy (AST)

- brak JIT

- chaotyczny rozwój

Page 64: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

HHVM

+ wydajność

+ drop-in zamiast FPM

+ hack

- zgodność (…ale będzie lepiej)

- niewielka baza testowa

- duże koszty wdrożenia

Page 65: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Przyszłość

Page 66: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

PHP 7

Page 67: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Return type hinting

Page 68: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński
Page 69: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Scalar Type HintsModel hybrydowy

Page 70: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Fatal Exceptions

Page 71: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

T_SPACESHIPBecause T_PAAMAYIM_NEKUDOTAYIM was not enough.

Page 72: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

<=>

Page 73: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Kolejne interpretery

Page 74: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Specyfikacja języka

Page 75: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Czy potrzebne jest wiele interpreterów?

Page 76: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Linkihttp://bit.ly/phpng-zendcon

http://bit.ly/php-ast

http://bit.ly/php7timeline

https://github.com/php/php-langspec

http://bit.ly/hhvm-phpcon2014

https://wiki.php.net/phpng

https://wiki.php.net/phpng-int

https://wiki.php.net/rfc

http://bit.ly/hhvm-etsy

Page 77: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Pytania?

Page 78: 4Developers 2015: PHPNG kontra HHVM - Leszek Krupiński

Dziękuję

@leafnode http://speakerdeck.com/leafnode/

i zapraszam na mój drugi wykład “Dobrze posól swoje hasło”, 17:00, Security