mageekblog - Mot-clé - CurryingLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearPHP : les nouvelles du front #430urn:md5:d9933e3a0d8f33642436927e342a96062011-06-08T22:00:00+02:002011-06-09T21:17:00+02:00mageekguyPHP XautoconfCallbackCurryingIlia AlshanetskyLinuxmbstringPECLPHP XPierre JoyeRFCZeev SuraskiZend Engine<p style="margin-top: 0; ">Une nouvelle fois, j'ai du retard dans la rédaction de ce billet.</p>
<p>Il faut dire que le développement de <a href="http://www.php.net">PHP</a> est actuellement dans une période très intense et que je dispose de moins en moins de temps à consacrer à son suivi.</p>
<p>La liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals/">internals@</a>, est la plus directement responsable de cette situation.</p>
<p>Elle était en effet déjà relativement active depuis une vingtaine de jours, mais depuis l'appel au vote de <a href="http://blog.thepimp.net">Pierre Joye</a> pour valider la <abbr title="Request For Comments">RFC</abbr> concernant le <a href="https://wiki.php.net/rfc/releaseprocess">futur processus de release</a> du langage, sa volumétrie a littéralement explosé, puisqu'un peu moins de 500 messages ont été postées sur les dix derniers jours.</p>
<p>De plus, si les discussions sur <a href="http://news.php.net/php.internals/">internals@</a> ont toujours été relativement difficiles à suivre de part le manque de modération, depuis quelques jours, c'est carrément l'anarchie.</p>
<p>En effet, il y a souvent plusieurs discussions en parallèle sur le même thème, suite à des dérives dans les débats ainsi que des digressions sans rapport qui génère d'autres fils de discussion, sans parler des échanges d'amabilités entre les contributeurs, les contestations, les trolls, j'en passe et des meilleures.</p>
<p>Je n'ai donc pas le temps d'éplucher tout cela dans le détail, et d'ailleurs, je ne suis même pas convaincu que cela en vaille la peine.</p>
<p>Je vais donc pour une fois être obligé de survoler les débats pour en retirer l'essentiel, en espérant ne pas passer à côté de choses importantes.</p> <p>Tout d'abord, <a href="http://news.php.net/php.internals/52482">il a été demandé</a> s'il était pertinent de porter des extensions <a href="http://pecl.php.net">PECL</a>, donc écrite en C, vers <a href="http://www.php.net">PHP</a> afin que leurs fonctionnalités soient disponibles même si l'extension correspondante ne peut pas être installée, et s'il y avait un moyen d'automatiser, au moins partiellement ce portage.</p>
<p>Il a été répondu que cela était possible pour certaines extensions, mais qu'il n'y avait pas de méthode générique pour le faire et qu'il y aurait évidemment une perte de performance significative et que cela était un énorme travail. La discussion est ensuite partie <a href="http://news.php.net/php.internals/52491">gentiment en vrille</a>, les participants ayant décidé de disserter sur la pertinence d'écrire ou non des extensions en C pour <a href="http://www.php.net">PHP</a>.</p>
<p>Il a été ensuite proposé de r<a href="http://news.php.net/php.internals/52554">emplacer l'implémentation actuelle de mbstring</a> au sein du langage, qui présente un certain nombre d'inconvénients décrits dans la <a href="https://wiki.php.net/rfc/altmbstring"><bbr title="Request For Comments">RFC correspondante</bbr></a>.</p>
<p>Cette proposition revient de loin, puisque le sujet avait été évoqué pour la première fois en 2009, mais pour autant, pour l'instant, rien n'a été décidé et il n'est donc pas dit que cette nouvelle implémentation soit disponible rapidement, que ce soit au sein de <a href="http://www.php.net">PHP</a> ou sous la forme d'une extension.</p>
<p>La discussion au sujet de l'utilisation d'un DCVS pour gérer le code source de PHP est également revenu sur le devant de la scène, mais tout comme dans le cas de l'implémentation alternative de mbstring, rien n'a avancé, même si une <abbr title="Request For Comments">RFC</abbr> devrait <a href="http://news.php.net/php.internals/52643">être rédigée rapidement</a>.</p>
<p>Une autre RFC a été exhumé du wiki, puisque <a href="http://ilia.ws/">Ilia Alshanetsky</a> a <a href="http://news.php.net/php.internals/52606">proposé</a> d'intégrer un patch datant de juillet 2008 a<a href="https://wiki.php.net/rfc/zendsignals">méliorant la gestion des signaux</a> au niveau du Zend Engine à PHP 5.4.</p>
<p>Sa suggestion a été accueillie favorablement, et le patch est actuellement <a href="http://news.php.net/php.internals/52907">en train d'être mis à jour</a> et corrigé en vu de son intégration à la prochaine version du langage.</p>
<p>La <abbr title="Request For Comments"><a href="http://news.php.net/php.internals/52834">RFC</a></abbr> concernant les <a href="http://en.wikipedia.org/wiki/Enumerated_type">énumérations</a> a elle aussi refait surface et devrait évoluer prochainement, mais comme d'habitude, il y a eu plus de questions soulevée que de réponses trouvées à son sujet.</p>
<p>Enfin, une <abbr title="Request For Comments">RFC</abbr> concernant <a href="https://wiki.php.net/rfc/session-oo">l'intégration d'une classe de gestion de sessions</a> a été soumise à l'avis des contributeurs, mais elle n'a pas pour l'instant suscité énormément d'intérêt parmi eux.</p>
<p>Plus exotique, il a été demandé de pouvoir <a href="http://news.php.net/php.internals/52523">désactiver le logo</a> de <a href="http://www.php.net">PHP</a> à la compilation, mais j'avoue ne pas en avoir compris la raison, ni avoir eu envie de la chercher.</p>
<p>Il y a également eu un débat <a href="http://news.php.net/php.internals/52513">au sujet de l'infini,</a> et plus précisément sur ce que devait donner comme résultat les expressions <code>INF == INF</code> et <code>INF === INF</code>, et pour l'instant, le résultat est indécidable.</p>
<p>En effet, certains veulent un comportement identique à celui de NULL, à savoir que <code>INF == INF</code> et <code>INF === INF</code> soient égaux à <code>TRUE</code>, tandis que d'autres désirent un comportement similaire à celui du SQL et que <code>INF == INF</code> retourne <code>FALSE</code> tandis que <code>INF === INF</code> retourne <code>TRUE</code>.</p>
<p>L'un des deux plus gros débat de ces <s>10</s> 12 derniers jours a été sans conteste celui portant sur la <abbr title="Request For Comments">RFC</abbr> relative au futur processus de release de <a href="http://www.php.net">PHP</a> et le vote qui en a découlé.</p>
<p>Il semble en effet que le consensus soit encore loin, au vu des réactions que la <a href="https://wiki.php.net/rfc/releaseprocess">proposition</a>, pourtant rédigé par les principaux développeurs actifs du langage, a suscité.</p>
<p>Les principaux points d'achoppement concerne assez paradoxalement le système de vote, à la fois celui mis en place pour entériner la <abbr title="Request For Comments">RFC</abbr> que celui décrit par la <abbr ttile="Request For Comments">RFC</abbr>, et la question du support des versions du langage sur le long terme.</p>
<p>Il y a donc clairement encore un gros travail d'évangélisation à réaliser avant que cette proposition soit adoptée, d'autant que le vote est <a href="https://wiki.php.net/rfc/releaseprocess/vote">actuellement suspendu</a>, apparemment au moins jusqu'à ce qu'un outil qui convienne à la majorité des contributeurs soit mis en place pour le réaliser.</p>
<p>Cependant, le plus gros débat a été sans contestation possible celui concernant la possibilité de définir des tableaux via<a href="http://news.php.net/php.internals/52566"> une notation plus courte</a>, c'est à dire sans passer par le mot-clef <code>array et</code> à l'aide de <code>[</code> et <code>]</code>.</p>
<p>Il a généré à lui seul pas loin de 150 messages, sans compter ceux qui ont été échangé dans le cadre des discussions annexes qu'il a provoqué.</p>
<p>Les choses avaient pourtant bien commencé, puisqu'un vote avait été lancé très rapidement pour la valider définitivement, mais les choses se sont gâtées très rapidement.</p>
<p>En (très) résumé, l'intérêt de la proposition a été remis en cause une nouvelle fois, ainsi que la syntaxe proposée, et des modifications substantielles et parfois formalisées, comme <a href="https://wiki.php.net/rfc/objectarrayliterals">cette <abbr ttile="Request For Comments">RFC</abbr></a> suggérant l'utilisation de la notation <abbr title="JavaScript Object Notation"><a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">JSON</a></abbr> ou l'utilisation de <code>:</code> au lieu de <code>=></code> pour la définition des paires clef/valeur dans un tableau.</p>
<p>De plus, la procédure de vote elle-même a été remise en cause, vu que le débat a été pollué par celui relatif au processus de release du langage.</p>
<p>Les contributeurs sont donc très loin d'être d'accord entre eux au sujet de cette fonctionnalité, et d'après mes dernières informations, suite <a href="http://news.php.net/php.internals/52963">aux</a> <a href="http://news.php.net/php.internals/52965">remarques</a> de <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">Zeev Suraski</a>, tout comme dans le cas du processus de release, il semblerait qu'un nouveau vote sera effectué lorsque les choses auront été mises à plat à ce niveau. </p>
<p>Certain ont également <a href="http://news.php.net/php.internals/52812">tenté de faire avancer les choses</a> sur le front de la prochaine version <q>significative</q> du langage, la <s>mal</s> bien nommée 5.4.</p>
<p>Malheureusement, cette discussion, qui promettait pourtant d'être intéressante, a également été polluée par les problèmes posés par la procédure de vote et le processus de release, et n'a donc pas débouchées sur des choses significatives.</p>
<p><a href="http://fr.wikipedia.org/wiki/Andi_Gutmans">Andi Gutmans</a> a de son côté <a href="http://news.php.net/php.internals/52898">proposé</a> d'intégrer des extensions permettant d'apporter à <a href="http://www.php.net">PHP</a> nativement des technologies modernes, comme par exemple <a href="http://www.mongodb.org/">MongoDB</a>, un serveur de base de données utilisant les principes du <a href="http://en.wikipedia.org/wiki/Nosql">NoSQL</a>.</p>
<p>Les contributeurs ne parviennent cependant pas à se mettre d'accord <a href="http://news.php.net/php.internals/53041">sur l'intérêt de faire cela</a>, ni sur les critères qui permettrait de décider les extensions PECL qui seraient ainsi ajoutée au cœur du langage.</p>
<p>Et ce n'est pas la proposition d'intégrer une syntaxe <a href="https://wiki.php.net/rfc/currying">rappelant la programmation fonctionnelle</a> sous l'appellation de <a href="http://en.wikipedia.org/wiki/Currying">currying</a> qui a <a href="http://news.php.net/php.internals/53127">calmé les débats</a>, bien au contraire, et encore moins celle visant à <a href="http://news.php.net/php.internals/52940">pouvoir invoquer un </a><code><a href="http://news.php.net/php.internals/52940">callback</a></code>, le clivage entre les contributeurs progressistes et les ceux très traditionnalistes étant toujours présent.</p>
<p>Grâce au currying, il deviendrait possible d'écrire par exemple :</p>
<blockquote><pre><code><?php
// curry et ... sont des mots-clef !
func = curry str_replace(..., ..., "foobar");
$func('foo', 'bar'); // barbar
$func('foo', 'baz'); // bazbar
?></code></pre></blockquote>
<p>La possiblité d'invoquer un <code><a href="http://php.net/manual/fr/language.pseudo-types.php">callback</a></code> permettrait quand à elle de faire :</p>
<blockquote><pre><code><?php
class Hello { function print($who) { echo 'Hello ' . $who . PHP_EOL; } }
$callback = array('Hello', 'print');
$callback('world');
?></code></pre></blockquote>
<p><a href="http://patrickallaert.blogspot.com/">Patrick Allaert</a> a également proposé un patch qui a fait débat parmi les contributeurs et qui a pour but la génération d'une erreur de type <code>E_NOTICE</code> lors de la conversion d'un tableau en chaîne de caractères ayant la valeur <code>Array</code>.</p>
<p>Le patch a été bien accueilli, mais certain aurait voulu aller encore plus loin et générer une erreur d'un niveau plus élevé, mais la volonté de conserver une compatibilité avec le code existant rend cela impossible, et en conséquence, le code correspondant devrait donc être <a href="http://news.php.net/php.internals/52773">prochainement intégré</a> dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Pour continuer dans la lignée du déréférencement des tableaux et des constructeurs, il a également <a href="http://news.php.net/php.internals/53137">été proposé</a> de généraliser encore plus le principe des interfaces fluides en permettant d'appeler une instance de classe dès qu'elle a été clonée, et de rendre l'instruction <code>foreach</code> plus souple, de la manière suivante :</p>
<blockquote><pre><code><?php
$tomorrow = (clone $today)->add($one_day);
foreach ($arrays as list($e1, $e2, $e3)) {}
// Pour remplacer :
foreach ($arrays as $array) { list($e1, $e2, $e3) = $array; }
?>
</code></pre></blockquote>
<p>Ces deux propositions, dont l'une reprend un principe <a href="https://wiki.php.net/rfc/instance-method-call">déjà soumis</a> à la communauté par le passé, n'ont pour l'instant pas suscité de grosses réactions de la part des développeurs.</p>
<p>Enfin, une question par rapport à la pertinence de développer et d'utiliser <a href="http://www.caucho.com/resin-3.0/quercus/">Quercus</a>, un équivalent au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> et basé sur la <abbr title="Java Virtual Machine"><a href="http://fr.wikipedia.org/wiki/JVM_(informatique)">JVM</a>,</abbr> <a href="http://news.php.net/php.internals/52526">a été posée</a>, et les contributeurs ont répondu qu'ils ne voyaient pas énormément d'intérêt à investir du temps dans un projet de ce type.</p>
<p><a href="http://news.php.net/php.internals/">La liste de diffusion des contributeurs</a> est donc en pleine ébullition, et moi qui me plaignait de son calme il y a quelques temps, j'en viendrais presque à regretter cette époque tant j'ai du mal à suivre le rythme actuel, d'autant que l'activité sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> n'est pas en reste.</p>
<p>Ce dernier a en effet subit pas loin de 70 modifications, dont presque un tiers sont des corrections, puisque les bugs <a href="http://bugs.php.net?id=54934">#54934</a>,
<a href="http://bugs.php.net?id=54137">#54137</a>,
<a href="http://bugs.php.net?id=53848">#53848</a>,
<a href="http://bugs.php.net?id=54601">#54601</a>,
<a href="http://bugs.php.net?id=54946">#54946</a>,
<a href="http://bugs.php.net?id=52496">#52496</a>,
<a href="http://bugs.php.net?id=54957">#54957</a>,
<a href="http://bugs.php.net?id=54910">#54910</a>,
<a href="http://bugs.php.net?id=54484">#54484</a>,
<a href="http://bugs.php.net?id=52104">#52104</a>,
<a href="http://bugs.php.net?id=54970">#54970</a>,
<a href="http://bugs.php.net?id=54896">#54896</a>,
<a href="http://bugs.php.net?id=54918">#54918</a>,
<a href="http://bugs.php.net?id=54929">#54929</a>,
<a href="http://bugs.php.net?id=54609">#54609</a>,
<a href="http://bugs.php.net?id=51819">#51819</a>,
<a href="http://bugs.php.net?id=51997">#51997</a>,
<a href="http://bugs.php.net?id=47160">#47160</a>,
<a href="http://bugs.php.net?id=55007">#55007</a>,
<a href="http://bugs.php.net?id=54992">#54992</a> et
<a href="http://bugs.php.net?id=53540">#53540</a> ont été supprimés.</p>
<p>La plupart des autres modifications ne sont cependant que des optimisations, du nettoyage ou bien de l'ajout ou des mises à jours de tests unitaires, même si certaines d'entres elles visent à corriger des problèmes potentiellement sérieux tel que des crashs du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Pour finir, la version minimale d'<code>autoconf</code> supportée par <a href="http://www.php.net">PHP</a> est dorénavant la 2.59, car la version 2.60 n'est pas disponible nativement dans certaines distributions de <a href="http://fr.wikipedia.org/wiki/Linux">Linux</a>, telle que <a href="http://fr.wikipedia.org/wiki/CentOS">Centos</a>, <a href="http://fr.wikipedia.org/wiki/RHEL"><abbr title="Red Hat Enterprise Linux">RHEL</abbr></a> ou Oracle Linux 5.6.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/06/08/PHP-%3A-les-nouvelles-du-front-430#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/263