[PRES] [presentations] master: PHPConnect talk

From: Date: Wed, 02 Sep 2026 11:19:13 +0000
Subject: [PRES] [presentations] master: PHPConnect talk
Groups: php.pres 
Request: Send a blank email to pres+get-2515@lists.php.net to get a copy of this message
Author: Derick Rethans (derickr) Date: 2026-09-02T12:19:06+01:00 Commit: https://github.com/php/presentations/commit/932967bf53be0078c86489a3f2793655c56b68f0 Raw diff: https://github.com/php/presentations/commit/932967bf53be0078c86489a3f2793655c56b68f0.diff PHPConnect talk Changed paths: A slides/internals/bytecode1½.xml A slides/internals/php_foundation.png A slides/internals/scanner-example.xml M slides/internals/bytecode1.xml M slides/internals/parse-state-machine.xml M slides/internals/scanner-ast2.xml M slides/mongodb/me.xml M slides/mongodb/resources.xml M templates/default/qrcode.ezt Diff: diff --git a/slides/internals/bytecode1.xml b/slides/internals/bytecode1.xml index dfc56222..10c120cd 100644 --- a/slides/internals/bytecode1.xml +++ b/slides/internals/bytecode1.xml @@ -1,33 +1,35 @@ <slide> <title>AST is converted to bytecode</title> +<blurb>AST:</blurb> <example class="medium" inline="1"> 1: AST_METHOD flags: MODIFIER_PUBLIC (256) name: |00dd00|__construct| params: AST_PARAM_LIST 0: AST_PARAM - name: |0000dd|"name"| + name: |0000dd|"value"| stmts: AST_STMT_LIST 0: |dd00dd|AST_ASSIGN| var: |00dddd|AST_PROP| expr: AST_VAR name: |00dddd|"this"| - prop: |00dddd|"name"| + prop: |00dddd|"property"| expr: AST_VAR - name: |0000dd|"name"| + name: |0000dd|"value"| </example> -<br/> + +<blurb>Opcodes:</blurb> <example class="medium" inline="1"> -compiled vars: |0000dd|!0 = $name| -line #* E I O op fetch ext return operands -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 8 0 E > EXT_NOP - 1 RECV |0000dd|!0| - 10 2 EXT_STMT - 3 |dd00dd|ASSIGN||00dddd|_OBJ| |00dddd|'name'| - 4 |dd00dd|OP_DATA| |0000dd|!0| - 11 5 EXT_STMT - 6 > RETURN null +compiled vars: |0000dd|!0 = $value| +line #* E I O op return operands +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 8 0 E > EXT_NOP + 1 RECV |0000dd|!0| + 10 2 EXT_STMT + 3 |dd00dd|ASSIGN||00dddd|_OBJ| |00dddd|'property'| + 4 |dd00dd|OP_DATA| |0000dd|!0| + 11 5 EXT_STMT + 6 > RETURN null </example> </slide> diff --git "a/slides/internals/bytecode1\302\275.xml" "b/slides/internals/bytecode1\302\275.xml" new file mode 100644 index 00000000..97d33cc8 --- /dev/null +++ "b/slides/internals/bytecode1\302\275.xml" @@ -0,0 +1,28 @@ +<slide> +<title>AST is converted to bytecode (with tricks)</title> + +<blurb>Code:</blurb> +<example inline="1"><![CDATA[&lt?php +*$a* |00cc00|=| |0000cc|8| |cc00cc|+| |0000cc|42|; +]]></example> + +<blurb>AST:</blurb> +<example inline="1">0: |00cc00|AST_ASSIGN| + var: *AST_VAR* + name: "a" + expr: AST_BINARY_OP + flags: |cc00cc|BINARY_ADD (1)| + left: |0000cc|8| + right: |0000cc|42| +</example> + +<blurb>Opcodes:</blurb> +<example inline="1"> +compiled vars: *!0 = $a* +line #* E I O op operands +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 2 0 E > EXT_STMT + 1 |00cc00|ASSIGN| *!0*, 50 + 3 2 > RETURN 1 +</example> +</slide> diff --git a/slides/internals/parse-state-machine.xml b/slides/internals/parse-state-machine.xml index 4db6cced..1da9c3ec 100644 --- a/slides/internals/parse-state-machine.xml +++ b/slides/internals/parse-state-machine.xml @@ -5,10 +5,10 @@ <bullet>It's a big state machine starting with %INITIAL%</bullet> <bullet>States: %INITIAL%, %ST_IN_SCRIPTING%, %ST_DOUBLE_QUOTES%, %ST_NOWDOC%…</bullet> <bullet>Tokens can change the state: - <example><![CDATA[<INITIAL>"<?php"([ \t]|{NEWLINE}) { + <example inline="1"><![CDATA[&lt;INITIAL>*"&lt;?php"*([ \t]|{NEWLINE}) { HANDLE_NEWLINE(yytext[yyleng-1]); BEGIN(ST_IN_SCRIPTING); - RETURN_TOKEN(T_OPEN_TAG); + RETURN_TOKEN(*T_OPEN_TAG*); } ]]></example> </bullet> <bullet>No *meaning* is given to these tokens</bullet> diff --git a/slides/internals/php_foundation.png b/slides/internals/php_foundation.png new file mode 100644 index 00000000..27bcfa84 Binary files /dev/null and b/slides/internals/php_foundation.png differ diff --git a/slides/internals/scanner-ast2.xml b/slides/internals/scanner-ast2.xml index 5f366687..db1c1040 100644 --- a/slides/internals/scanner-ast2.xml +++ b/slides/internals/scanner-ast2.xml @@ -55,9 +55,9 @@ <div effect="fade-in"> <example inline="1"> -|0000dd|public| function |00dd00|__construct|( |0000dd|$name| ) +|0000dd|public| function |00dd00|__construct|( |0000dd|$value| ) { - |00dddd|$this->name| |dd00dd|=| |ff0000|$name| + |00dddd|$this->property| |dd00dd|=| |ff0000|$value| } </example> @@ -71,7 +71,7 @@ 0: AST_PARAM flags: 0 type: null - name: |0000dd|"name"| + name: |0000dd|"value"| default: null uses: null stmts: AST_STMT_LIST @@ -79,9 +79,9 @@ var: |00dddd|AST_PROP| expr: AST_VAR name: |00dddd|"this"| - prop: |00dddd|"name"| + prop: |00dddd|"property"| expr: AST_VAR - name: |ff0000|"name"| + name: |ff0000|"value"| returnType: null </example> </div> diff --git a/slides/internals/scanner-example.xml b/slides/internals/scanner-example.xml new file mode 100644 index 00000000..2ae41ff9 --- /dev/null +++ b/slides/internals/scanner-example.xml @@ -0,0 +1,36 @@ +<slide> +<title>Example Matching</title> + +<div effect="fade-out"> +<blurb>Code:</blurb> +<example inline="1"><![CDATA[*$a* |00cc00|=| |0000cc|8| |cc00cc|+| |0000cc|42|;]]></example> +</div> + +<blurb>Tokens:</blurb> +<example inline="1"><![CDATA[*T_VARIABLE $a* |cccccc|T_WS| |00cc00|"="| |cccccc|T_WS| |0000cc|T_LNUMBER 8| |cccccc|T_WS| |cc00cc|"+"| |cccccc|T_WS| |0000cc|T_LNUMBER 42| ";" ]]></example> + +<blurb>Rules:</blurb> +<example inline="1"><![CDATA[ +variable: + *T_VARIABLE* { $$ = zend_ast_create(*ZEND_AST_VAR*, $1); } +scalar: + |0000cc|T_LNUMBER| { $$ = $1; } +expr: + | variable |00cc00|'='| expr { $$ = zend_ast_create(|00cc00|ZEND_AST_ASSIGN|, $1, $3); } + | expr |cc00cc|'+'| expr { $$ = zend_ast_create_binary_op(|cc00cc|ZEND_ADD|, $1, $3); } + | scalar { $$ = $1; }]]> +</example> + +<div effect="fade-in"> +<blurb>AST:</blurb> +<example inline="1">0: |00cc00|AST_ASSIGN| + var: *AST_VAR* + name: "a" + expr: AST_BINARY_OP + flags: |cc00cc|BINARY_ADD (1)| + left: |0000cc|8| + right: |0000cc|42| +</example> +</div> + +</slide> diff --git a/slides/mongodb/me.xml b/slides/mongodb/me.xml index 45e75e95..e6286020 100644 --- a/slides/mongodb/me.xml +++ b/slides/mongodb/me.xml @@ -2,16 +2,18 @@ <slide> <title>About Me</title> -<break lines="7"/> + <image filename="../xdebug/derick-new-512x512.png" align="right" zoom="0.75" pdf-float="1" x-offset="21.3" y-offset="10" pdf-scale="0.25"/> + <break lines="6"/> + <blurb>Derick Rethans</blurb> -<image filename="../xdebug/derick-new-512x512.png" align="right" pdf-float="1" x-offset="21.3" y-offset="10" pdf-scale="0.25"/> + <image filename="../internals/php_foundation.png" align="right" zoom="0.75" pdf-float="1" x-offset="21.3" y-offset="10" pdf-scale="0.25"/> - <blurb>Derick Rethans</blurb> <list> - <bullet>I'm European, living in London</bullet> <bullet>*PHP Foundation*</bullet> <bullet>*Xdebug* &amp; PHP's Date/Time support</bullet> + <bullet>*Infrastructure*</bullet> <bullet>I ♥🌍 maps, I ♥🍺 beer, I ♥🥃 whisky</bullet> <bullet>mastodon: :-:mastodon:-:</bullet> </list> + </slide> diff --git a/slides/mongodb/resources.xml b/slides/mongodb/resources.xml index 16da908a..8bec2721 100644 --- a/slides/mongodb/resources.xml +++ b/slides/mongodb/resources.xml @@ -1,7 +1,8 @@ <slide type="thanks"> +<blurb class="big-centre" >Thank you!</blurb> <break/> -<qrcode>http://derickrethans.nl/talks/:-:talk_id:-:</qrcode> -<break/> +<qrcode size="512">https://derickrethans.nl/talks/:-:talk_id:-:</qrcode> +<break lines="2"/> <blurb align="center" class="pres-url-small">*Slides &amp; Resources*<br/>:-:url:-:</blurb> -<blurb align="center" class="pres-url-small">*Contact*<br/>:-:email:-:—:-:mastodon:-:</blurb> +<blurb align="center" class="pres-url-small">*Contact*<br/>~E-mail:~ :-:email:-:<br/>~Mastodon:~ :-:mastodon:-:</blurb> </slide> diff --git a/templates/default/qrcode.ezt b/templates/default/qrcode.ezt index 78368239..702d193c 100644 --- a/templates/default/qrcode.ezt +++ b/templates/default/qrcode.ezt @@ -1,6 +1,9 @@ {use $node, $pres} +{var $size = get_attribute( $node, 'size' )} +{if !$size}{$size = 290}{/if} {if str_trim( format_text( $pres, $node->nodeValue ) ) == ''} -<img src="/qrcode.php?d=http://derickrethans.nl/talks.html"/> +<img style="width: {$size}px; height: {$size}px" src="/qrcode.php?d=http://derickrethans.nl/talks.html"/> {else} -<img src="/qrcode.php?d={raw format_text( $pres, $node->nodeValue )}"/> +<img style="width: {$size}px; height: {$size}px" src="/qrcode.php?d={raw format_text( $pres, $node->nodeValue )}"/> {/if} +</div>

« previous php.pres (#2515) next »