SlideShare a Scribd company logo
1 of 122
Download to read offline
PHP 7
What changed internally?
Nikita Popov
•Return type declarations
•Scalar type declarations
function startsWith(string $s1, string $s2) : bool {…}
211
254 256 273
627
666
0
100
200
300
400
500
600
700
PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7 HHVM 3.7
Req/Sec
Wordpress 4.1.1 (home, 20 c)
Stolen from Rasmus
•Smaller data structures
•Fewer allocations
•Less indirection
zval
zval
5
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
5
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
lval (long)
dval (double)
5
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
lval (long)
dval (double)
5
64 bits / 8 bytes
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
lval (long)
dval (double)
lval (long)
1 bit
5
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
val (char *)
len (int)
A B C 0
5
value
ty
5
value
refcount ty
5
value = LONG(42)
refcount = 1$i
$i = 42;
5
value = LONG(42)
refcount = 2$i
$j
$i = 42;
$j = $i;
5
value = LONG(42)
refcount = 3$i
$j
$k
$i = 42;
$j = $i;
$k = $i;
5
value = LONG(42)
refcount = 1
$i = 42;
$j = $i;
$k = $i;
unset($i, $k);
5
$j
value = LONG(42)
refcount = 0
$i = 42;
$j = $i;
$k = $i;
unset($i, $k);
unset($j);
5
value = LONG(42)
refcount = 0
$i = 42;
$j = $i;
$k = $i;
unset($i, $k);
unset($j);
free( )
5
value = ARRAY
refcount = 1$a
$a = [];
5
[0]: (empty)
[1]: (empty)
[2]: (empty)
…
value = ARRAY
refcount = 2$a
$a = [];
$a[0] = $a;
5
[0]:
[1]: (empty)
[2]: (empty)
…
value = ARRAY
refcount = 1
$a = [];
$a[0] = $a;
unset($a);
5
[0]:
[1]: (empty)
[2]: (empty)
…
value = ARRAY
refcount = 1
$a = [];
$a[0] = $a;
unset($a);
5
[0]:
[1]: (empty)
[2]: (empty)
…
[0]: (empty)
[1]: (empty)
[2]: (empty)
…
GC root buffer
value = ARRAY
refcount = 1
$a = [];
$a[0] = $a;
unset($a);
5
[0]:
[1]: (empty)
[2]: (empty)
…
[0]:
[1]: (empty)
[2]: (empty)
…
GC root buffer
value = ARRAY
refcount = 1
gc_root
$a = [];
$a[0] = $a;
unset($a);
5
[0]:
[1]: (empty)
[2]: (empty)
…
[0]:
[1]: (empty)
[2]: (empty)
…
GC root buffer
value
refcount ty
gc_root
5
size
prev_size
value
refcount ty
gc_root
5
size
prev_size
value
refcount ty
gc_root
5
32 bytes
16 bytes
value
type_info (u2)
7
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
5
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
7
FALSE
TRUE
NULL
BOOL
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
REFERENCE 7
FALSE
TRUE
NULL
FALSE
TRUE
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
REFERENCE
val (char *)
len (int)
A B C 0
5
NULL
FALSE
TRUE
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
REFERENCE 7
zend_string *
refcount type_info
hash
len (size_t)
A B C 0
NULL
FALSE
TRUE
LONG
DOUBLE
STRING
ARRAY
OBJECT
RESOURCE
REFERENCE 7
zend_string *
refcount type_info
hash
len (size_t)
A B C 0
refcounted header
$i = 42;
7
$i value = 42
LONG
$i = 42;
$j = $i;
7
$i value = 42
LONG
$j value = 42
LONG
$i = 42;
$j = $i;
$k = $i;
7
$i value = 42
LONG
$j value = 42
LONG
$k value = 42
LONG
$s = “foobar”;
7
$s value
STRING
refcount = 1 type_info
hash = 0x80000652FDE460BE
len = 6
f o o b a r 0
$s = “foobar”;
$t = $s;
7
$s value
STRING
$t value
STRING refcount = 2 type_info
hash = 0x80000652FDE460BE
len = 6
f o o b a r 0
$s = “foobar”;
$t = $s;
$u = $s;
7
$s value
STRING
$t value
STRING
$u value
STRING
refcount = 3 type_info
hash = 0x80000652FDE460BE
len = 6
f o o b a r 0
7
refcount type_info
hash
len (size_t)
A B C 0
refcounted header
7
refcount type_info
hash
len (size_t)
A B C 0
refcounted header
type flags gc_info
7
refcount type_info
hash
len (size_t)
A B C 0
refcounted header
type flags gc_info
INTERNED
etc.
value
type_info (u2)
7
value
type_info (u2)
7
type type_flags const_flags
7
type type_flags const_flags
refcounted collectable copyable
simple types
string
interned string
array
object
resource
reference
7
type type_flags const_flags
refcounted collectable copyable
simple types
string 
interned string
array 
object 
resource 
reference 
7
type type_flags const_flags
refcounted collectable copyable
simple types
string 
interned string
array  
object  
resource 
reference 
7
type type_flags const_flags
refcounted collectable copyable
simple types
string  
interned string
array   
object  
resource 
reference 
5
array == HashTable
5
key = “foo”
idx = hash(“foo”)
5
key = “foo”
idx = hash(“foo”) % tableSize
5
[0]: (empty)
[1]: (empty)
[2]: (empty)
[3]: (empty)
“foo”
5
[0]: (empty)
[1]:
[2]: (empty)
[3]: (empty)
“foo”
data
key “foo”
zval
5
[0]: (empty)
[1]:
[2]: (empty)
[3]: (empty)
“foo”
data
key “foo”
“bar”
5
[0]: (empty)
[1]:
[2]: (empty)
[3]: (empty)
“foo”
data
key “foo”
next
“bar”
data
key “bar”
next = NULL
5
[0]: (empty)
[1]:
[2]: (empty)
[3]: (empty)
“foo”
data
key “foo”
next
prev = NULL
“bar”
data
key “bar”
next = NULL
prev
5
data
prev
next
key “foo”
zval
5
data
listNext
listPrev
prev
next
key “foo”
zval
$a1 = [“foo” => 1,
“bar” => 2];
$a2 = [“bar” => 2,
“foo” => 1];
5
dataPtr
data
listNext
listPrev
prev
next
key “foo”
zval
5
hash
keyLen
dataPtr
data
listNext
listPrev
prev
next
key “foo”
zval
7
hash
key
value
type_info next
zval
7
hash
key
value
type_info next
refcount type_info
hash
len
f o o 0
zend_string
7
hash
key
value
type_info next
hash
key
value
type_info next
hash
key
value
type_info next
7
hash
key
value
type_info next
hash
key
value
type_info next
hash
key
value
type_info next
[0]
[1]
[2]
[3]
7
hash
key
value
type_info next
hash
key
value
type_info next
hash
key
value
type_info next
[0] = -1
[1] = -1
[2] = -1
[3] = -1
$a = [];
numUsed = 0
7
hash
key
value = 42
LONG next = -1
hash
key
value
type_info next
hash
key
value
type_info next
[0] = -1
[1] = 0
[2] = -1
[3] = -1
“foo”
$a = [];
$a[“foo”] = 42;
“foo”
numUsed = 1
7
hash
key
value = 42
LONG next = -1
hash
key
value = 24
LONG next = -1
hash
key
value
type_info next
[0] = -1
[1] = 0
[2] = -1
[3] = 1
“foo”
$a = [];
$a[“foo”] = 42;
$a[“bar”] = 24; “foo”
“bar”
“bar”
numUsed = 2
7
hash
key
value = 42
LONG next = 2
hash
key
value = 24
LONG next = -1
hash
key
value = 3.141
DOUBLE next = -1
[0] = -1
[1] = 0
[2] = -1
[3] = 1
“foo”
$a = [];
$a[“foo”] = 42;
$a[“bar”] = 24;
$a[“xyz”] = 3.141;
“foo”
“bar”
“bar”
“xyz”
“xyz”
7
hash
key
value
UNDEF next = -1
hash
key
value = 24
LONG next = -1
hash
key
value = 3.141
DOUBLE next = -1
[0] = -1
[1] = 2
[2] = -1
[3] = 1
$a = [];
$a[“foo”] = 42;
$a[“bar”] = 24;
$a[“xyz”] = 3.141;
unset($a[“foo”]);
“bar”
“bar”
“xyz”
“xyz”
7
hash
key
value
type_info next
hash
key
value
type_info next
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
7
hash
key
value
type_info next
hash
key
value
type_info next
[0] [1]
[2] [3]
[4] [5]
[6] [7]
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
data / hash pointer
numUsed
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed
tableSize
tableMask = -tableSize
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed
tableSize
1010111010110110
tableMask = -tableSize
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed
tableSize
1010111010110110
| 1111111111100000
tableMask = -tableSize
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed
tableSize
1010111010110110
| 1111111111100000
= 1111111111110110 = -10
tableMask = -tableSize
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed numElems
tableSize
nextFreeElement
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
tableMask
data / hash pointer
numUsed numElems
tableSize internalPtr
nextFreeElement
destructor
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
flags tableMask
data / hash pointer
numUsed numElems
tableSize internalPtr
nextFreeElement
destructor
flags applyCnt iterCnt
7
hash
key
value
type_info next
hash
key
value
type_info next
[-8] [-7]
[-6] [-5]
[-4] [-3]
[-2] [-1]
hash
data
refcount type_info
flags tableMask
data / hash pointer
numUsed numElems
tableSize internalPtr
nextFreeElement
destructor
flags applyCnt iterCnt
PACKED
etc.
7
hash
key
value
type_info next
hash
key
value
type_info next
data
refcount type_info
flags tableMask
data pointer
numUsed numElems
tableSize internalPtr
nextFreeElement
destructor
flags applyCnt iterCnt
PACKED
etc.
5
objects
5
handle (ID)
handlers
zval value
5
handle (ID)
handlers
zval value
handler table
object store bucket
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
object store bucket
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
object
object store bucket
actual object
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
object
refcount
object store bucket
actual object
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
object
dtor()
free_storage()
clone()
refcount
object store bucket
actual object
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
object
dtor()
free_storage()
clone()
handlers
refcount
gc_root
object store bucket
actual object
5
handle (ID)
handlers
zval value
…
read_prop()
write_prop()
…
D V ac
object
dtor()
free_storage()
clone()
handlers
refcount
gc_root
object store bucket
actual object
5
object store bucket
standard object
5
object store bucket
ce
standard object
zend_class_entry
5
object store bucket
ce
properties
standard object
zend_class_entry
HashTable for
dynamic properties
5
object store bucket
ce
properties
properties_table
standard object
zend_class_entry
HashTable for
dynamic properties
[0] (stores $prop1)
[1] (stores $prop2)
[2] (stores $prop3)
zval
zval
zval
5
object store bucket
ce
properties
properties_table
guards
standard object
zend_class_entry
HashTable for
dynamic properties
[0] (stores $prop1)
[1] (stores $prop2)
[2] (stores $prop3)
zval
zval
zval
HashTable for
__get etc. guards
5
object store bucket
ce
properties
properties_table
guards
custom extension
for internal object
standard object
zend_class_entry
HashTable for
dynamic properties
[0] (stores $prop1)
[1] (stores $prop2)
[2] (stores $prop3)
zval
zval
zval
HashTable for
__get etc. guards
7
zend_object *
refcount type_info
ce
properties
zend_class_entry
HashTable for
dynamic properties
7
zend_object *
refcount type_info
handle
ce
handlers
properties
zend_class_entry
HashTable for
dynamic properties
handler table
7
zend_object *
refcount type_info
handle
ce
handlers
properties
zend_class_entry
HashTable for
dynamic properties
handler table
object store
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
zend_class_entry
HashTable for
dynamic properties$prop1 zval
$prop2 zval
$prop3 zval
handler table
object store
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
zend_class_entry
HashTable for
dynamic properties
HashTable for
__get etc. guards
guards zval
$prop1 zval
$prop2 zval
handler table
object store
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
zend_class_entry
HashTable for
dynamic properties
HashTable for
__get etc. guards
guards zval
$prop1 zval
$prop2 zval
handler table
object store
ext. for internal objects
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
zend_class_entry
HashTable for
dynamic properties
HashTable for
__get etc. guards
guards zval
$prop1 zval
$prop2 zval
handler table
object store
ext. for internal objects offset
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
guards zval
$prop1 zval
$prop2 zval
object store
ext. for internal objects
offset
…
handlers table
offset
7
zend_object *
refcount type_info
handle
ce
handlers
properties
value
type_info
value
type_info
value
type_info
guards zval
$prop1 zval
$prop2 zval
object store
ext. for internal objects
offset
free()
dtor()
clone()
…
handlers table
offset
5
references
value = LONG(42)
refcount = 3$i
$j
$k
$i = 42;
$j = $i;
$k = $i;
5
value = LONG(42)
refcount = 2$i
$k
$i = 42;
$j = $i;
$k = $i;
$k++;
5
value = LONG(43)
refcount = 1
$j
value = LONG(42)
refcount = 2$i
$k
$i = 42;
$j = $i;
$k = $i;
$k++;
5
value = LONG(43)
refcount = 1
$j
copy-on-write (COW)
value = LONG(42)
refcount = 3 is_ref = 1$i
$j
$k
$i = 42;
$j =& $i;
$k =& $i;
5
value = LONG(43)
refcount = 3 is_ref = 1$i
$j
$k
$i = 42;
$j =& $i;
$k =& $i;
$k++;
5
$i = 42;
$j =& $i;
$k =& $i;
7
$i value
REFERENCE
$j value
REFERENCE
$k value
REFERENCE
refcount = 3 type_info
value = 42
LONG
zend_reference
$a = range(
0,1000000);
$r =& $a;
7
$a value
REFERENCE
$r value
REFERENCE refcount = 2 type_info
value
ARRAY
zend_reference
refcount = 1 type_info
…
zend_array
$a = range(
0,1000000);
$r =& $a;
$v = $a;
7
$a value
REFERENCE
$r value
REFERENCE
$v value
ARRAY
refcount = 2 type_info
value
ARRAY
zend_reference
refcount = 2 type_info
…
zend_array
PHP 5 PHP 7
zval 32 bytes 16 bytes
HashTable element 80 bytes 36 bytes (incl. zval)
HashTable 72 bytes 56 bytes
object 96 bytes 40 bytes
PHP 5 PHP 7
zval 32 bytes 16 bytes
HashTable element 80 bytes 36 bytes (incl. zval)
HashTable 72 bytes 56 bytes
object 96 bytes 40 bytes
fewer allocations
less indirection
PHP 7 Alpha 1
June 11th
@nikita_ppv
nikic@php.net

