-
Notifications
You must be signed in to change notification settings - Fork 27
/
deepdive-scotland19.xml
131 lines (103 loc) · 3.49 KB
/
deepdive-scotland19.xml
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
126
127
128
129
130
131
<?xml version="1.0" encoding="utf-8"?>
<presentation css="derick.css">
<topic>PHP</topic>
<title>PHP Deep Dive</title>
<event>ScotlandPHP</event>
<location>Edinburgh, Scotland, UK</location>
<date>November 8th, 2019</date>
<speaker>Derick Rethans</speaker>
<email>[email protected]</email>
<twitter>derickr</twitter>
<url>https://derickrethans.nl/talks/deepdive-scotland19</url>
<joindin>https://joind.in/27716</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>
<!-- EXERCISE: STRICT SWITCH -->
<slide>slides/internals/switch-confusion.xml</slide>
<slide>slides/internals/switch.xml</slide>
<slide>slides/internals/exercise-strict-switch.xml</slide>
<slide>slides/internals/switch-followup.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>