[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>