More Related Content

What's hot

Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming LanguageJaeju Kim
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDPlcplcp1
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machineAlexei Starovoitov
 
ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!Affan Syed
 
Dive into ROP - a quick introduction to Return Oriented Programming
Dive into ROP - a quick introduction to Return Oriented ProgrammingDive into ROP - a quick introduction to Return Oriented Programming
Dive into ROP - a quick introduction to Return Oriented ProgrammingSaumil Shah
 
Using Wildcards with rsyslog's File Monitor imfile
Using Wildcards with rsyslog's File Monitor imfileUsing Wildcards with rsyslog's File Monitor imfile
Using Wildcards with rsyslog's File Monitor imfileRainer Gerhards
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?Sam Thomas
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
 
How Functions Work
How Functions WorkHow Functions Work
How Functions WorkSaumil Shah
 
Linux BPF Superpowers
Linux BPF SuperpowersLinux BPF Superpowers
Linux BPF SuperpowersBrendan Gregg
 
Linux Instrumentation
Linux InstrumentationLinux Instrumentation
Linux InstrumentationDarkStarSword
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPFAlex Maestretti
 
Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniqueAngel Boy
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...The Linux Foundation
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceSUSE Labs Taipei
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)Brendan Gregg
 

What's hot (20)

How2heap
How2heap How2heap
How2heap
 
