[presentations] master: Update for stubs and fast zpp
[email protected] (Derick Rethans) Tue, 13 Feb 2024 14:25:38 +0000
| Newsgroups | php.pres |
|---|---|
| Message-ID | <[email protected]> |
Author: Derick Rethans (derickr) Date: 2024-02-13T14:11:47Z Commit: https://github.com/php/presentations/commit/8621aa0483753e79e8525fa12db2ad8e6b307c62 Raw diff: https://github.com/php/presentations/commit/8621aa0483753e79e8525fa12db2ad8e6b307c62.diff Update for stubs and fast zpp Changed paths: A phpext-confoo24.xml A slides/internals/extension.c-part1-arginfo.xml M slides/internals/extension.c-part1.xml M slides/internals/extension.c-part2.xml M slides/internals/rdp_simplify-part1.xml M slides/internals/rdp_simplify-part1b.xml Diff: diff --git a/phpext-confoo24.xml b/phpext-confoo24.xml new file mode 100644 index 00000000..f425f161 --- /dev/null +++ b/phpext-confoo24.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<presentation css="derick.css"> +<topic>PHP</topic> +<title>Introduction into PHP Extensions</title> +<event>ConFoo 2024</event> +<location>Montréal, Canada</location> +<date>February 23rd, 2024</date> +<speaker>Derick Rethans</speaker> +<email>[email protected]</email> +<twitter>derickr</twitter> +<mastodon>@[email protected]</mastodon> +<url>https://derickrethans.nl/talks/phpext-confoo24</url> +<joindin></joindin> +<slide>slides/mongodb/title.xml</slide> +<slide>slides/mongodb/me.xml</slide> + +<slide>slides/internals/extension-agenda.xml</slide> +<slide>slides/internals/extension-agenda2.xml</slide> +<slide>slides/internals/extension-what1.xml</slide> +<slide>slides/internals/extension-why1.xml</slide> +<slide>slides/internals/extension-why-wrap.xml</slide> +<slide>slides/internals/extension-why-not-possible.xml</slide> +<slide>slides/internals/extension-why-speed.xml</slide> + +<slide>slides/internals/extension-why-not1.xml</slide> + +<slide>slides/internals/rdp-intro.xml</slide> +<slide>slides/internals/rdp-intro2.xml</slide> +<slide>slides/internals/rdp-intro3.xml</slide> +<slide>slides/internals/rdp-intro4.xml</slide> + +<slide>slides/internals/extension-parts.xml</slide> +<slide>slides/internals/config.m4.xml</slide> +<slide>slides/internals/config.w32.xml</slide> +<slide>slides/internals/phpize.xml</slide> + +<slide>slides/internals/extension.h.xml</slide> +<slide>slides/internals/extension.c-part1.xml</slide> +<slide>slides/internals/extension.c-part1-arginfo.xml</slide> +<slide>slides/internals/extension.c-part2.xml</slide> +<slide>slides/internals/extension.c-part3.xml</slide> + +<slide>slides/internals/function.xml</slide> +<slide>slides/internals/rdp_simplify-part1.xml</slide> +<slide>slides/internals/rdp_simplify-zedval.xml</slide> +<slide>slides/internals/rdp_simplify-part1b.xml</slide> +<slide>slides/internals/rdp_simplify-convert-data.xml</slide> +<slide>slides/internals/rdp_simplify-run-algorithm.xml</slide> +<slide>slides/internals/rdp_simplify-php.xml</slide> +<slide>slides/internals/rdp_simplify-c.xml</slide> +<slide>slides/internals/rdp_simplify-return-result.xml</slide> +<slide>slides/internals/rdp_simplify-return-scalars.xml</slide> +<slide>slides/internals/memory-management.xml</slide> + +<slide>slides/internals/tests.xml</slide> +<slide>slides/internals/rdp-test.xml</slide> + +<slide>slides/internals/debug.xml</slide> + +<slide>slides/mongodb/questions.xml</slide> +<slide>slides/mongodb/resources.xml</slide> +</presentation> diff --git a/slides/internals/extension.c-part1-arginfo.xml b/slides/internals/extension.c-part1-arginfo.xml new file mode 100644 index 00000000..7827489c --- /dev/null +++ b/slides/internals/extension.c-part1-arginfo.xml @@ -0,0 +1,31 @@ +<slide> +<title>Extension Set-Up</title> +<subtitle>Function Definitions</subtitle> + +<blurb>%php_geospatial.stub.php%</blurb> +<example><![CDATA[ +<?php +/** @generate-function-entries */ +function rdp_simplify(array $points, float $epsilon): array {} +]]></example> + +<break lines="1"/> +<blurb>Generates %php_geospatial_arginfo.h%:</blurb> +<example><![CDATA[ +/* This is a generated file, edit the .stub.php file instead. + * Stub hash: e128dccdbd9aa407d95c5b62e8000cb12d0bffa3 */ + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rdp_simplify, 0, 2, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, points, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, epsilon, IS_DOUBLE, 0) +ZEND_END_ARG_INFO() + +ZEND_FUNCTION(rdp_simplify); + +static const zend_function_entry ext_functions[] = { + ZEND_FE(rdp_simplify, arginfo_rdp_simplify) + ZEND_FE_END +}; +]]></example> + +</slide> diff --git a/slides/internals/extension.c-part1.xml b/slides/internals/extension.c-part1.xml index bebc363e..ad4eba4c 100644 --- a/slides/internals/extension.c-part1.xml +++ b/slides/internals/extension.c-part1.xml @@ -7,25 +7,12 @@ #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" + #include "php_geospatial.h" +#include "php_geospatial_arginfo.h" + #include "Zend/zend_exceptions.h" #include "ext/spl/spl_exceptions.h" ]]></example> -<blurb>Argument Information:</blurb> -<example><![CDATA[ -ZEND_BEGIN_ARG_INFO_EX(rdp_simplify_args, 0, 0, 2) - ZEND_ARG_INFO(0, pointsArray) - ZEND_ARG_INFO(0, epsilon) -ZEND_END_ARG_INFO() -]]></example> - -<blurb>List of functions:</blurb> -<example><![CDATA[ -const zend_function_entry geospatial_functions[] = { - PHP_FE(rdp_simplify, rdp_simplify_args) - { NULL, NULL, NULL } -}; -]]></example> - </slide> diff --git a/slides/internals/extension.c-part2.xml b/slides/internals/extension.c-part2.xml index 8c6a1311..f1b7fe8c 100644 --- a/slides/internals/extension.c-part2.xml +++ b/slides/internals/extension.c-part2.xml @@ -9,7 +9,7 @@ zend_module_entry geospatial_module_entry = { STANDARD_MODULE_HEADER, #endif "geospatial", - geospatial_functions, + ext_functions, PHP_MINIT(geospatial), NULL, NULL, diff --git a/slides/internals/rdp_simplify-part1.xml b/slides/internals/rdp_simplify-part1.xml index 919dd0c3..a141483e 100644 --- a/slides/internals/rdp_simplify-part1.xml +++ b/slides/internals/rdp_simplify-part1.xml @@ -6,23 +6,20 @@ PHP_FUNCTION(rdp_simplify) { *zval* *points_array; *double* epsilon; - - if (*zend_parse_parameters*(ZEND_NUM_ARGS() TSRMLS_CC, *"zd"*, &points_array, &epsilon) - == FAILURE) { - return; - } - - if (Z_TYPE_P(points_array) != IS_ARRAY) { - return; - } + + *ZEND_PARSE_PARAMETERS_START*(2, 2) + Z_PARAM_*ARRAY*(points_array) + *Z_PARAM_*DOUBLE(epsilon) + ZEND_PARSE_PARAMETERS_END(); ]]></example> -<break/> -<blurb>%zend_parse_parameters%</blurb> +<break lines="3"/> + <list> - <bullet>A format letter for every type</bullet> + <bullet>A different macro for each different data type</bullet> <bullet>Matched with a C data type</bullet> - <bullet>Cleaned up for you</bullet> + <bullet>Tests for type matches</bullet> + <bullet>Can deal with optional arguments too</bullet> </list> </slide> diff --git a/slides/internals/rdp_simplify-part1b.xml b/slides/internals/rdp_simplify-part1b.xml index bd817493..bdf7329c 100644 --- a/slides/internals/rdp_simplify-part1b.xml +++ b/slides/internals/rdp_simplify-part1b.xml @@ -2,18 +2,22 @@ <title>Parsing Input Parameters</title> <table> -<tr><th>letter</th><th>variable</th><th>C data-type</th></tr> -<tr><td>a</td><td>array</td><td>%zval*%</td></tr> -<tr><td>b</td><td>boolean</td><td>%zend_bool%</td></tr> -<tr><td>d</td><td>double</td><td>%double%</td></tr> -<tr><td>l</td><td>long</td><td>%zend_long%</td></tr> -<tr><td>O</td><td>object of specific type</td><td>%zval*%, %zend_class_entry%</td></tr> -<tr><td>P</td><td>path</td><td>%zend_string*%</td></tr> -<tr><td>s</td><td>string</td><td>%char*%, %size_t%</td></tr> -<tr><td>S</td><td>string</td><td>%zend_string*%</td></tr> -<tr><td>z</td><td>the actual zval</td><td>%zval*%</td></tr> +<tr><th>macro</th><th>variable</th><th>C data-type</th></tr> +<tr><td>Z_PARAM_ARRAY</td><td>array</td><td>%zval*%</td></tr> +<tr><td>Z_PARAM_ARRAY_HT</td><td>array</td><td>%HashTable%</td></tr> +<tr><td>Z_PARAM_BOOL</td><td>boolean</td><td>%zend_bool%</td></tr> +<tr><td>Z_PARAM_DOUBLE</td><td>double</td><td>%double%</td></tr> +<tr><td>Z_PARAM_LONG</td><td>long</td><td>%zend_long%</td></tr> +<tr><td>Z_PARAM_OBJECT_OF_CLASS</td><td>object of specific type</td><td>%zval*%, %zend_class_entry%</td></tr> +<tr><td>Z_PARAM_PATH</td><td>path</td><td>%zend_string*%</td></tr> +<tr><td>Z_PARAM_STRING</td><td>string</td><td>%char*%, %size_t%</td></tr> +<tr><td>Z_PARAM_STR</td><td>string</td><td>%zend_string*%</td></tr> </table> +<break lines="2"/> +<blurb class="centre">%docs/parameter-parsing-api.md%</blurb> + +<break lines="2"/> <image filename="inputs.jpg" attr="Clive Darra - https://www.flickr.com/photos/fsse-info/3414368958/ - CC-BY-SA"/> </slide>