Donc comme je l'ai déjà dis, la plupart des modifications effectuées sur le trunk sont des consolidations.

Il y a tout d'abord le lot habituel de corrections de bug.

Les bugs #52926 et #52944 de l'extension zlib, le bug #52947 de l'extension openssl, les bugs #52891 et #45921 de mysqli, les bugs #52891 (oui, le même, ce n'est pas une erreur) et #48082 de mysqlnd, les bugs #52929 et #52944 des filtres ainsi que le bug #52909 des archives phar sont maintenant soit partiellement, soit totalement corrigés.

Je dis partiellement car le bug #52909 n'est en fait pas du tout corrigé, et je suis bien placé pour le savoir.

En effet, c'est moi qui l'ai découvert, et j'ai donc suivi son évolution de très prés.

Le problème est le suivant.

Au niveau du code source C du langage, les objets \phar et \pharData se partage le même constructeur, ce qui fait que la méthode \reflectionMethod::getParameters() de PHP ne sait pas renvoyer les arguments de \phar::__construct() puisqu'elle retourne la liste des arguments de \pharData::__construct().

En effet, \reflectionMethod::getParameters() se base sur une structure spécifique insérés dans le code C de PHP pour fonctionner, et le cas où une même fonction C est partagée par deux fonctions PHP différentes n'est pas gérable par ce système.

Dans un premier temps, le rapport de bug a été fermé, même si le problème était bien reconnu comme tel, car il n'était sois-disant pas possible techniquement de le résoudre.

Évidemment, je n'ai pas été d'accord avec cette décision, et je suis donc allé discuté du problème sur le canal IRC des contributeurs.

Après quelques minutes de discussion, et avec l'appui de Pierre Joye et de quelques autres, je suis parvenu à faire ré-ouvrir le rapport de bug.

Le code C concerné sera donc réécrit afin de résoudre proprement le problème.

Et si j'insiste sur ce point particulier, c'est que c'est la première fois que j'obtiens un tel résultat de cette manière, surtout dans le cadre d'un rapport de bug, et je dois dire que j'ai été très agréablement surpris, puisqu'il n'y a pas si longtemps, je me serais fais proprement jeter.

Il semblerait donc que les contributeurs soient plus ouvert à la discussion, et je ne peux que m'en féliciter et les remercier, surtout s'il ne s'agit pas d'un cas isolé, ce qui reste à confirmer.

Pour en revenir à notre sujet de départ, le reste des modifications effectuées sur le trunk sont des optimisations internes au Zend Engine, la résolution de problèmes rencontrés à la compilation des sources, et également des optimisations au niveau des tests unitaires afin de les rendre plus génériques et indépendants de la plate-forme sur laquelle ils sont exécutés.

Enfin, le fichier NEWS a fait son arrivé dans le trunk.

Ce fichier récapitule sous une forme synthétique l'ensemble des modifications effectuées sur le trunk depuis la mort de PHP 6 et le moins que l'on puisse dire est que les contributeurs n'ont pas chômés.

Au niveau de la liste de diffusion des contributeurs internals@, justement, comme je l'ai déjà indiqué précédemment, le calme est revenu après les débats virulents qui se sont déroulés au sujet de l'implémentation des annotations.

Comme d'habitude dans ce genre de cas,  les discussions se sont éteintes d'elles-mêmes sans qu'aucune décision claire ne soit prise, mais je pense qu'elles reprendront dès qu'une évolution technique sera diffusée, soit dans le sens de la notation docblock, soit dans le sens de la RFC d'origine des annotations.

Cela a d'ailleurs été le cas pour un tout autre sujet, puisqu'il concerne l'utilisation de {} et [] pour accéder à un caractère d'une chaîne.

Au final, il semblerait que les deux notations restent possibles à l'avenir, mais que le traitement de la syntaxe utilisant {} sera optimisé.

Il devrait donc toujours être possible avec la prochaine version majeure de PHP d'écrire $str[42] et $str{42}, ce qui ne manquera pas de ravir les fans de la cohérence au sein du langage, cela dit bien évidement sans la moindre ironie.

D'ailleurs, en parlant de cohérence, le problème de la méthode magique __invoke(), que j'ai déjà évoqué sur ce blog, a fait une apparition fugitive, et il a reçu la réponse habituelle.

Enfin, un patch a été proposé pour simplifier l'utilisation de l'extension snmp en permettant de passer un tableau d'OID en argument des fonctions snmpget() et snmpgetnext(), et il semble en bonne voie pour être accepté.

Cette récapitulation est maintenant terminée, vous pouvez reprendre une activité normale.