Rust Programming Language
Rust Programming LanguageRust Programming Language
Rust Programming Language
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDP
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machine
 
ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!
 
Dive into ROP - a quick introduction to Return Oriented Programming
Dive into ROP - a quick introduction to Return Oriented ProgrammingDive into ROP - a quick introduction to Return Oriented Programming
Dive into ROP - a quick introduction to Return Oriented Programming
 
Using Wildcards with rsyslog's File Monitor imfile
Using Wildcards with rsyslog's File Monitor imfileUsing Wildcards with rsyslog's File Monitor imfile
Using Wildcards with rsyslog's File Monitor imfile
 
PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?PHP unserialization vulnerabilities: What are we missing?
PHP unserialization vulnerabilities: What are we missing?
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
How Functions Work
How Functions WorkHow Functions Work
How Functions Work
 
Linux BPF Superpowers
Linux BPF SuperpowersLinux BPF Superpowers
Linux BPF Superpowers
 
Linux Instrumentation
Linux InstrumentationLinux Instrumentation
Linux Instrumentation
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
 
Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit Technique
 
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
XPDDS17: Shared Virtual Memory Virtualization Implementation on Xen - Yi Liu,...
 
eBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to UserspaceeBPF Trace from Kernel to Userspace
eBPF Trace from Kernel to Userspace
 
