-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathdeepdive-phpday19.xml
More file actions
125 lines (98 loc) · 3.22 KB
/
deepdive-phpday19.xml
File metadata and controls
125 lines (98 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?xml version="1.0" encoding="utf-8"?>
<presentation css="derick.css">
<topic>PHP</topic>
<title>PHP Deep Dive</title>
<event>phpDay 2019</event>
<location>Verona, Italy</location>
<date>May 11th, 2019</date>
<speaker>Derick Rethans</speaker>
<email>derick@php.net</email>
<twitter>derickr</twitter>
<url>https://derickrethans.nl/talks/deepdive-phpday19</url>
<joindin></joindin>
<slide>slides/xdebug/title.xml</slide>
<slide>slides/mongodb/me.xml</slide>
<slide>slides/internals/title-agenda.xml</slide>
<slide>slides/internals/title-stages.xml</slide>
<!-- INTRODUCTION
Compile stages:
Parse script
Create AST
Convert to opcodes
Run the code
Opcache for caching
-->
<slide>slides/internals/stages.xml</slide>
<!-- STAGES
Parse
- Show parser rules
- Show "compiler" rules
-->
<slide>slides/internals/title-parsing.xml</slide>
<slide>slides/internals/parse-state-machine.xml</slide>
<slide>slides/internals/parse-tokenization.xml</slide>
<slide>slides/internals/scanner.xml</slide>
<slide>slides/internals/scanner-rules.xml</slide>
<!-- EXERCISE: SHORT OPEN TAG -->
<slide>slides/internals/exercise-short-open-tag.xml</slide>
<slide>slides/internals/ast.xml</slide>
<slide>slides/internals/ast1.xml</slide>
<slide>slides/internals/scanner-ast.xml</slide>
<slide>slides/internals/scanner-ast2.xml</slide>
<slide>slides/internals/bytecode0.xml</slide>
<slide>slides/internals/bytecode½.xml</slide>
<slide>slides/internals/bytecode1.xml</slide>
<!-- EXERCISE: ALWAYS STRICT -->
<slide>slides/internals/exercise-strict-by-default.xml</slide>
<slide>slides/internals/jumps.xml</slide>
<!--
AST
- Show AST for various control structures
Opcodes
- Show AST for the same control structures
-->
<slide>slides/internals/jumps-if.xml</slide>
<slide>slides/internals/jumps-if-else.xml</slide>
<slide>slides/internals/rings.xml</slide>
<slide>slides/internals/jumps-for.xml</slide>
<slide>slides/internals/jumps-for-rewritten.xml</slide>
<slide>slides/internals/jumps-while.xml</slide>
<slide>slides/internals/jumps-do-while.xml</slide>
<slide>slides/internals/jumps-foreach.xml</slide>
<slide>slides/internals/jumps-complex.xml</slide>
<slide>slides/internals/loops.xml</slide>
<slide>slides/internals/jumps-complex-dot.xml</slide>
<!--
Try/Catch nonsense
- FASTCALL/FASTRET
-->
<slide>slides/internals/catch.xml</slide>
<slide>slides/internals/jumps-try-catch.xml</slide>
<!--
Dead code analysis
- Show how Xdebug does it through VLD
-->
<slide>slides/internals/deadcode.xml</slide>
<slide>slides/internals/deadcode-vld.xml</slide>
<!--
Path analysis
- Branch and Path
-->
<slide>slides/internals/branches.xml</slide>
<slide>slides/xdebug/vld-path-2-paths.xml</slide>
<slide>slides/xdebug/vld-path-4-code.xml</slide>
<slide>slides/xdebug/vld-path-4-output.xml</slide>
<slide>slides/xdebug/vld-path-3-code.xml</slide>
<slide>slides/xdebug/vld-path-3-output.xml</slide>
<slide>slides/xdebug/vld-path-3-paths.xml</slide>
<!-- Conclusion
Code -> Tokens -> AST -> opode
Transformation of control structures
Useful implementations
-->
<slide>slides/internals/recap.xml</slide>
<slide>slides/internals/recap-content.xml</slide>
<slide>slides/mongodb/questions.xml</slide>
<slide>slides/xdebug/phpinternalsnews.xml</slide>
<slide>slides/mongodb/resources.xml</slide>
</presentation>