BPF Internals (eBPF)
BPF Internals (eBPF)BPF Internals (eBPF)
BPF Internals (eBPF)
 
ELF
ELFELF
ELF
 

Viewers also liked

The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6Andrei Zmievski
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)Nikita Popov
 
Last train to php 7
Last train to php 7Last train to php 7
Last train to php 7Damien Seguy
 
PHP 7 - A look at the future
PHP 7 - A look at the futurePHP 7 - A look at the future
PHP 7 - A look at the futureRadu Murzea
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshopjulien pauli
 
PHP tutorial | ptutorial
PHP tutorial | ptutorialPHP tutorial | ptutorial
PHP tutorial | ptutorialPTutorial Web
 
PHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look AheadPHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look Aheadthinkphp
 
Introduction to php 6
Introduction to php   6Introduction to php   6
Introduction to php 6pctechnology
 
PHP7 - For Its Best Performance
PHP7 - For Its Best PerformancePHP7 - For Its Best Performance
PHP7 - For Its Best PerformanceXinchen Hui
 
PHP7.1 New Features & Performance
PHP7.1 New Features & PerformancePHP7.1 New Features & Performance
PHP7.1 New Features & PerformanceXinchen Hui
 
PHP7 - The New Engine for old good train
PHP7 - The New Engine for old good trainPHP7 - The New Engine for old good train
PHP7 - The New Engine for old good trainXinchen Hui
 
De perdidos a Titanium - Codemotion Madrid 2013
De perdidos a Titanium - Codemotion Madrid 2013De perdidos a Titanium - Codemotion Madrid 2013
De perdidos a Titanium - Codemotion Madrid 2013aferrandini
 
High Performance Solution for PHP7
High Performance Solution for PHP7High Performance Solution for PHP7
High Performance Solution for PHP7Xinchen Hui
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkBukhori Aqid
 
The secret of PHP7's Performance
The secret of PHP7's Performance The secret of PHP7's Performance
The secret of PHP7's Performance Xinchen Hui
 
PHP 7 Crash Course - php[world] 2015
PHP 7 Crash Course - php[world] 2015PHP 7 Crash Course - php[world] 2015
PHP 7 Crash Course - php[world] 2015Colin O'Dell
 
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, ItalyPHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, ItalyPatrick Allaert
 

Viewers also liked (20)

The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6
 
PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)PHP 7 – What changed internally? (PHP Barcelona 2015)
PHP 7 – What changed internally? (PHP Barcelona 2015)
 
Last train to php 7
Last train to php 7Last train to php 7
Last train to php 7
 
PHP 7 - A look at the future
PHP 7 - A look at the futurePHP 7 - A look at the future
PHP 7 - A look at the future
 
Php Tutorial
Php TutorialPhp Tutorial
Php Tutorial
 
Php7 extensions workshop
Php7 extensions workshopPhp7 extensions workshop
Php7 extensions workshop
 
PHP tutorial | ptutorial
PHP tutorial | ptutorialPHP tutorial | ptutorial
PHP tutorial | ptutorial
 
PHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look AheadPHP 5.3 And PHP 6 A Look Ahead
PHP 5.3 And PHP 6 A Look Ahead
 
Introduction to php 6
Introduction to php   6Introduction to php   6
Introduction to php 6
 
PHP7 - For Its Best Performance
PHP7 - For Its Best PerformancePHP7 - For Its Best Performance
PHP7 - For Its Best Performance
 
PHP7.1 New Features & Performance
PHP7.1 New Features & PerformancePHP7.1 New Features & Performance
PHP7.1 New Features & Performance
 
PHP7 - The New Engine for old good train
PHP7 - The New Engine for old good trainPHP7 - The New Engine for old good train
PHP7 - The New Engine for old good train
 
De perdidos a Titanium - Codemotion Madrid 2013
De perdidos a Titanium - Codemotion Madrid 2013De perdidos a Titanium - Codemotion Madrid 2013
De perdidos a Titanium - Codemotion Madrid 2013
 
Php Unicode I18n
Php Unicode I18nPhp Unicode I18n
Php Unicode I18n
 
High Performance Solution for PHP7
High Performance Solution for PHP7High Performance Solution for PHP7
High Performance Solution for PHP7
 
Knowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP frameworkKnowing Laravel 5 : The most popular PHP framework
Knowing Laravel 5 : The most popular PHP framework
 
The secret of PHP7's Performance
The secret of PHP7's Performance The secret of PHP7's Performance
The secret of PHP7's Performance
 
PHP 7
PHP 7PHP 7
PHP 7
 
PHP 7 Crash Course - php[world] 2015
PHP 7 Crash Course - php[world] 2015PHP 7 Crash Course - php[world] 2015
PHP 7 Crash Course - php[world] 2015
 
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, ItalyPHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
PHP data structures (and the impact of php 7 on them), phpDay Verona 2015, Italy
 

Similar to PHP 7 – What changed internally?

PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)Nikita Popov
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & ArraysHenry Osborne
 
Modern Application Foundations: Underscore and Twitter Bootstrap
Modern Application Foundations: Underscore and Twitter BootstrapModern Application Foundations: Underscore and Twitter Bootstrap
Modern Application Foundations: Underscore and Twitter BootstrapHoward Lewis Ship
 
An Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackAn Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackVic Metcalfe
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6garux
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistenceHugo Hamon
 
循環参照のはなし
循環参照のはなし循環参照のはなし
循環参照のはなしMasahiro Honma
 
Python Fundamentals - Basic
Python Fundamentals - BasicPython Fundamentals - Basic
Python Fundamentals - BasicWei-Yuan Chang
 
Ruby nooks & crannies
Ruby nooks & cranniesRuby nooks & crannies
Ruby nooks & cranniesKerry Buckley
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingMuthu Vinayagam
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actorszucaritask
 
Taking Perl to Eleven with Higher-Order Functions
Taking Perl to Eleven with Higher-Order FunctionsTaking Perl to Eleven with Higher-Order Functions
Taking Perl to Eleven with Higher-Order FunctionsDavid Golden
 
Invertible-syntax 入門
Invertible-syntax 入門Invertible-syntax 入門
Invertible-syntax 入門Hiromi Ishii
 
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...DmitryChirkin1
 
Basic perl programming
Basic perl programmingBasic perl programming
Basic perl programmingThang Nguyen
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Contextlichtkind
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a bossgsterndale
 
CS442 - Rogue: A Scala DSL for MongoDB
CS442 - Rogue: A Scala DSL for MongoDBCS442 - Rogue: A Scala DSL for MongoDB
CS442 - Rogue: A Scala DSL for MongoDBjorgeortiz85
 

Similar to PHP 7 – What changed internally? (20)

PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)PHP 7 – What changed internally? (Forum PHP 2015)
PHP 7 – What changed internally? (Forum PHP 2015)
 
PHP Functions & Arrays
PHP Functions & ArraysPHP Functions & Arrays
PHP Functions & Arrays
 
Modern Application Foundations: Underscore and Twitter Bootstrap
Modern Application Foundations: Underscore and Twitter BootstrapModern Application Foundations: Underscore and Twitter Bootstrap
Modern Application Foundations: Underscore and Twitter Bootstrap
 
An Elephant of a Different Colour: Hack
An Elephant of a Different Colour: HackAn Elephant of a Different Colour: Hack
An Elephant of a Different Colour: Hack
 
Introdução ao Perl 6
Introdução ao Perl 6Introdução ao Perl 6
Introdução ao Perl 6
 
PHP 5.4
PHP 5.4PHP 5.4
PHP 5.4
 
The History of PHPersistence
The History of PHPersistenceThe History of PHPersistence
The History of PHPersistence
 
循環参照のはなし
循環参照のはなし循環参照のはなし
循環参照のはなし
 
Python Fundamentals - Basic
Python Fundamentals - BasicPython Fundamentals - Basic
Python Fundamentals - Basic
 
Ruby nooks & crannies
Ruby nooks & cranniesRuby nooks & crannies
Ruby nooks & crannies
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python Programming
 
Casting for not so strange actors
Casting for not so strange actorsCasting for not so strange actors
Casting for not so strange actors
 
Taking Perl to Eleven with Higher-Order Functions
Taking Perl to Eleven with Higher-Order FunctionsTaking Perl to Eleven with Higher-Order Functions
Taking Perl to Eleven with Higher-Order Functions
 
Invertible-syntax 入門
Invertible-syntax 入門Invertible-syntax 入門
Invertible-syntax 入門
 
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...
NodeUkraine - Postgresql для хипстеров или почему ваш следующий проект должен...
 
Basic perl programming
Basic perl programmingBasic perl programming
Basic perl programming
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Context
 
Refactor like a boss
Refactor like a bossRefactor like a boss
Refactor like a boss
 
Php functions
Php functionsPhp functions
Php functions
 
CS442 - Rogue: A Scala DSL for MongoDB
CS442 - Rogue: A Scala DSL for MongoDBCS442 - Rogue: A Scala DSL for MongoDB
CS442 - Rogue: A Scala DSL for MongoDB
 

More from Nikita Popov

A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerA whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerNikita Popov
 
Opaque Pointers Are Coming
Opaque Pointers Are ComingOpaque Pointers Are Coming
Opaque Pointers Are ComingNikita Popov
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?Nikita Popov
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?Nikita Popov
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance TriviaNikita Popov
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Nikita Popov
 
PHP Language Trivia
PHP Language TriviaPHP Language Trivia
PHP Language TriviaNikita Popov
 

More from Nikita Popov (7)

A whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizerA whirlwind tour of the LLVM optimizer
A whirlwind tour of the LLVM optimizer
 
Opaque Pointers Are Coming
Opaque Pointers Are ComingOpaque Pointers Are Coming
Opaque Pointers Are Coming
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
What's new in PHP 8.0?
What's new in PHP 8.0?What's new in PHP 8.0?
What's new in PHP 8.0?
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
 
PHP Language Trivia
PHP Language TriviaPHP Language Trivia
PHP Language Trivia
 

Recently uploaded

Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentMahmoud Rabie
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialJoão Esperancinha
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Nikki Chapple
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 

Recently uploaded (20)

Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Digital Tools & AI in Career Development
Digital Tools & AI in Career DevelopmentDigital Tools & AI in Career Development
Digital Tools & AI in Career Development
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Kuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorialKuma Meshes Part I - The basics - A tutorial
Kuma Meshes Part I - The basics - A tutorial
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
Microsoft 365 Copilot: How to boost your productivity with AI – Part two: Dat...
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 

PHP 7 – What changed internally?