mageekblog - Mot-clé - PHP XLe 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearLa feuille de route officielle de PHP 5.4urn:md5:44bd0f1597dfdbfbc7fd5a37a2b83a822011-06-21T13:15:00+02:002011-06-21T15:20:36+02:00mageekguyPHP Xinternals@PHPPHP XRasmus LerdorfRobert EiseleStephan Marrtraitstrunk<p>Peu de gens semblent s'en rendre compte, mais la façon dont <a href="http://www.php.net">PHP</a> est développé évolue fortement depuis quelques années.</p>
<p>De nouveaux outils et processus ont été mis en place, dans l'optique de structurer plus fortement la conception fonctionnelle et technique du langage.</p>
<p>Le <a href="http://wiki.php.net">wiki</a> est l'un de ces outils, et s'il a été considérablement sous-utilisé à mon sens depuis sa création, il devient depuis quelques temps une vraie mine d'or pour celui qui souhaite trouver des informations sur le développement du langage.</p>
<p>Pour preuve, j'y ai trouvé aujourd'hui <a href="https://wiki.php.net/todo/php54">la feuille de route de PHP 5.4</a>, dont la version alpha 1 <a href="http://blog.mageekbox.net/?post/2011/06/20/PHP-5.4-alpha-1"><del>est sortie</del> a été annoncée il y a peu</a>, et elle est très intéressante.</p> <p>Elle nous apprend en effet que la première <q>release candidate</q> est prévue pour septembre 2011, et qu'elle devrait être suivie par d'autres toutes les deux semaines jusqu'à ce que la stabilité du langage soit jugée satisfaisante.</p>
<p>D'ici là, nous devrions pouvoir nous mettre sous la dent fin juillet une autre version alpha, suivie par une beta fin août.</p>
<p>Le calendrier est donc clair, mais j'éviterais de trop m'y fier, car par le passé, de tels jalons ont déjà été posés et n'ont jamais été atteints.</p>
<p>La situation d'aujourd'hui est cependant très différente de celle de l'époque, car beaucoup de problèmes ont été résolus depuis, notamment au niveau de la gestion du projet.</p>
<p>La <abbr title="Request For Comments">RFC</abbr> relative <a href="https://wiki.php.net/rfc/releaseprocess">au processus de release</a> du langage est en cours de validation, et <a href="https://wiki.php.net/rfc/releaseprocess/vote">les premiers votes</a> semblent indiquer un consensus majeur autour de cette question, même si le nombre de votants est relativement faible pour le moment et que des contributeurs historiques ne sont pas encore exprimés.</p>
<p>J'ai donc bon espoir que le calendrier soit finalement respecté, même si je prédis quelques difficultés d'ici la sortie de la version finale, d'autant qu'elle est sous la responsabilité des <q>release managers</q> Stanislav Malyshev, <abbr title="Also Known As">aka</abbr> <a href="http://www.ohloh.net/p/php/contributors/120259094156">stas</a>, et David Soria Parra, <abbr title="Also Known As">aka</abbr> <a href="http://www.ohloh.net/p/php/contributors/120259169917">dsp</a>, qui sont plus actifs sur <a href="http://news.php.net/php.internals">internals@</a> que sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Outre le calendrier, la feuille de route nous apprend également ce qu'il reste à faire au niveau technique et fonctionnel d'ici septembre 2011.</p>
<p>Elle nous apprend notamment que faire passer un maximum de tests unitaires au vert reste une préoccupation forte depuis <a href="http://news.php.net/php.internals/52328">la remarque</a> de <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> à ce sujet.</p>
<p>La gestion des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, et plus particulièrement de leur interaction avec <a href="http://fr.php.net/reflection">l'introspection</a>, est aussi au menu des contributeurs.</p>
<p>Ce point semble d'ailleurs être relativement délicat, car les choses ne semblent pas avoir évoluées depuis ma discussion à ce sujet avec <a href="http://www.stefan-marr.de">Stephan Maar</a>, l'auteur de l'implémentation des traits dans <a href="http://www.php.net">PHP</a>, lors du <a href="http://blog.mageekbox.net/?post/2010/12/06/Nouvelle-conf%C3%A9rence-%21">rendez-vous AFUP correspondant</a>.</p>
<p>Cela confirme cependant que les traits feront bien partis de la version 5.4, sauf problème majeur.</p>
<p>Du nettoyage est en outre prévu, notamment au niveau des <abbr title="Server Application Programming Interface"><a href="http://en.wikipedia.org/wiki/Server_Application_Programming_Interface">SAPI</a></abbr> qui ne sont plus maintenues et qui devraient donc être supprimées.</p>
<p>Il reste de plus quelques patches à intégrer, relatif à la gestion des signaux au niveau du Zend Engine et à la gestion des erreurs, qui devraient être plus explicite avec cette nouvelle version.</p>
<p>Un <a href="https://wiki.php.net/rfc/instance-method-call">patch</a> permettant également de faire appel à un attribut ou une méthode de classe aussitôt un appel à l'opérateur <code>new</code> devrait également être intégré.</p>
<p>Enfin, il faut également que les contributeurs s'assurent que la documentation relative à l'installation de PHP 5.4 est à jour.</p>
<p>La liste des choses à faire au niveau technique est donc encore longue, et la liste fonctionnelle n'est pas en reste, car de nombreux points, souvent très conflictuels au sein de la communauté, doivent encore être évoqués.</p>
<p>Les contributeurs semblent vouloir entre autre réserver un espace de nom au langage, qui pourrait être <code>\php</code>.</p>
<p>Cependant, pour l'instant, il n'est pas précisé l'usage qu'il pourrait en être fait à l'avenir dans la feuille de route, et je n'ai pas encore pris le temps de rechercher des informations complémentaires.</p>
<p>Ils doivent également discuter de la pertinence de transformer <code>int</code>, <code>float</code> et les autres types natifs en mot réservé, dans l'optique de mettre en place un jour le contrôle de type sur les arguments.</p>
<p>L'idée n'est donc pas encore abandonnée, malgré les débats houleux qu'elle a suscité par le passé parmi les développeurs de <a href="http://www.php.net">PHP</a>.</p>
<p>L'erreur <code>E_STRICT</code> pourrait de plus faire parti de <code>E_ALL</code> avec PHP 5.4, et il pourrait être possible d'avoir au sein de <code>$_POST</code> les données brutes reçues par le serveur.</p>
<p>Le support de la notation binaire pour les entiers est également au programme et viendrait, si elle était adoptée, compléter la notation octale et hexadécimale.</p>
<p>Les <q>magic quotes</q>, l'un des plus gros boulets historiques du langage, pourrait de plus venir s'ajouter à la liste des boulets supprimés, qui contient déjà les directives <code>safe_mode</code>, <code>register_globals</code> ainsi qu ses dérivés.</p>
<p>En terme de syntaxe, la possibilité d'utiliser une syntaxe plus courte pour la définition des tableaux devrait être à nouveau discutée, peut être grâce à l'arrivée sur <a href="http://news.php.net/php.internals">internals@</a> de <a href="http://www.xarg.org">Robert Eisele</a>, l'auteur du <a href="http://www.xarg.org/2011/06/php-hacking/"><q>fork</q></a> récent de <a href="http://www.php.net">PHP</a> qui intègre une telle fonctionnalité.</p>
<p>Et si les discussions aboutissent, PHP 5.4 devrait disposer d'un serveur web intégré destiné au développement (et uniquement au développement).</p>
<p>Enfin, les contributeurs veulent également parler de l'utilisation d'une classe native pour la gestion des sessions, et du fait de pouvoir imposer un type <code>callback</code> pour un argument de fonction ou de méthode.</p>
<p>Le programme pour les mois à venir est donc précis, mais chargé.</p>http://blog.mageekbox.net/?post/2011/06/21/La-feuille-de-route-officielle-de-PHP-5.4#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/266PHP 5.4 alpha 1urn:md5:571ae97775ccf62792ece5e650aab7e42011-06-20T00:04:00+02:002011-06-21T08:32:11+02:00mageekguyPHP XalphaPHP 5.4PHP X<p style="margin-top: 0;">Non, nous ne sommes pas le 1<sup>er</sup> avril, non, je ne vous fais pas une blague, non, vous ne rêvez pas, et oui, vous avez bien lu le titre de ce billet.</p>
<p>Aujourd'hui, plus d'un an après <a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">l'abandon du développement de PHP 6</a>, aux alentours de 22 h 15 heure française, <a href="http://php100.wordpress.com/">Stanislav Malyshev</a> a donné officiellement naissance à <a href="http://svn.php.net/viewvc?view=revision&revision=312301">PHP 5.4 alpha 1</a>.</p>
<p>Il semble donc se confirmer le fait que la prochaine version majeure de PHP portera un numéro de version mineure, comme sa sa grande sœur 5.3, mais après tout, le langage n'est plus à un paradoxe près.</p>
<p>La liste des ajouts, corrections et autres modifications apportées par cette version est en effet <a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup">assez conséquente</a>, et je trouve donc étrange d'en faire une version mineure et non une majeure, même s'il ne s'agit que d'une alpha, et qu'en conséquence, beaucoup de choses peuvent changer d'ici la version finale.</p> <p>Il semble cependant raisonnable de tabler sur notamment un support des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, le support de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, la possibilité d'écrire <code>maFonction()[0]</code> et d'utiliser <code>$this</code> avec les fermetures lexicales.</p>
<p>De plus, la console de <a href="http://www.php.net">PHP</a> ne devrait plus se terminer lorsqu'une erreur fatale est générée et autoconf 2.59+ est maintenant supporté.</p>
<p>Des boulets historiques de PHP vont de plus disparaitre avec cette version tels que les directives <code>safe_mode</code>, <code>register_globals</code> et <code>register_long_array </code>ainsi que le passage explicite d'argument par référence.</p>
<p>Par ailleurs, un gros travail d'optimisation a été réalisé, et cette version de PHP devrait être significativement plus rapide que les précédentes, et moins gourmande en mémoire.</p>
<p>Enfin, le support de Windows a été grandement amélioré, et il devrait être à l'avenir plus simple de compiler le langage sur cette plate-forme.</p>
<p>Et cette liste est loin d'être exhaustive, puisqu'au moment de la rédaction de ce billet, le fichier décrivant les modifications subit par le langage fait plus de 6000 lignes, réparties entre les ajouts de fonctionnalités, les corrections de bugs, des améliorations d'extensions et les optimisations apportées au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Il faudra cependant attendre encore quelques temps avant de pouvoir profiter de tout cela en production, puisque la version finale est pour l'instant prévu pour le milieu du quatrième trimestre de cette année.</p>
<p>Je suis bien évidement très heureux que cette version pointe enfin officiellement le bout de son nez.</p>
<p>Cependant, je dois avouer que cette naissance ne se passe pas si bien que je l'aurais voulu.</p>
<p>En effet, la communauté PHP semble toujours aussi divisée, entre ceux qui cherchent à faire évoluer le langage, et ceux qui au contraire veulent le contraindre à la stabilité, pour ne pas dire l'immobilisme pour les cas les plus extrêmes.</p>
<p>Pour preuve, l<a href="https://wiki.php.net/rfc/releaseprocess">a RFC relative au processus de release</a> du langage n'est toujours pas validée, malgré les efforts de ses auteurs, et vu d'avion, la communauté semble être comme un paquebot sans gouvernail dirigé par un équipage de mutins qui aurait mis le capitaine à fond de cales.</p>
<p><a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">La mort de PHP 6</a> n'a donc pas à ce jour réussi à créer une union sacré au sein des contributeurs, ou à tout le moins à apporter de la rigueur et un minimum de consensus dans le développement de <a href="http://www.php.net">PHP</a>, malgré les efforts déployés pour cela par toute une partie des contributeurs et qui ont notamment <del>lutté</del> milité pour la mise en place du <a href="http://wiki.php.net">wiki</a>, des <a href="http://wiki.php.net/rfc">RFC</a>, et pour que les utilisateurs et les développeurs <q>non historiques</q> du langage aient la possibilité d'influencer sur son développement.</p>http://blog.mageekbox.net/?post/2011/06/20/PHP-5.4-alpha-1#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/265PHP : 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/263PHP : les nouvelles du front #410urn:md5:674789d1979473e22253625e233c87422011-05-15T22:00:00+02:002011-05-16T08:30:17+02:00mageekguyPHP Xannotationsinternals@PHP XPierre JoyeRasmus Lerdorftrunk<p>Encore une fois, j'ai un peu de retard dans la publication de ce billet.</p>
<p>J'ai cependant une <s>bonne</s> excuse, puisque c'est actuellement un peu le chaos au sein de la communauté des développeurs de <a href="http://www.php.net">PHP</a>.</p>
<p>J'ai donc différé la rédaction de ce billet, dans l'espoir d'avoir une vision plus claire de la situation et des informations plus fiables. </p>
<p>Cependant, je suis au regret de devoir dire que ma stratégie n'a guère porté ses fruits, car malgré le délai que je me suis accordé, et une lecture attentive de la liste de diffusion <a href="http://news.php.net/php.internals">internals@</a>, les informations dont je dispose actuellement sont toujours sujettes à caution.</p>
<p>Attendre a donc été inutile, et comme rien n'indique pour le moment que les choses vont se clarifier dans les jours qui viennent, j'ai décidé de publier maintenant les informations dont je dispose.</p> <p>Comme vous l'avez compris à la lecture de ce qui précède, après <a href="http://blog.mageekbox.net/?post/2011/05/02/PHP-%3A-les-nouvelles-du-front-400">une période de calme relatif</a>, l'activité a repris en force au sein de la communauté des contributeurs à <a href="http://www.php.net">PHP</a>, aussi bien au niveau de la liste de diffusion <a href="http://news.php.net/php.internals">internals@</a> qu'au niveau du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient le code source de ce qui sera la prochaine version du langage.</p>
<p>La recrudescence d'activité sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> est d'ailleurs en grande partie liée à celle <a href="http://news.php.net/php.internals">internals@</a>, car elle a débuté suite à la <a href="http://news.php.net/php.internals/51929">proposition</a> faite sur cette dernière de lancer le processus de release de PHP 5.4.</p>
<p>En effet, cette proposition a, si je puis dire, dégénéré en plusieurs fils de discussions plus ou moins interconnectés au sein d'<a href="http://news.php.net/php.internals">internals@</a> et qui ont généré en une dizaine de jours approximativement 450 messages.</p>
<p>Il est donc devenu très délicat de suivre les choses dans le détails mais j'ai tout de même réussi à extraire plusieurs informations.</p>
<p>Tout d'abord, les contributeurs semblent d'accord sur le fait qu'il est nécessaire de sortir une nouvelle version <q>significative</q> du langage, basée sur une partie ou la totalité du code présent dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>La difficulté pour les contributeurs est donc de se décider sur les nouvelles fonctionnalités, présentes ou non dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui feront effectivement parties de cette future version.</p>
<p>C'est la raison pour laquelle de vieux débats sont revenus à la surface, tels que celui sur le contrôle du type des arguments lors de l'exécution, ou bien encore au sujet des <a href="http://news.php.net/php.internals/52146">traits</a> et des <a href="http://news.php.net/php.internals/52147">annotations</a>, et ce sont ces débat qui sont à l'origine du grand nombre de messages échangés entre les contributeurs.</p>
<p>Le débat sur les annotations a été, et de loin, le plus enflammé, au propre comme au figuré, et il a même été le lieu de plusieurs mises au point, <a href="http://news.php.net/php.internals/52210">plus</a> ou <a href="http://news.php.net/php.internals/52149">moins</a> <a href="http://news.php.net/php.internals/52169">violentes</a>, entre les contributeurs.</p>
<p>Cependant, cela n'a pas changé fondamentalement la situation, et pour résumer, la communauté est divisée plus ou moins grossièrement en quatre camps au sujet des annotations.</p>
<p>Il y a tout d'abord ceux qui ne savent pas ce qu'est réellement une annotation, parce que le concept ne les intéressent absolument pas, et qui en conséquence ne participe au débat, dans le meilleur des cas, qu'en tant que modérateur ou bien pour <a href="http://en.wikipedia.org/wiki/PHPDoc">recadrer</a> les discussions.</p>
<p>Il y a ensuite ceux qui sont convaincus que l'ajout des annotations est <a href="http://news.php.net/php.internals/52169">absolument nécessaire</a>.</p>
<p>À contrario, il y a ceux qui sont contre cet ajout car <a href="http://news.php.net/php.internals/52156">ils ne sont pas convaincus</a> de l'utilité de cette fonctionnalité.</p>
<p>Et entre les deux, il y a ceux qui reconnaissent que les annotations sont potentiellement une fonctionnalité intéressante mais qui pensent que <a href="http://news.php.net/php.internals/52233">l'implémentation proposée n'est pas la bonne</a> et qu'il faut se reposer sur les commentaires dans le code pour les gérer, à la manière des <q><a href="http://en.wikipedia.org/wiki/PHPDoc">DocBlock</a></q>, soit parce qu'il en va de leur <a href="http://news.php.net/php.internals/52205">intérêt</a>, soit parce qu'il pense <a href="http://news.php.net/php.internals/52199">qu'il n'est pas utile</a> de faire autrement.</p>
<p>Après bien des <a href="http://news.php.net/php.internals/52209">palabres</a> et des <a href="http://news.php.net/php.internals/52212">digressions</a>, les pro-annotations semblent avoir accepté de se reposer sur les <q><a href="http://en.wikipedia.org/wiki/PHPDoc">DocBlock</a></q> pour définir les annotations, certainement car ils se disent qu'avoir des annotations basée sur cette solution est mieux que de ne pas disposer du tout des annotations nativement dans <a href="http://www.php.net">PHP</a>.</p>
<p>Une <a href="https://wiki.php.net/rfc/annotations-in-docblock">nouvelle <abbr title="Request For Comments">RFC</abbr></a> concernant la définition d'annotations via les <q><a href="http://en.wikipedia.org/wiki/PHPDoc">DocBlock</a></q> a donc été rédigée par <a href="http://blog.bisna.com/">Guilherme Blanco</a>, le créateur de Doctrine et l'un des concepteurs de <a href="http://blog.mageekbox.net/?post/2010/10/02/Un-petit-point-sur-les-annotations">l'implémentation proposée précédemment</a>.</p>
<p>Cependant, rien ne dit que cette solution sera acceptée, et surtout qu'elle sera intégrée dans la prochaine version du langage.</p>
<p>D'ailleurs, il n'y a rien de certain concernant cette fameuse version, et je prend avec des pincettes tout ce qui se dit à son sujet malgré la <a href="http://news.php.net/php.internals/52138">feuille de route</a> proposée qui prévoie une sortie officielle de la version finale en octobre ou en novembre de cette année.</p>
<p>Elle a en effet été déjà annoncée précédemment à plusieurs reprises, et pour autant, il ne s'est rien passé, pour diverses raisons.</p>
<p>De plus, <a href="http://blog.thepimp.net/">Pierre Joye</a>, l'un des contributeurs les plus actifs et engagés dans le développement de PHP n'a pas pris part aux différents débats, car il est actuellement en vacances.</p>
<p>Il est donc possible que son retour provoque des remous, car je sais, par exemple, qu'il n'est pas partisan de l'utilisation des commentaires pour la définition des annotations.</p>
<p>Il semble cependant acquis qu'APC <a href="http://news.php.net/php.internals/52257">ne sera pas intégré au langage</a> dans cette future version, car de l'aveu même de <s>Dieu</s> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a>, les ressources humaines nécessaires pour cela ne sont pas disponibles.</p>
<p>Par la même occasion, <s>Dieu</s> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> semble confirmé la rumeur que j'ai déjà entendu par ailleurs disant que cette prochaine version ne sera pas une version majeure (mais dans ce cas, je me demande ce que contiendra une version du langage méritant le qualificatif de majeure).</p>
<p><s>Dieu</s> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> a d'ailleurs été inhabituellement très actif au cours des débats, soit en <a href="http://news.php.net/php.internals/52285">apportant des précisions</a>, soit en jouant <a href="http://news.php.net/php.internals/52172">le rôle de tampon</a>, notamment dans celui concernant les annotations.</p>
<p>Il est vrai qu'il a u<a href="http://news.php.net/php.internals/52306">n intérêt personnel</a> à suivre de très près cette discussion, car si la solution technique finalement retenue avait nécessité une modification de la grammaire de PHP, il aurait été certainement obligatoire de <a href="http://news.php.net/php.internals/52204">modifier le code d'APC</a>, dont il est l'un des développeurs, ce qui ne semble pas être une sinécure.</p>
<p>Dernièrement, il a également demandé à ce que <a href="http://news.php.net/php.internals/52328">les tests unitaires en erreur</a> dans la <a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/">branche 5.3</a> et le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> soient corrigés, ce qui est à l'origine d'un grand nombre des modifications subies par ce dernier.</p>
<p>Suite à sa demande, il semble qu'un tableau de bord permettant d'obtenir le statut des tests pour les différentes branches de PHP, basé sur <a href="http://phpqa.ajeux.net/">le travail de Olivier Doucet</a>, soit en train d'être mis en place. </p>
<p>Enfin, il a <s>enfin</s> modifié les scripts de configuration relatifs à la compilation de PHP pour qu'ils supportent les versions d'<code><a href="http://fr.wikipedia.org/wiki/Autoconf">autoconf</a></code> <a href="http://news.php.net/php.internals/52374">supérieures ou égales à 2.60</a>, ce qui permettra de le <a href="http://blog.mageekbox.net/?post/2010/10/11/Comment-utiliser-l-autoconf-de-son-choix-pour-compiler-PHP">compiler plus facilement</a>.</p>
<p>L'actualité de la liste de diffusion est donc relativement brulante, même si les choses se sont un peu calmées dernièrement, et le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> en a subit les conséquences, comme je l'ai évoqué précédemment. </p>
<p>Tout d'abord, près de la moitié des modifications concerne des corrections effectuées dans les tests unitaires.</p>
<p>Ensuite, vu qu'il n'y a eu aucun consensus au sein des contributeurs en ce qui concerne le contrôle du type des arguments d'une méthode ou d'une fonction, le code correspondant a été retiré du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Il y a également eu du nettoyage d'effectué dans la documentation présente dans le source concernant le processus de sortie d'une nouvelle version.</p>
<p>L'extension SNMP a également subie un petit lifting, puisque la méthode S<code>NMP::open()</code> a été supprimée car elle faisait doublon avec le constructeur de la classe, et que les méthodes <code>SNMP::get_errno()</code> et S<code>NMP::get_error()</code> ont été respectivement renommées en <code>SNMP::getErrno()</code> et <code>SNMP::getError()</code>.</p>
<p>Les bibliothèques <a href="http://fr2.php.net/sqlite">SQLite</a> et <a href="http://fr2.php.net/en/pcre">PCRE</a> intégrées au code de <a href="http://www.php.net">PHP</a> ont par ailleurs été mises à jour respectivement en version 3.7.6.2 et 8.12.</p>
<p>Enfin, il y a également eu le lot habituel de corrections et d'optimisations, avec notamment la résolution des bugs <a href="http://bugs.php.net?id=54623">#54623</a>,
<a href="http://bugs.php.net?id=54580">#54580</a>,
<a href="http://bugs.php.net?id=54681">#54681</a>,
<a href="http://bugs.php.net?id=54644">#54644</a>,
<a href="http://bugs.php.net?id=54692">#54692</a> et
<a href="http://bugs.php.net?id=54723">#54723</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/05/15/PHP-%3A-les-nouvelles-du-front-410#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/260PHP : les nouvelles du front #400urn:md5:e3e827f9057bad238eaf234b78febc022011-05-02T22:00:00+02:002011-05-03T08:04:40+02:00mageekguyPHP XDCVSinternals@OpenSSLPHP XSSLsubversiontrunk<p>Encore une fois avec un peu de retard pour cause d'emploi du temps décidément trop chargé, voici les dernières nouvelles sur le front du développement de la prochaine version majeure de <a href="http://www.php.net">PHP</a>, <abbr title="Also Known As">aka</abbr> le <a href="https://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>,</p>
<p>Suite à mon retard, ce billet couvre la période allant du 18 au 28 avril 2011, mais cela a finalement peu d'importance car une nouvelle fois, la période qui vient de s'écouler a été relativement peu intéressante.</p>
<p>En effet, puisque qu'il n'y a eu qu'un peu plus d'une vingtaine de modifications effectuées sur le <a href="https://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, il y a peu de choses à en dire, et si la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, a été plus active, les discussions n'ont guère été captivantes.</p> <p>Concernant le <a href="https://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, les modifications qu'il a subit sont pour la plupart des corrections ou des optimisations, à tel point que le lot habituel de correction de bugs est réduit à la portion congrue.</p>
<p>En effet, seul quatre bugs ont été supprimés, correspondant aux identifiants <a href="http://bugs.php.net?id=54367">#54367</a>,
<a href="http://bugs.php.net?id=54585">#54585</a>,
<a href="http://bugs.php.net?id=54623">#54623</a> et
<a href="http://bugs.php.net?id=54580">#54580</a>.</p>
<p>La modification la plus significative concerne le support d'<a href="http://www.openssl.org/">OpenSSL</a>, qu'il devient possible d'intégrer à <a href="http://www.php.net">PHP</a> lors de la sa compilation même si la version d'<a href="http://www.openssl.org/">OpenSSL</a> installée au niveau du système d'exploitation ne dispose pas de <abbr title="Secure Sockets Layer"><a href="http://fr.wikipedia.org/wiki/Secure_Sockets_Layer">SSL</a></abbr> version 2.</p>
<p>Cette version de <a href="http://fr.wikipedia.org/wiki/Secure_Sockets_Layer">SSL</a> présente en effet un certain nombre de failles et n'est donc plus incluse systématiquement par les distributions telles que <a href="http://fr.wikipedia.org/wiki/Debian">Debian</a>.</p>
<p>Concernant <a href="http://news.php.net/php.internals">internals@</a>, Les discussions ont eu pour sujet principaux <a href="http://news.php.net/php.internals/51968">la suppression de l'erreur de type <code>E_NOTICE</code></a> générée lorsque le développeur accède à une valeur indéfinie d'un tableau via l'opérateur ternaire, l'implémentation <a href="http://news.php.net/php.internals/51954">d'une fonction ou d'une construction du langage</a> autorisant la définition d'une valeur par défaut si une variable n'est pas définie lorsque le développeur y accède, ainsi que sur <a href="http://news.php.net/php.internals/52021">la définition du type de la valeur de retour</a> des fonctions ou des méthodes. </p>
<p>La discussion au sujet de la fonction <code>varset()</code>, qui devait permettre de donner automatiquement une valeur à une variable indéfinie, a monopolisé l'attention pendant plusieurs jours, mais malheureusement, aucun consensus ne s'est dégagé du débat, malgré un grand nombre de propositions alternatives.</p>
<p>Il faut dire que le débat était double, puisqu'il rejoignait celui concernant l'opérateur ternaire débuté il y a maintenant <a href="http://blog.mageekbox.net/?post/2011/04/07/PHP-%3A-les-nouvelles-du-front-380">pas mal de temps</a>, et que cela n'a pas aidé pour avoir une discussion construite.</p>
<p>Donc pour l'instant, il n'y a aucune solution concernant la problématique posée par l'opérateur ternaire, et la proposition d'inclure <code>varset()</code> au langage n'a pas été retenue.</p>
<p>Il en va de même pour la définition du type des valeurs de retour possibles pour une fonction ou une méthode.</p>
<p>Revenu à la surface suite à <a href="http://news.php.net/php.internals/51929">la proposition de sortir une nouvelle version</a> de <a href="http://www.php.net">PHP</a> basée sur le <a href="https://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, ce débat enflamme toujours autant les contributeurs, tout comme celui concernant le contrôle du type des arguments d'une fonction ou d'une méthode, revenu également à la surface par transitivité.</p>
<p>La majorité des développeurs sont en effet toujours en train de débattre pour définir si l'ajout de ces deux fonctionnalités a du sens par rapport à la gestion dynamique du type des variables effectuée par le langage.</p>
<p>En conséquence, il y a une totale absence de consensus à ce niveau, et il y a donc peu de chances que ces <q>nouveautés</q> fassent parties de la version qui sera construite à partir du <a href="https://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Outre ces trois sujets, il a également été question sur <a href="http://news.php.net/php.internals">internals@</a> du périmètre fonctionnel du serveur http qui doit être intégré à <a href="http://www.php.net">PHP</a> à des fins de développement, notamment au niveau des possibilités de déboggage qu'il doit offrir, mais malgré cela, les choses semblent bien parties pour que ce serveur fasse effectivement parti du langage.</p>
<p>La question de <a href="http://news.php.net/php.internals/52032">l'utilisation d'un DCVS</a> pour remplacer S<a href="http://fr.wikipedia.org/wiki/Apache_Subversion">ubversion</a> est également revenue sur le tapis, mais pour l'instant, rien de concret n'est sorti de la discussion, même si la levée de bouclier a été moins virulente que lors du dernier débat sur ce sujet, certainement parce que le sujet a été amené de manière extrêmement diplomatique.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/05/02/PHP-%3A-les-nouvelles-du-front-400#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/256PHP : les nouvelles du front #380urn:md5:967bfd36cd8672e1e7a17b894c6f20e12011-04-08T08:30:00+02:002011-04-08T08:30:00+02:00mageekguyPHP Xinternals@PHPPHP XPierre Joyetrunk<p>Il y a plus d’un an, j’ai commencé une série de billets portant le titre « Mort de PHP 6 + <em>y</em> jours », « <em>y</em> » ayant varié entre 10 et 370, par incrément de 10.</p>
<p>J’avais décidé à l’origine de remplacer ce titre par « Naissance de PHP X + <em>y</em> jours » après la sortie de la prochaine version majeure de <a href="http://www.php.net">PHP</a>, puisqu'elle est censé remplacer PHP 6 (même si dans les faits, PHP 5.3 s'en est chargé à au moins 85 %).</p>
<p>Malheureusement, cette dernière se fait attendre, et je n’ai donc toujours pas eu l’occasion de changer mon titrage.</p>
<p>Cependant, l’abandon du développement de PHP 6 remonte maintenant <a href="http://blog.mageekbox.net/?post/2011/03/18/Anniversaire">à plus d’un an</a>, et cette page de l’histoire du langage est définitivement tournée depuis un bon moment.</p>
<p>En effet, PHP 6 n’est plus, pour la communauté des contributeurs, qu’un fantôme qui est invoqué pour remettre dans le droit chemin ceux qui s’oriente dans la mauvaise direction.</p>
<p>C’est pourquoi, sur une suggestion de <a href="http://blog.thepimp.net">Pierre Joye</a>, j’ai décidé d’adopter dorénavant pour cette série le titre « PHP : Les nouvelles du front #<em>y</em> », que je trouve particulièrement adapté à l’ambiance régnant certain jours parmi la communauté des développeurs du langage.</p>
<p>Le titre est cependant la seule chose qui change, car je reste dans un rôle de simple observateur dans le cadre de ces billets, et je conserve la périodicité de 10 jours.</p>
<p>Elle me permet en effet à la fois de trouver le temps d’écrire ces billets et d’avoir suffisamment d’information à partager pour qu’ils soient un minimum intéressant.</p>
<p>Cette explication étant maintenant terminée, voici donc les dernières nouvelles du front depuis « <a href="http://blog.mageekbox.net/?post/2011/03/27/Mort-de-PHP6-370-Jours">Mort de PHP6 + 370 jours</a> » !</p> <p>Et il s'est passé sur les dix jours qui viennent de s'écouler l'inverse des dix jours précédents, puisque l'activité sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> a été relativement réduite, et qu'à contrario, il y a eu pas mal d'échanges sur <a href="http://news.php.net/php.internals">internals@</a>, la liste de diffusion des contributeurs.</p>
<p>En effet, après le coup d’accélérateur de la période précédente, le rythme des modifications sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient le code source de la prochaine version majeure de <a href="http://www.php.net">PHP</a>, s’est à nouveau ralenti, avec seulement un peu plus de 25 modifications effectuées, contre plus d’une cinquantaine sur la période précédente.</p>
<p>Et parmi ces modification, il y les corrections correspondant aux bugs <a href="http://bugs.php.net?id=48465">#48465</a>,
<a href="http://bugs.php.net?id=44989">#44989</a>,
<a href="http://bugs.php.net?id=54423">#54423</a>,
<a href="http://bugs.php.net?id=54423">#54423</a>,
<a href="http://bugs.php.net?id=54454">#54454</a>,
<a href="http://bugs.php.net?id=53037">#53037</a>,
<a href="http://bugs.php.net?id=54065">#54065</a> et
<a href="http://bugs.php.net?id=54372">#54372</a>.</p>
<p>Par ailleurs, la demande <a href="http://bugs.php.net?id=54459">#54459</a> a été implémenté dans le langage et la fonction range() fonctionnera dorénavant correctement le pas utilisé pour calculer les valeurs à insérer dans le tableau est un nombre à virgule flottante.</p>
<p>Le reste des modifications n'est pas plus intéressant, puisqu'il s'agit pour l'essentiel d'optimisation et de consolidations visant à rendre le langage plus fiable et plus efficace.</p>
<p>Heureusement, la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, a été un peu plus intéressante.</p>
<p>Une discussion au sujet de certaines fonctions relatives aux chaînes de caractères a en effet pas mal dérivée et a permis de découvrir que <s>Dieu</s> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> réfléchit à une façon <a href="http://news.php.net/php.internals/51778">d'implémenter une interface objet</a> au chaîne de caractères et aux méthodes.</p>
<p>Cependant, pour l'instant, il n'a fait qu'y réfléchir, et le chemin sera encore long d'ici à ce qu'une telle fonctionnalité soit intégrée à <a href="http://www.php.net">PHP</a>.</p>
<p><a href="http://sebastian-bergmann.de/">Sébastian Bergmann</a>, le créateur de <a href="https://github.com/sebastianbergmann/phpunit/">PHPUnit</a>, a de son côté p<a href="http://news.php.net/php.internals/51811">roposé un patch</a> qui permet de limiter la profondeur d'analyse de la fonction <a href="http://fr.php.net/debug_backtrace">debug_backtrace()</a> via l'ajout d'un argument.</p>
<p>Il a été accueilli favorablement par les contributeurs, et en conséquence, il devrait être intégré dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et la fonction debug_print_backtrace() devrait également à plus ou moins court terme bénéficier de cette fonctionnalité.</p>
<p>Enfin, une discussion est en cours pour ajouter le support implicite de <a href="http://fr.php.net/manual/fr/function.isset.php">isset()</a> ou <a href="http://fr.php.net/manual/fr/function.empty.php">empty()</a> au sein de l'opérateur ternaire.</p>
<p>Grâce à cette fonctionnalité, il serait possible d'écrire par exemple le code suivant :</p>
<blockquote><pre><code><?php
$users = array('login' => 'mageekguy');
echo $users['login'] ?: 'Login not set.' . PHP_EOL;
echo $users['password'] ?: 'Password not set.' . PHP_EOL;
?></code></pre></blockquote>
<p>En effet, il ne générerait plus d'erreur de type <code>NOTICE</code> lors du second appel à <code>echo</code>.</p>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><span style="letter-spacing: 0.0px">Ce bulletin d’information est maintenant terminé, vous pouvez reprendre une activité normale.</span></p>http://blog.mageekbox.net/?post/2011/04/07/PHP-%3A-les-nouvelles-du-front-380#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/251Le code source de PHP a été modifié par des pirates !urn:md5:0604999683fdbb59305840fd2d1651c02011-04-01T08:30:00+02:002011-04-01T22:03:32+02:00mageekguyPHP Xinternals@PHPPHP Xtrunk<p>Il y a maintenant une quinzaine de jours, les développeurs de <a href="http://www.php.net">PHP</a> se
sont rendus compte que l'un de leur serveur avait été <a href="http://www.php.net/archive/2011.php#id2011-03-19-2">piraté</a> et que la
liste de leurs identifiants avait été volée à cette occasion.</p>
<p>Or, ces identifiants permettent d'accéder à l'ensemble des serveurs
utilisés par la communauté, et notamment au dépôt subversion contenant
entre autre le code source du langage.</p>
<p>Les pirates ont donc eu la possibilité d'altérer à leur avantage le
code de <a href="http://www.php.net/">PHP</a>, en y introduisant, par exemple, des portes dérobées ou bien
des failles de sécurité.</p>
<p>L'affaire a donc été prise très au sérieux, d'autant que deux
jours avant la découverte du piratage, la version 5.3.6 de <a href="http://www.php.net/">PHP</a> avait été
<a href="http://www.php.net/archive/2011.php#id2011-03-17-1">rendue publique</a>, et qu'elle est téléchargée massivement.</p>
<p>Les développeurs ont donc décidé d'auditer en profondeur le code,
afin de savoir s'il avait bien été modifié par les pirates et dans ce
cas, réparer les dégâts.</p> <p>Or, le code source de <a href="http://www.php.net/">PHP</a> compte plusieurs centaines de milliers de lignes, et de plus, il faut non seulement vérifier l'intégrité de la branche 5.3, mais aussi celle du trunk.</p>
<p>Et malgré l'utilisation d'outils permettant d'automatiser en grande partie l'analyse, cela a pris du temps.</p>
<p>En effet, ces outils ne font que le plus gros du travail, et ne remplace nullement une analyse humaine, beaucoup plus fiable mais qui doit en contre-partie être réalisée pratiquement ligne par ligne.</p>
<p>Et aujourd'hui, la majeure partie de l'audit a été réalisé, et il est malheureusement confirmé que le code source de la branche 5.3 de PHP a bien été corrompu.</p>
<p>Plusieurs portes dérobées ont été installées au sein du code, pour permettre notamment de prendre le contrôle d'un serveur à distance via le passage d'arguments ayant des valeurs très spécifiques dans une <a href="http://fr.wikipedia.org/wiki/Uniform_Resource_Locator"><abbr title="Uniform Resource Locator">URL</abbr></a>.</p>
<p>Très élaborées, ces portes seraient passées inaperçues sans la connaissance parfaite qu'a <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> du code source du langage.</p>
<p>La situation est donc grave, mais il y a cependant une très bonne nouvelle qui permet de la relativiser.</p>
<p>En effet, le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> a été épargné par les pirates, certainement parce qu'ils souhaitaient pouvoir bénéficier des fruits de leur travail le plus rapidement possible.</p>
<p>En conséquence, afin de régler le problème au plus vite, les contributeurs ont décidé d'avancer la sortie de la prochaine version majeure de <a href="http://www.php.net/">PHP</a>.</p>
<p><a href="http://mgbx.net/phpnet54">PHP 5.4</a> est donc disponible au téléchargement depuis quelques minutes et il est fortement recommandé de migrer vers cette version tout serveur utilisant PHP 5.3.6 dans les meilleurs délais.</p>
<p>Évidemment, les contributeurs sont très mal à l'aise face à cette situation, qui pose la question de la fiabilité du modèle <a href="http://fr.wikipedia.org/wiki/Open_source">open-source</a> face à la malveillance.</p>
<p>Il est donc fortement possible, au vue des derniers échanges sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, la liste de diffusion des contributeurs, que le code source de <a href="http://www.php.net/">PHP</a> ne soit plus publique à très court-terme, et que <a href="http://www.zend.com">Zend</a> reprenne en main intégralement le développement du langage sur un modèle <a href="http://simple.wikipedia.org/wiki/Closed_source">closed-source</a> afin d'éviter ce genre de problèmes à l'avenir.</p>
<p>Ce <strong>poisson d'avril</strong> est maintenant terminé, vous pouvez reprendre une activité normale (mais je vous conseille de lire les commentaires, car certains sont très gratinés).</p>http://blog.mageekbox.net/?post/2011/03/31/Le-code-source-de-PHP-a-%C3%A9t%C3%A9-modifi%C3%A9-par-des-pirates-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/249Mort de PHP6 + 370 Joursurn:md5:00bfd77e9d832f5cd01f891a8c79425d2011-03-28T08:30:00+02:002011-03-28T08:30:00+02:00mageekguyPHP Xannotationsinternals@PHPPHP Xtrunk<p>Cela fait donc maintenant un an que le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient le code de ce qui pourrait être la prochaine version majeure de <a href="http://www.php.net">PHP</a>, est né.</p>
<p>Le bébé a bien évolué, même si sa croissance a connu quelques paliers, notamment à cause du développement de ses cousins, à savoir les versions mineures correspondant à la branche 5.3.</p>
<p>Pour preuve, suite, à la naissance de <a href="http://www.php.net/archive/2011.php#id2011-03-17-1">PHP 5.3.6</a>, il vient de faire sur les 10 jours qui viennent de s'écouler, une poussée de croissance, comme le montre son <a href="http://blog.mageekbox.net/?post/2010/04/22/L-%C3%A9lectro-enc%C3%A9phalogramme-de-PHP-existe-%21">électro-encéphalogramme</a> :</p>
<p><img title="trunkPHP20110328.png, mar. 2011" style="margin: 0 auto; display: block;" alt="trunkPHP20110328.png" src="http://blog.mageekbox.net/public/trunkPHP20110328.png" /><br />Elle reste certes modeste, puisqu'elle ne représente qu'une petite cinquantaine de modifications, mais elle est significative par rapport <a href="http://blog.mageekbox.net/?post/2011/02/14/Mort-de-PHP6-330-jours">aux</a> <a href="http://blog.mageekbox.net/?post/2011/02/24/Mort-de-PHP6-340-Jours">périodes</a> <a href="http://blog.mageekbox.net/?post/2011/03/16/Mort-de-PHP6-360-Jours">précédentes</a>, d'autant que les contributeurs doivent actuellement faire face à un <a href="http://www.php.net/archive/2011.php#id2011-03-19-2">problème</a> relativement important.</p>
<p>D'ailleurs, ce <a href="http://www.php.net/archive/2011.php#id2011-03-19-2">problème</a> est certainement la cause du manque d'activité sur la liste de diffusion des développeurs du langage, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, sur laquelle les échanges ont été très réduits.</p> <p>Il y a donc eu un regain d'activité sur le trunk ces derniers jours.</p>
<p>Cependant, le code est toujours dans une phase de consolidation, puisque la majorité des modifications effectuées sont soit des corrections, soit des optimisations.</p>
<p>Les rapports de bug <a href="http://bugs.php.net?id=53339">#53339</a>,
<a href="http://bugs.php.net?id=54084">#54084</a>,
<a href="http://bugs.php.net?id=54281">#54281</a>,
<a href="http://bugs.php.net?id=54283">#54283</a>,
<a href="http://bugs.php.net?id=54291">#54291</a>,
<a href="http://bugs.php.net?id=54292">#54292</a>,
<a href="http://bugs.php.net?id=54312">#54312</a>,
<a href="http://bugs.php.net?id=54316">#54316</a>,
<a href="http://bugs.php.net?id=54318">#54318</a>,
<a href="http://bugs.php.net?id=54332">#54332</a>,
<a href="http://bugs.php.net?id=54340">#54340</a>,
<a href="http://bugs.php.net?id=54384">#54384</a> et
<a href="http://bugs.php.net?id=54395">#54395</a> ont donc été clôturés,</p>
<p>Petit détails, 4 corrections sur les 13 ont été corrigés par des personnes extérieures à la communauté des développeurs de <a href="http://www.php.net">PHP.</a></p>
<p>Les bugs ne sont pas les seuls concernés par cela, puisque c'est également le cas de la requête <a href="http://bugs.php.net/?id=54355">#54355</a>, dont l'implémentation a été réalisée à partir du patch proposé par son auteur.</p>
<p>Et pour en finir avec les bugs, suite à une modification effectuée sur la fonction <a href="http://fr.php.net/fclose">fclose()</a> afin que la ressource sur laquelle elle est appliquée soit fermée même si elle est utilisée par d'autres variables, le bug <a href="http://bugs.php.net?id=24557">#24557</a> est réapparu.</p>
<p>Le reste des modifications sont soit des corrections relatives à des problèmes qui n'ont pas fait l'objet d'un rapport de bugs, soit des optimisations diverses.</p>
<p>Les plus grands bénéficiaires de ce travail sont principalement <a href="http://fr.php.net/snmp"><abbr title="Simple Network Management Protocol">SNMP</abbr></a> et <a href="http://http://fr.php.net/mysqlnd">mysqlnd</a>, dont le processus de consolidation est en cours depuis plusieurs mois, ainsi que les tests unitaires de <a href="http://www.php.net">PHP</a>, qui ont également été amendés et complétés.</p>
<p>La fonction socket_import_stream() a également été ajoutée, et les fonctions <code><a href="http://fr.php.net/manual/en/function.socket-set-block.php">socket_set_block()</a></code> et <a href="http://fr.php.net/manual/en/function.socket-set-nonblock.php"><code>socket_set_nonblock()</code> </a>émettent dorénavant une alerte de type <code>E_WARNING</code> en cas d'erreur.</p>
<p>Enfin, le fichier <a href="http://svn.php.net/viewvc/php/php-src/trunk/UPGRADING?view=markup">UPGRADING</a>, qui contient la liste des principales modifications effectuées sur le langage depuis la création du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> à partir de la branche 5.3 a été mis à jour.</p>
<p>Comme déjà dit précédemment, la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, a été très calme.</p>
<p>Il n'y a donc aucun débat enflammé, et quasiment aucune discussion, même si le sujet hautement sensible des <a href="http://news.php.net/php.internals/51743">annotations</a> est revenu une nouvelle fois sur le tapis ces derniers jours et qu'il a été <a href="http://news.php.net/php.internals/51735">demandé</a> plus ou moins indirectement de pouvoir utiliser une version de <a href="http://en.wikipedia.org/wiki/Libmagic">libmagic</a> différente de celle fournie avec le code source de <a href="http://www.php.net">PHP</a>.</p>
<p>La version fournie avec le langage a en effet été modifiée pour s'intégrer au mieux au sein du langage, et en conséquence, il n'est plus possible d'utiliser la version officielle, ce qui empêche <a href="http://www.php.net">PHP</a> de profiter de ses dernières évolutions.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale. </p>http://blog.mageekbox.net/?post/2011/03/27/Mort-de-PHP6-370-Jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/248Mort de PHP6 + 330 joursurn:md5:625ed2f6a1f6183cdb65b14f9f7a9bbc2011-02-15T14:00:00+01:002011-02-25T16:26:13+01:00mageekguyPHP Xinternals@PHPPHP XRFCStephan Marrtraits<p>Le moins que l'on puisse dire est que le développement de <a href="http://www.php.net">PHP</a> est au ralenti actuellement.</p>
<p>En effet, il n'y a eu qu'un peu moins de 25 modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient le code de la prochaine version majeure du langage.</p>
<p>Et au niveau de la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, s'il n'est pas possible de parler de calme plat, l'activité est tout de même extrêmement réduite.</p>
<p>J'ai même réellement hésité à faire ce billet, car j'ai eu beau chercher, je n'ai pas trouvé d'information intéressante à partager, l'essentiel des modifications étant des corrections de problèmes, de l'ajout de tests unitaires, ou des optimisations.</p>
<p>Le langage est donc, comme sur les deux dernières périodes, toujours dans une phase de consolidation, mais comme d'habitude, il est difficile, sinon impossible, d'y voir un signe annonçant la sortie prochaine d'une nouvelle version.</p> <p>Voici cependant ce que je peux vous dire, au vu des informations à ma disposition.</p>
<p>Tout d'abord, les bugs <a href="http://bugs.php.net?id=53924">#53924</a>,
<a href="http://bugs.php.net?id=53893">#53893</a>,
<a href="http://bugs.php.net?id=53959">#53959</a>,
<a href="http://bugs.php.net?id=53963">#53963</a>,
<a href="http://bugs.php.net?id=53991">#53991</a>,
<a href="http://bugs.php.net?id=53971">#53971</a>,
<a href="http://bugs.php.net?id=54002">#54002</a> et
<a href="http://bugs.php.net?id=53958">#53958</a> ont été résolus.</p>
<p>La méthode <code><a href="http://fr2.php.net/filter_var">filter_var()</a></code> ne laissera donc plus passer les <a href="http://fr.wikipedia.org/wiki/Port_%28logiciel%29">ports réseaux</a> invalides, la méthode <code><a href="http://fr2.php.net/manual/en/function.ziparchive-extractto.php">\zipArchive::extractTo()</a></code> retourne le booléen <code>false</code> si elle ne peut pas écrire dans le répertoire de destination, le code de la fonction <br /><code><a href="http://fr2.php.net/manual/en/function.fgetcsv.php">fgetcsv()</a></code> et de la méthode <code>\simpleXmlElement::__construct()</code> a été corrigé afin que leurs arguments soient correctement reconnus par l'introspection, <a href="http://fr2.php.net/manual/en/function.json-decode.php">json_decode()</a> gère correctement les erreurs en cas d'erreurs de syntaxe dans la chaîne de caractères qui lui est passée en argument, et une régression au niveau de <code><a href="http://fr2.php.net/manual/en/function.isset.php">isset()</a></code> et <code><a href="http://fr2.php.net/manual/en/function.empty.php">empty()</a></code> a été corrigée, ainsi qu'un problème entre la gestion par référence des variables et les <a href="http://blog.mageekbox.net/?post/2010/02/19/On-ferme-%21">fermetures</a>.</p>
<p>Un certain nombre d'alertes lors de la compilation ont également été supprimées, l'objectif étant apparemment à ce niveau de ne plus avoir aucun message d'erreurs de la part du compilateur.</p>
<p>De plus, des tests unitaires ont été ajoutés en grand nombre, notamment au niveau des méthodes <code><a href="http://fr2.php.net/manual/en/datetime.diff.php">\dateTime::diff()</a></code>, <code><a href="http://fr2.php.net/manual/en/datetime.add.php">\dateTime::add()</a></code>, <code><a href="http://fr2.php.net/manual/en/datetime.sub.php">\dateTime::sub()</a></code> et <code><a href="http://fr2.php.net/manual/en/dateinterval.format.php">\dateInterval::format()</a></code> qui semblaient avoir un certain nombre de problèmes.</p>
<p>Enfin, deux causes potentielles de crash du langage au sein de l'extension <a href="http://fr2.php.net/snmp"><code><abbr title="Simple Network Management Protocol">SNMP</abbr></code></a>, suite au remaniement et à l'évolution qui a eu lieu durant <a href="http://blog.mageekbox.net/?post/2011/02/04/Mort-de-PHP-6-320-jours">la période précédente</a>, ont également été identifiées et corrigées.</p>
<p>Bref, il n'y a vraiment pas de quoi sauter au plafond, et ce n'est pas la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, qui permettra de le faire, puisqu'il y a eu moins de vingts messages échangés au cours de ces dix derniers jours.</p>
<p>Deux discussions ont cependant attirées mon attention.</p>
<p>L'une concerne la valeur par défaut de la directive <a href="http://php.net/manual/en/ini.list.php"><code>serialize_precision</code></a>, et l'autre concerne les <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>.</p>
<p>La valeur de <a href="http://php.net/manual/en/ini.list.php"><code>serialize_precision</code></a> était en effet jusqu'à maintenant de 100, soit une précision bien trop importante au regard de la norme <a href="http://fr.wikipedia.org/wiki/IEEE_754">IEEE 754</a> qui définie la façon dont les nombres à virgule flottante sont gérées au sein d'un micro-processeur, et qui propose une valeur de 16.</p>
<p>Il a donc <a href="http://news.php.net/php.internals/51432">été décidé</a> de passer la valeur par défaut de la directive <a href="http://php.net/manual/en/ini.list.php"><code>serialize_precision</code></a> à 17, ce qui se révèle bien suffisant et permet d'accélérer la sérialisation et la désérisalisation des nombres à virgule flottante d'un facteur 3.</p>
<p>Et dans un soucis de cohérence, la valeur par défaut de la directive <a href="http://php.net/manual/fr/ini.core.php"><code>precision</code></a> a été également définie à 17.</p>
<p>Quant aux <a href="http://blog.mageekbox.net/?post/2011/02/14/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, Une <a href="http://wiki.php.net/rfc/traitsmodifications"><abbr title="Request For Comments">RFC</abbr></a> a été proposé afin de les améliorer, en permettant notamment aux développeurs d'accéder explicitement aux méthodes d'un trait via le mot-clef <code>trait</code> et l'opérateur de résolution de portée <code>::</code>, à la manière de <code>parent::</code> ou <code>self::</code>, de définir le niveau d'encapsulation d'un trait ou de ses méthodes, et de rendre plus cohérent l'utilisation des traits et de l'héritage, en suivant les mêmes règles de résolution dans les deux cas.</p>
<p>Cette <a href="http://wiki.php.net/rfc/traitsmodifications"><abbr title="Request For Comments">RFC</abbr></a> contient donc beaucoup de choses, et des choses très intéressantes, mais pour l'instant, il n'y a eu aucun commentaire à son sujet.</p>
<p>Cependant, je pense que cela va changer lorsque <a href="http://blog.mageekbox.net/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">Stephan Marr</a>, l'auteur de l'implémentation des <a href="http://blog.mageekbox.net/?post/2011/02/14/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, aura donné son avis sur les diverses propositions qu'elle contient.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/02/14/Mort-de-PHP6-330-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/238Mort de PHP6 + 320 joursurn:md5:695d7e271099c372e5293de86da842ec2011-02-04T23:59:00+01:002011-02-25T16:28:19+01:00mageekguyPHP XDerick Rethansinternals@PHPPHP XPierre Joye<p>Avec un peu de retard, pour cause d'emploi du temps chargé et de grippe tenace, voici la rétrospective des dix derniers jours de développement sur la prochaine version majeure de <a href="http://www.php.net">PHP</a>.</p>
<p>Et je suis au regret de vous dire que malgré mon retard, la période qui vient de s'écouler n'est guère plus intéressante que la <a href="http://blog.mageekbox.net/?post/2011/01/24/Mort-de-PHP6-310-jours">précédente</a>, qui avait pourtant déjà été particulièrement <q>terne</q>, pour le moins.</p>
<p>En effet, bien qu'il y ait eu une soixantaine de modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la version de développement de <a href="http://www.php.net">PHP</a>, contre une cinquantaine seulement sur la période précédente, il ne s'agit, dans la plus grande majorité des cas, que de correction de bugs.</p>
<p>De plus, il n'y a pas eu plus d'activité sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, que lors des dix jours précédents.</p>
<p>La phase de stabilisation commencée lors de la période précédente semble donc devoir durer un petit moment.</p>
<p>Malgré tout, j'ai tout de même réussi à faire ressortir de la très petite quantité d'informations à ma disposition quelques informations que je qualifierais de significatives à défaut d'intéressantes.</p>
<p>Elles ne vous feront donc aucunement sauter au plafond, mais je pense qu'elles valent tout de même le coup d'être connues.</p> <p>Je vais donc commencer par la traditionnelle palanquée de corrections.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=5273">#5273</a>, <a href="http://bugs.php.net?id=53166">#53166</a>, <a href="http://bugs.php.net?id=53854">#53854</a>, <a href="http://bugs.php.net?id=53867">#53867</a>, <a href="http://bugs.php.net?id=53748">#53748</a>, <a href="http://bugs.php.net?id=53777">#53777</a>, <a href="http://bugs.php.net?id=53434">#53434</a>, <a href="http://bugs.php.net?id=52808">#52808</a>, <a href="http://bugs.php.net?id=52290">#52290</a>, <a href="http://bugs.php.net?id=53795">#53795</a>, <a href="http://bugs.php.net?id=53898">#53898</a>, <a href="http://bugs.php.net?id=49072">#49072</a>, <a href="http://bugs.php.net?id=53903">#53903</a>, <a href="http://bugs.php.net?id=53915">#53915</a>, <a href="http://bugs.php.net?id=53913">#53913</a>, <a href="http://bugs.php.net?id=53914">#53914</a>, <a href="http://bugs.php.net?id=53923">#53923</a> et <a href="http://bugs.php.net?id=53924">#53924</a> ont été corrigés.</p>
<p>Il est donc maintenant entre autre possible d'utiliser de nouvelles propriétés dans une classeé héritant de <code>\dateIntervalle</code>, l'introspection gére correctement les arguments par défaut des méthodes de la classe <code>\zipArchive</code> ainsi que les constantes de classe définie à l'aide du mot-clef <code>self</code>, et l'ensemble des constantes décrivant les différents protocoles de compression disponible dans cette même classe sont maintenant exposée à l'utilisateur.</p>
<p>De plus, le code des traits a été améliorer afin de ne plus faire crasher <a href="http://www.php.net">PHP</a> dans certain cas spécifiques, et le module <a href="http://fr2.php.net/manual/en/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> du langage gère ses logs suivant le format de la directive <a href="http://fr2.php.net/manual/en/errorfunc.configuration.php#ini.error-log"><code>php_error</code></a> et archive maintenant la requête ayant générée l'erreur.</p>
<p>J'ajouterais que la création d'un objet \DateInterval avec deux dates qui ne se suivent pas chronologiquement parlant ne provoque plus une erreur de segmentation de mémoire, et les méthodes <code>\dateTime::setDate()</code>, <code>\dateTime::setISODate()</code> et <code>\dateTime::setTime()</code> se comportent dorénavant correctement lorsque l'instance de la classe <code>\dateTime</code> a été créée à l'aide d'un <a href="http://fr.wikipedia.org/wiki/Horodatage">horodatage</a>.</p>
<p>Enfin, la connexion à une base de données <a href="http://mysql.com/">mysql</a> via <a href="http://fr.wikipedia.org/wiki/Secure_Sockets_Layer"><abbr title="Secure Sockets Layer">SSL</abbr></a> à l'aide du pilote <a href="http://fr.wikipedia.org/wiki/Secure_Sockets_Layer"><code>mysqlnd</code></a> ne provoque plus d'erreur, le message d'erreur envoyé par l'extension <a href="http://fr2.php.net/manual/en/book.phar.php"><abbr title="PHP Archive">PHAR</abbr></a> lorsque le répertoire dans lequel le développeur souhaite sauvegarder l'archive n'existe pas est désormais plus explicite, la fonction feof() se comporte maintenant correctement en présence d'une archive zip endommagée, et une erreur de compilation du code des <a href="http://fr2.php.net/manual/en/book.stream.php">flux</a>, de la <a href="http://fr2.php.net/manual/en/book.spl.php"><abbr title="Standard PHP Library">SPL</abbr></a> et de <a href="http://fr2.php.net/manual/en/book.zip.php">Zip</a>, relative à l'absence de la constante <code>HAVE_GLOB</code> dans certain cas, a été corrigée.</p>
<p>Il y a eu également au cours de cette période deux ajouts fonctionnels significatifs.</p>
<p>Le premier concerne l'extension <a href="http://fr2.php.net/manual/en/book.snmp.php"><abbr title="Simple Network Management Protocol">SNMP</abbr></a>, qui a été <a href="http://bugs.php.net/bug.php?id=53594">améliorée</a>.</p>
<p>En effet, son code a été fiabilisé grâce à l'ajout de tests unitaires, ses fonctions renvoient maintenant une valeur de retour uniforme, à savoir <code>false</code>, en cas d'erreur, et il est maintenant possible de manipuler plusieurs <a href="http://en.wikipedia.org/wiki/Object_identifier"><abbr ttile="Object Identifier">OID</abbr></a> en une seule fois, que ce soit pour récupérer leurs valeurs ou les initialiser.</p>
<p>Il est à noter que l'ajout de ces fonctionnalités avait été proposé il y a <a href="http://blog.mageekbox.net/?post/2010/09/30/Mort-de-PHP6-200-jours">quelques temps</a> sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, preuve que parfois, les contributeurs externes sont écoutés et leur code intégré à celui de <a href="http://www.php.net">PHP</a>.</p>
<p>Le second ajout fonctionnel concerne la gestion des en-têtes <a href="http://fr.wikipedia.org/wiki/Http"><abbr title="HyperText Transport Protocol">HTTP</abbr></a>.</p>
<p>Il est maintenant possible de manipuler ces derniers une fois que les en-têtes renvoyé par défaut par PHP, et ceux défini par le développeur ont été réunis, à l'aide de la fonction <code>header_register_callback()</code> :</p>
<blockquote><pre><code><?php<br /><br />header('Content-Type: text/plain');<br />header('X-Test: foo');<br /><br />header_register_callback(function() {<br /> foreach (headers_list() as $header) {<br /> if (strpos($header, 'X-Powered') !== false) {<br /> header_remove('X-Powered-By');<br /> }<br /> header_remove('X-Test');<br /> }<br /> }<br />);<br /><br />...<br /><br />?><br /></code></pre></blockquote>
<p>La fonction <code>imap_fetchmime()</code> a également été ajoutée, et il est maintenant également possible de se connecter à un serveur utilisant <a href="http://fr.wikipedia.org/wiki/Https#HTTPS"><abbr title="HyperText Transport Protocol Secured">HTTPS</abbr></a> via un <a href="http://fr.wikipedia.org/wiki/Proxy">proxy</a>, à l'aide des <a href="http://fr2.php.net/manual/en/book.stream.php">flux</a>.</p>
<p>Pour terminer, comme d'habitude, diverses corrections et optimisations, relatives soit à la compilation du langage, soit à son exécution, ont été effectuées, et sa fiabilité globale a donc été augmentée, même si un travail plus significatif a été réalisé sur les <a href="http://fr2.php.net/manual/en/book.stream.php">flux</a> et <a href="http://fr2.php.net/manual/en/book.mysqlnd.php"><code>mysqlnd</code></a>.</p>
<p>Sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, je n'ai rien relevé de réellement significatif.</p>
<p>Il y a en effet très peu de discussion actuellement, sans que je puisse en connaître la raison, et la seule qui a éveillé quelque peu mon intérêt ressemble plus à une chamaillerie dans une cours d'école qu'à autre chose et m'a montré qu'il existe encore certaine tension au sein des contributeurs.</p>
<p><a href="http://blog.thepimp.net">Pierre Joye</a> a en effet effectué <a href="http://news.php.net/php.internals/51340">une correction mineure</a>, dans le but de mettre en place une bonne pratique, sur le code de <a href="http://derickrethans.nl/">Derick Rethans</a>, code qui faisait originellement parti d'une extension mais qui est maintenant totalement intégré au code du langage.</p>
<p>Il semble que <a href="http://derickrethans.nl/">Derick</a> l'ai relativement mal pris, et ai demandé des explications sur les raisons de cette modification.</p>
<p>La discussion est alors partie rapidement en vrille, et un <a href="http://news.php.net/php.internals/51352">bel</a> <a href="http://news.php.net/php.internals/51353">échange</a> <a href="http://news.php.net/php.internals/51354">d'amabilité</a> a eu lieu entre les <a href="http://news.php.net/php.internals/51362">parties</a> <a href="http://news.php.net/php.internals/51383">concernées</a>, avant que les choses ne se tassent d'elles-mêmes.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/02/04/Mort-de-PHP6-320-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/236Mort de PHP6 + 310 joursurn:md5:288b0c034d6c3fadf519339578c93ed82011-01-24T22:45:00+01:002011-01-24T23:10:37+01:00mageekguyPHP Xinternals@PHPPHP XRFCthreading<p>Au risque de tuer immédiatement le suspense, je préfère vous prévenir immédiatement que le développement de la prochaine version de PHP n'a absolument rien eu de captivant au cours des dix derniers jours.</p>
<p>En effet, malgré la cinquantaine de modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient le code source de la prochaine version majeure du langage, je n'ai rien pu trouver de croustillant à me mettre sous la dent, puisqu'il s'agit pour l'essentiel de corrections, d'optimisations diverses et mineures, ainsi que de nettoyage du code.</p>
<p>Ce billet est donc certainement le plus <q>vide</q> que j'ai eu à écrire depuis que <a href="http://blog.mageekbox.net/?post/2010/03/25/Mort-de-PHP6-10-jours">j'ai commencé</a> à suivre le développement du langage de manière régulière.</p>
<p>Le développement du langage est donc très clairement à nouveau dans une phase de consolidation, compréhensible après l'effervescence qui a suivi le vent de révolution qui a soufflé sur la communauté des développeurs il y a <a href="http://blog.mageekbox.net/?post/2010/12/01/Mort-de-PHP6-260-jours">quelques temps</a>.</p>
<p>Pour autant, cela ne veut pas dire qu'il n'y a strictement rien à dire à propos de la période qui vient de s'écouler.</p> <p>Il y a bien évidemment eu le lot habituel de corrections, mais il est cette fois beaucoup plus petit que d'habitude, puisqu'il n'y a eu que trois bugs de résolus, à savoir <a href="http://bugs.php.net?id=47143">#47143</a>,
<a href="http://bugs.php.net?id=51458">#51458</a> et
<a href="http://bugs.php.net?id=52063">#52063</a>.</p>
<p>Cependant, la correction des deux premiers, <a href="http://bugs.php.net/?id=47143">#47143</a>,
<a href="http://bugs.php.net/?id=51458">#51458</a>, vaut le détour puisqu'il semblerait qu'elle signe, dans certain cas, la fin du fameux message d'erreur <q><code>Fatal error: Exception thrown without a stack frame in Unknown on line 0</code></q>.</p>
<p>Par ailleurs, les demandes de fonctionnalités <a href="http://bugs.php.net?id=47802">#47802</a> et <a href="http://bugs.php.net?id=39771">#39771</a> ont été implémentées, la plus intéressante étant celle concernant la méthode <code><a href="http://fr2.php.net/manual/en/domdocument.savehtml.php">DOMDocument::saveHTML()</a></code> qui présente maintenant une signature similaire à celle de <code><a href="http://fr2.php.net/manual/en/domdocument.savexml.php">DOMDocument::saveXML()</a></code> et permet donc dorénavant de sauvegarder un nœud précis et non plus l'intégralité du document.</p>
<p>Par ailleurs, le patch correspondant à la <a href="http://wiki.php.net/rfc/debugoptions"><abbr title="Request For Comments">RFC</abbr></a> concernant la fonction <code><a href="http://fr2.php.net/manual/en/function.debug-backtrace.php">debug_backtrace()</a></code> proposée durant <a href="http://blog.mageekbox.net/?post/2011/01/16/Mort-de-PHP6-300-jours">la période précédente</a> a été accepté et inclus dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Le reste des modifications concerne en majorité la correction de régressions et d'erreurs mineures qui se produisaient soit à l'exécution, soit lors de la compilation.</p>
<p>Et en ce qui concerne la résolution des problèmes liés à la compilation, la version pour <a href="http://en.wikipedia.org/wiki/Windows">Windows</a> de <a href="http://www.php.net/">PHP</a> est la grande gagnante, puisque c'est cette dernière qui a bénéficié en majorité des corrections apportées.</p>
<p>Il semblerait en effet que l'un des objectifs de <a href="http://blog.thepimp.net">Pierre Joye</a>, au vu de l'énorme travail qu'il effectue à ce niveau depuis maintenant plusieurs mois, soit de simplifier et d'améliorer au maximum la compilation des sources de <a href="http://www.php.net">PHP</a> sous <a href="http://en.wikipedia.org/wiki/Windows">Windows</a> afin de parvenir au même niveau de simplicité et de fonctionnalités que celui disponible sous <a href="http://en.wikipedia.org/wiki/Unix">UNIX</a>.</p>
<p>Comme annoncé, l'activité sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> n'a donc pas été des plus palpitante, et malheureusement, la liste de diffusion des développeurs du langage, connue sous le nom de <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, n'a pas été plus émoustillante.</p>
<p>Il y a bien une <a href="http://news.php.net/php.internals/51291">discussion</a> en cours ayant pour objet de permettre aux utilisateurs de <a href="http://www.php.net/">PHP</a> de manipuler des <a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29">threads</a>, mais je sais par expérience, et cela m'a d'ailleurs été à nouveau confirmé par <a href="http://blog.thepimp.net/">Pierre Joye</a> au détour d'une conversation sur <a href="http://twitter.com/#%21/PierreJoye">twitter</a>, que cela n'a aucune chance d'arriver, tout du moins à moyen terme.</p>
<p>Cela a de plus été confirmé par les <a href="http://news.php.net/php.internals/51305">réactions</a> des développeurs de <a href="http://www.php.net/">PHP</a>, qui sont loin d'être d'accord pour ne serait-ce qu'étudier sérieusement la possibilité d'ajouter cette fonctionnalité, d'autant que <del>Dieu</del> <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> a donné <a href="http://news.php.net/php.internals/51322">de la voix</a> sur le sujet, et même si certain semble y être tout de même <a href="http://news.php.net/php.internals/51321">un peu favorable</a>.</p>
<p>À leur décharge, le fait de donner la maîtrise des <a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29">threads</a> aux utilisateurs du langage pose un certain nombre de <a href="http://news.php.net/php.internals/51309">problèmes</a> qui sont loin d'être faciles à résoudre.</p>
<p>Je ne peux cependant qu'encourager la démarche, puisque je suis demandeur de cette fonctionnalité depuis maintenant très longtemps, puisque je suis persuadé qu'elle peut être très utile en ligne de commande, d'autant que la discussion est d'un <a href="http://news.php.net/php.internals/51308">niveau technique élevé</a> et est donc très intéressante pour celui qui s'intéresse au fonctionnement du <a href="http://en.wikipedia.org/wiki/Zend_engine">Zend Engine</a>.</p>
<p>Enfin, le retour de la fonction <code><a href="http://fr.php.net/dl">dl()</a></code> dans <a href="http://www.php.net/">PHP</a> en mode <a href="http://www.php.net/manual/en/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> n'est toujours pas à l'ordre du jour, puisqu'il semble que les développeurs aient des difficultés à <a href="http://news.php.net/php.internals/51296">se mettre d'accord</a>.</p>
<p>Le reste des discussions concerne des points de détails sans grand intérêt, du moins dans le cadre général de ce billet.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/01/24/Mort-de-PHP6-310-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/232Mort de PHP6 + 300 joursurn:md5:e65063480aa9e77f50733d4c702170f92011-01-14T23:59:00+01:002011-01-17T08:53:47+01:00mageekguyPHP Xinternals@PHPPHP XRFCtraits<p>Cette nouvelle période de dix jours a commencé sur les chapeaux de roues, à cause du bug <a href="http://bugs.php.net/bug.php?id=53632">#53632</a>.</p>
<p>En effet, découvert fin décembre par <a href="http://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/">Rick Regan</a>, il a le potentiel suffisant pour mettre à genoux tout serveur mettant en œuvre <a href="http://www.php.net/">PHP</a>, à condition évidemment de pouvoir l'exploiter, ce qui est loin d'être évident.</p>
<p>Il a donc provoqué un certain émoi au sein de la communauté des développeurs, à tel point que <del>Dieu</del> <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> lui-même s'est penché sur le problème.</p> <p>Le bug <a href="http://bugs.php.net/bug.php?id=53632">#53632</a> a donc été résolu et sa correction est d'ailleurs à l'origine de la sortie des versions <a href="http://www.php.net/archive/2011.php#id2011-01-06-1">5.3.5 et 5.2.17</a> du langage.</p>
<p>Cependant, ce n'est pas le seul bug à avoir été corrigé puisque les bugs <a href="http://bugs.php.net?id=53466">#53466</a>,
<a href="http://bugs.php.net?id=53682">#53682</a>,
<a href="http://bugs.php.net?id=53503">#53503</a>,
<a href="http://bugs.php.net?id=56349">#56349</a>,
<a href="http://bugs.php.net?id=53630">#53630</a>,
<a href="http://bugs.php.net?id=53729">#53729</a>,
<a href="http://bugs.php.net?id=53717">#53717</a> et
<a href="http://bugs.php.net?id=53551">#53551</a> ont été résolus.</p>
<p>Dans un tout autre registre, la méthode <code>\regexIterator::getRegex()</code> a été implémententée, conformément à la demande <a href="http://bugs.php.net/bug.php?id=53659">#53659</a>, et son auteur a publié sur son <a href="http://www.adayinthelifeof.nl/">blog</a> un <a href="http://www.adayinthelifeof.nl/2011/01/06/php-5-4-regexiteratorgetregex/">exemple d'utilisation</a>.</p>
<p>Cette période a d'ailleur été faste pour les requêtes en provenance des utilisateurs du langage, puisque trois autre demandes ont été acceptées, à savoir <a href="http://bugs.php.net?id=47802">#47802</a>, <a href="http://bugs.php.net?id=53684">#53684</a>, <a href="http://bugs.php.net?id=53466">#53466</a> et <a href="http://bugs.php.net?id=39847">#39847</a>.</p>
<p>Les directives <a href="http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-prepend-string"><code>error_prepend_string</code></a> et <a href="http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-append-string"><code>error_append_string</code></a> ne font donc dorénavant plus appel à la balise <abbr title="HyperText Markup Language">HTML</abbr> <code><font /></code>, dépréciée depuis 1999.</p>
<p>De plus, l'encodage des caractéres est maintenant supporté dans le <abbr title="Database Service Name">DSN</abbr> du pilote <a href="http://mysql.com/">MySQL</a> de <a href="http://fr.php.net/manual/en/book.pdo.php"><abbr title="PHP Database Objects">PDO</abbr></a>, et les fonctions <code><a href="http://fr.php.net/manual/en/mysqli-result.fetch-field.php">mysqli_fetch_[field|fields|field_direct]</a></code> retourne maintenant le nom de la base de données d'où sont extraits les champs concernés.</p>
<p>Et pour en finir avec les bases de données, la méthode <a href="http://fr.php.net/manual/en/sqlite3result.columntype.php"><code>\sQLite3Result::columnType()</code></a> retourne maintenant <code>false</code> lorsqu'il n'y a plus d'enregistrements à récupérer.</p>
<p>La méthode <code>\regexIterator::getRegex()</code>n'est pas la seule à avoir été ajoutée au langage, puisque suite à une discussion commencée durant <a href="http://blog.mageekbox.net/?post/2011/01/04/Mort-de-PHP6-290-jours">la période précédente</a> sur la liste de diffusion des développeurs, la méthode<code>\splObjectStorage::removeAllExcept()</code> a été ajoutée à la version de développement de <a href="http://www.php.net">PHP</a>.</p>
<p>La méthode <code>trait_exists()</code> a également été ajoutée, afin de pouvoir vérifier l'existence d'un trait à l'exécution, de la même façon que <a href="http://fr.php.net/manual/en/function.class-exists.php"><code>class_exists()</code></a>, qui retourne dorénavant et logiquement <code>false</code> lorsqu'elle est utilisée sur un trait.</p>
<p>Et en parlant des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, ces derniers ont été à l'honneur sur la liste de diffusion des contributeurs au langage, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, puisqu'ils ont été le sujet de la majorité des discussions.</p>
<p>Il faut dire que la liste n'a pas été des plus actives, sans que je puisse en donner une explication.</p>
<p>Dans tous les cas, les <a href="http://blog.mageekbox.net/?post/2011/01/16/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">traits</a> semblent passionner la communauté des développeurs, même s'ils semblent avoir <a href="http://news.php.net/php.internals/51184">quelques difficultés</a> à en appréhender les subtilités.</p>
<p>De plus, la question de l'implémentation des <a href="http://blog.mageekbox.net/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">traits</a> au sein des fonctionnalités d'introspection de <a href="http://www.php.net/">PHP</a> fait toujours débat, et n'a toujours <a href="http://news.php.net/php.internals/51234">pas de réponse</a>.</p>
<p><a href="http://www.stefan-marr.de/2010/12/php-next-traits-presentation-for-afup-in-paris//">Stefan Marr</a>, l'auteur de l'implémentation des traits dans PHP, a d'ailleurs saisi l'occasion pour <a href="http://news.php.net/php.internals/51231">demander une planification</a> pour la sortie de la prochaine version du langage, afin qu'il puisse organiser au mieux son temps, mais sa requête n'a pas reçu de réponse pour le moment.</p>
<p>Au niveau des <a href="http://wiki.php.net/rfc/"><abbr title="Request For Comments">RFC</abbr></a>, <a href="http://derickrethans.nl/">Derick Rethans</a> a <a href="http://news.php.net/php.internals/51272">proposé</a> d'ajouter <a href="http://wiki.php.net/rfc/debugoptions">un argument</a> à la fonction <code><a href="http://fr.php.net/manual/en/function.debug-backtrace.php">debug_backtrace()</a></code> afin de pouvoir désactiver le traitement des arguments au niveau de la pile d'exécution, et sa demande reçoit pour le moment un accueil favorable.</p>
<p>Enfin, il y a eu le lot habituel de corrections et d'optimisation, aussi bien au niveau du moteur du langage que de sa compilation, qui devrait s'effectuer plus proprement.</p>
<p>Et pour terminer sur une note d'humour, pour ceux qui se demanderaient comment participer au développement de PHP, l'un des contributeurs, <a href="http://www.linkedin.com/in/chadfulton">Chad Fulton</a>, a donné <a href="http://news.php.net/php.internals/51264">le mode d'emploi officieux</a>, et je peux dire que, de part mon expérience, c'est, et de loin, le meilleur que j'ai pu lire à ce jour.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/01/16/Mort-de-PHP6-300-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/230Mort de PHP6 + 290 joursurn:md5:7bf04c40923bab3edfa1040c506c020c2011-01-04T22:30:00+01:002011-01-04T22:55:20+01:00mageekguyPHP Xdoctrine 2internals@mysqlndpatchworkPHP XsplFileInfo<p>Après <a href="http://blog.mageekbox.net/?post/2011/01/04/?post/2010/12/23/Mort-de-PHP6-280-jours">le dernier billet de 2010</a>, voici fort logiquement le premier billet de 2011 à propos du développement de <a href="http://www.php.net/">PHP</a>.</p>
<p>Et malheureusement, le titre traditionnel depuis maintenant <a href="http://blog.mageekbox.net/?post/2011/01/04/?post/2010/03/25/Mort-de-PHP6-10-jours">près de 300 jours</a> est toujours d'actualité, car nouvelle année ne veut nullement dire nouvelle version, dans le monde des développeurs de <a href="http://www.php.net/">PHP</a>, ni même d'ailleurs bonnes résolutions.</p>
<p>En effet, si une nouvelle version du langage est bien en cours de
finalisation, sa diffusion publique n'est pas à l'ordre du jour pour le
moment, même si j'ai bon espoir qu'elle intervienne en cours d'année.</p>
<p>Le titre de ces chroniques ne changera donc pas prochainement, et je
pense que vous allez pouvoir le lire encore quelques temps, d'autant que
le développement du langage n'a pas été des plus actifs en cette
période de fêtes.</p> <p>Sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, il n'y a rien de bien croustillant à ce mettre sous la dent.</p>
<p>La proposition d'inclure un langage de <a href="http://fr.wikipedia.org/wiki/Macro-d%C3%A9finition">macro-définitions</a> similaire à celui du C faite lors de la période précédente a été <a href="http://news.php.net/php.internals/51132">définitivement enterrée</a>, fermement et sans violence.</p>
<p>Il faut dire que le sujet revient régulièrement et que les développeurs, par la force des choses, sont parfaitement rompus à cet exercice, et sont de plus, pour une fois, approximativement sur la même longueur d'onde sur ce point précis.</p>
<p>Dans un registre similaire, <a href="http://news.php.net/php.internals/51153">Nicolas Grekas</a>, l'auteur du framework <a href="http://pa.tchwork.com/">patchwork</a>, présenté lors du <a href="http://pa.tchwork.com/wiki/?title=Forum_PHP_de_l%27AFUP_2009&redirect=no">forum PHP 2009</a>, a fait une proposition visant à supprimer le support des espaces de nommage pour les fonctions et les constantes.</p>
<p>En contrepartie, il a proposé de donner la possibilité d'inclure tout ce que contient un espace de nommage uniquement à la demande, via une modification du mécanisme d'<a href="http://fr.php.net/autoload"><code>autoload</code></a>.</p>
<p>Le moins que l'on puisse dire est que ses suggestions ont été <a href="http://news.php.net/php.internals/51166">très loin</a> de remporter tous les suffrages, mais il faut dire que la forme n'était pas à mon sens la mieux choisie, puisque <a href="http://news.php.net/php.internals/51153">Nicolas</a> a tenté de démontrer que sa proposition était intéressante en disant que d'après lui, personne ne définis de fonctions et de constantes dans un espaces de nommage.</p>
<p>Or, ce n'est pas parce que <a href="http://www.doctrine-project.org/blog/doctrine2-released">Doctrine 2</a> ne le fait pas qu'il n'y a pas quelqu'un dans le monde qui le fait, ce qui est d'ailleurs le cas puisque <a href="https://svn.mageekbox.net/repositories/atoum/trunk/scripts/runners/autorunner.php">Atoum</a> dispose de constantes rattachées à son espace de nommage, par exemple.</p>
<p>Je précise que je me permet cette remarque car je pense avoir indirectement poussé Nicolas à faire cette proposition, suite à une discussion que j'ai eu récemment avec <a href="http://www.geek-directeur-technique.com/">Amaury Bouchard</a>, et que même si ce n'est pas le cas, j'espère que <a href="http://news.php.net/php.internals/51153">Nicolas</a> ne se découragera pas et réitérera l'expérience dans un proche avenir.</p>
<p>Dans un autre registre, un <a href="http://news.php.net/php.internals/51158">patch</a> a été proposé pour améliorer les performances du langage, grâce à une série d'optimisation au niveau du Zend Engine et au prix d'une légère augmentation de l'empreinte mémoire, et après <a href="http://news.php.net/php.internals/51177">une relecture attentive</a>, il devrait être intégré dans la version de développement.</p>
<p>Enfin, pour en terminer avec <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, <a href="http://news.php.net/php.internals/51149">Rune Kaagaard</a> a proposé de rédiger la grammaire de <a href="http://www.php.net">PHP</a> à l'aide de la notation <abbr title="Extended Backus-Naur Form"><a href="http://fr.wikipedia.org/wiki/Extended_Backus-Naur_Form">EBNF</a></abbr>, sur le modèle de <a href="http://docs.python.org/dev/reference/grammar.html">ce qui existe pour Python</a>.</p>
<p>Son initiative a été perçue comme <a href="http://news.php.net/php.internals/51151">une très bonne chose</a> pour le langage, car il n'existe à ce jour aucun outil de ce type, principalement parce qu'il n'existe aucune documentation sur ce sujet et que la syntaxe du langage contient un grand nombre de cas particuliers et plusieurs façon, <a href="http://fr.php.net/manual/en/control-structures.alternative-syntax.php">syntaxiquement parlant</a>, d'écrire un même code.</p>
<p>L'actualité du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient la version de développement de <a href="http://www.php.net">PHP</a>, n'a pas été plus trépidante que celle de l<a href="http://news.php.net/group.php?group=php.internals">a liste de diffusion des contributeurs</a>.</p>
<p>Le lot habituel de correction et d'optimisation est toujours présent, ainsi que le lot de correction de bugs, puisque ceux numérotés <a href="http://bugs.php.net?id=53606">#53606</a>,
<a href="http://bugs.php.net?id=53603">#53603</a>,
<a href="http://bugs.php.net?id=53612">#53612</a> et
<a href="http://bugs.php.net?id=53629">#53629</a> ont été éradiqués.</p>
<p>La version de développement de PHP, suite à la demande <a href="http://bugs.php.net/bug.php?id=48767">#48767</a>, dispose également maintenant de la méthode <code>\splFileInfo::getExtension()</code>, qui permet d'obtenir l'extension d'un fichier à la manière de <code><a href="http://fr.php.net/pathinfo">pathinfo()</a></code> lorsqu'elle est appelée avec la constante <code>PATHINFO_EXTENSION</code> en deuxième argument.</p>
<p>L'extension <a href="http://fr.php.net/manual/en/book.mysqlnd.php"><code>mysqlnd</code></a>, le pilote natif pour <a href="http://mysql.com/">mysql</a>, a également été modifiée afin de pouvoir mieux supporter les greffons à l'avenir, tandis qu'il n'est plus possible de transformer une chaîne de caractères en objet en définissant dynamiquement une propriété, puisque lorsqu'il est configuré en mode strict, <a href="http://www.php.net">PHP</a> générera dorénavant une erreur.</p>
<p>Le code suivant produira donc une erreur de type <code>E_STRICT</code> avec les prochaines versions du langage :</p>
<blockquote><pre><code><?php<br /><br />$x = ''; // ou null, ou false.<br />$x->baz = 1;<br /><br />?></code></pre></blockquote>
<p>Enfin, pour terminer sur une note d'humour, un grand nombre de fichiers, pour ne pas dire la totalité, ont été impactée par cette <a href="http://svn.php.net/viewvc/php/php-src/trunk/TSRM/TSRM.c?r1=296679&r2=306938&pathrev=306938">modification</a>, et peut être faut-il y voir la carte de vœux des développeurs du langage pour 2011.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/01/04/Mort-de-PHP6-290-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/227Mort de PHP6 + 280 joursurn:md5:b9394fa65b32b3c25fa1cfb0834060012010-12-24T00:00:00+01:002011-01-04T23:23:29+01:00mageekguyPHP Xinternals@PHPPHP Xtraitstrunk<p>Et voici le dernier billet de l'année sur ce thème.</p>
<p>L'air de rien, dans trois mois, cela fera un an que je réalise cette chronique.</p>
<p>Cela me fait un peu bizarre, car je n'imaginais pas du tout aller aussi loin lorsque j'ai commencé.</p>
<p>Il faut dire que vous y êtes pour beaucoup, car vos encouragements,
vos remerciements, vos félicitations, explicites via vos commentaires ou
implicites via mes statistiques de fréquentation me donne une réelle
motivation pour continuer l'aventure.</p>
<p>J'ai en effet l'impression de répondre à un réel besoin, et je pense que tant que cela sera le cas, je vais continuer.</p>
<p>L'aventure va donc se poursuivre en 2011 et cela même si ma chronique aura quelques jours de retard début janvier.</p>
<p>J'ai en effet un déménagement à gérer, puisque j'ai enfin trouvé un logement sur Lyon et ma famille va pouvoir me rejoindre.</p>
<p>Je n'aurais donc guère de temps à consacrer au suivi de l'actualité de <a href="http://www.php.net/">PHP</a> durant les premiers jours de la nouvelle année.</p>
<p>Cette parenthèse étant terminé, je vais maintenant vous parler des
événements survenus au cours des dix derniers jours dans le développement
du langage.</p> <p>Et malheureusement, vous n'aurez pas de nouvelle version sous le sapin cette année.</p>
<p>En effet, la date de sortie de la version alpha de PHP 5.4 n'est toujours pas définie, et c'est même le silence radio complet sur ce sujet sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>Pour autant, il y a eu des discussions, notamment au sujet :</p>
<ul><li>de la désactivation des traitements effectués sur <code>$_POST</code>.</li>
<li>de la gestion des propriétés par les traits</li>
<li>de la possibilité de définir des macros directement dans le code <a href="http://www.php.net">PHP</a>.</li>
<li>de définir le type des balises PHP lors de l'inclusion d'un fichier.</li>
<li>de la gestion des erreurs.</li>
</ul>
<p>En ce qui concerne la désactivation des traitements sur la variable <code>$_POST</code>, le débat, débuté lors de <a href="http://blog.mageekbox.net/?post/2010/12/13/Mort-de-PHP6-270-jours">la période précédente</a>, porte sur le recours à une option de configuration au niveau du <code>php.ini</code>, le fichier de configuration du langage.</p>
<p>Pour l'instant, c'est cette solution a été retenue et implémentée dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, mais elle n'est pas du goût <a href="http://news.php.net/php.internals/51054">de tout le monde</a>.</p>
<p>Il est donc possible que cela évolue, même si pour l'instant, aucune solution alternative n'a été proposée.</p>
<p>Les <a href="http://blog.mageekbox.net/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">traits</a> ont été également à l'ordre du jour, et plus particulièrement la façon dont ils doivent gérer les propriétés d'une classe.</p>
<p>Pour le moment, il a été décidé que si deux propriétés portant le même nom dans deux <a href="http://blog.mageekbox.net/?post/2010/12/23/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">traits</a> différents ne sont pas identiques, tant en terme de visibilité qu'au niveau de leur valeur par défaut, <a href="http://www.php.net">PHP</a> générera une erreur fatale lors de la compilation du script.</p>
<p>Et si le mode strict est activé, un message sera émis pour décourager l'utilisation des propriétés dans les traits.</p>
<p>En effet, ces derniers sont indépendants de l'état des classes dans lesquels ils sont intégrés, et en conséquence, ils ne devraient pas faire appel directement à des propriétés mais utiliser des accesseurs.</p>
<p>Cela me rappelle furieusement un certaine certaine discussion sur <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">ce blog</a>...</p>
<p>Bref, la <a href="http://wiki.php.net/rfc/horizontalreuse"><abbr title="Request For Comments">RFC</abbr></a> correspondante a été mise à jour en fonction de ce qu'il est ressorti des discussions, mais le sujet est complexe et il n'est pas dit que tout cela ne change pas encore à l'avenir.</p>
<p>Dans un autre registre, la discussion commencé sur la période précédente concernant la possibilité de définir le type de balise PHP utilisées dans un fichier inclus se poursuit.</p>
<p>Les contributeurs recherchent la meilleure solution pour implémenter cette fonctionnalité, et il semble que l'on s'oriente vers l'utilisation d'un masque de bits afin d'avoir un maximum de souplesse, de la manière suivante :</p>
<blockquote><pre><code>2 - normal tags (<?php ?> )<br />4 - short tags (<? ?>)<br />8 - asp ( <% %> )<br />16 - Shorthand echo ( <?php=, <?=, <%= )<br />32 - Script tags (<script type="php"> </script> )</code></pre></blockquote>
<p>Enfin, comme je l'ai dis, il y a eu une <a href="http://news.php.net/php.internals/51116">proposition</a> pour intégrer la possibilité de définir l'équivalent des macros C au sein du code PHP, de la manière suivante :</p>
<blockquote><pre><code><?php<br /><br />MACRO('PF','private function _');<br />MACRO('SCOPE_CLASS','class MyProject_');<br /><br />class UseMacro {<br /> PF preSave($object) {<br /> //...<br /> }<br />}<br /><br />SCOPE_CLASS Internal {}<br /><br />?></code></pre></blockquote>
<p>Pour l'instant, l'accueil n'a pas été des plus chaleureux, les contributeurs considérant en effet que cela rajoute une couche de complexité inutile au langage et que de plus, il existe des solutions externes comme le pré-processeur de <a href="http://fr.wikipedia.org/wiki/GCC"><code>gcc</code></a> ou les systèmes de templates.</p>
<p>Enfin, une modification a été proposée <a href="http://news.php.net/php.internals/51081">pour la seconde</a> fois pour améliorer en terme de performance la gestion des erreurs par le langage.</p>
<p>La première proposition sur ce sujet avait donné lieu à <a href="http://www.pubbs.net/200908/php/49633-php-dev-patch-error-masks.html">une discussion fleuve</a> qui n'avait aboutie à rien, comme malheureusement bien souvent.</p>
<p>Pour l'instant, les débats sont beaucoup moins enflammés et <a href="http://news.php.net/php.internals/51084">un problème a été soulevé</a> au niveau de la nouvelle implémentation proposée, problème qui ne semble pas avoir de solution.</p>
<p>Au niveau du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, il ne s'est pas passé grand choses de palpitant, certainement en raison de l'approche des fêtes de fin d'année.</p>
<p>L'utilitaire <a href="http://les-da-silva.fr/docPhp/install.pecl.phpize.html"><code>phpize</code></a> semble maintenant être utilisable sous Windows, et les bugs <a href="http://bugs.php.net?id=53541">#53541</a>,
<a href="http://bugs.php.net?id=53568">#53568</a>,
<a href="http://bugs.php.net?id=53527">#53527</a>,
<a href="http://bugs.php.net?id=53574">#53574</a>,
<a href="http://bugs.php.net?id=53579">#53579</a>,
<a href="http://bugs.php.net?id=53588">#53588</a>,
<a href="http://bugs.php.net?id=52209">#52209</a> et
<a href="http://bugs.php.net?id=53592">#53592</a> ont été corrigés.</p>
<p>Le reste des modifications concerne des corrections, du nettoyage et des optimisations, ainsi que les implémentations correspondant aux décisions prises sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a> dernièrement et dont j'avais déjà parlé dans le billet concernant <a href="http://blog.mageekbox.net/?post/2010/12/13/Mort-de-PHP6-270-jours">la période précédente</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>
<p>Et joyeux noël à tous !</p>http://blog.mageekbox.net/?post/2010/12/23/Mort-de-PHP6-280-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/223Interview avec Rasmus, Ilia et Derickurn:md5:59961964a0d2646dd2672cc019395d162010-12-20T22:00:00+01:002010-12-21T08:53:40+01:00mageekguyPHP XDerick Rethansforum PHP 2010Ilia Alshanetskyinternals@interviewPHPPHP XRasmus LerdorfZeev Suraski<p>Lors du <a href="http://blog.mageekbox.net/?post/2010/12/20/?post/2010/11/15/Compte-rendu-du-forum-PHP-2010-1">forum PHP 2010</a>, j'ai eu l'occasion de discuter avec <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a>, <a href="http://ilia.ws/">Ilia Alshanetsky</a> et <a href="http://derickrethans.nl/">Derick Rethans</a>.</p>
<p>Il est ressorti de ces discussions un article au sujet de <a href="http://www.php.net/">PHP</a>, de son avenir et de sa communauté, destiné à paraître dans <a href="http://www.programmez.com/">Programmez!</a>, mais qui n'a apparemment pas été retenu.</p>
<p>Je vous en propose donc ici une version légèrement remaniée, afin que
le temps que j'ai passé à l'écrire durant le forum au lieu d'assister
aux conférences qui m'intéressaient ne soit pas entièrement perdu.</p>
<p>Je précise que cet article a été écrit il y a plus d'un mois, au moment du forum, et que depuis, l'actualité du langage a beaucoup évoluée.</p>
<p>En conséquence, les informations qu'il contient ne sont plus d'actualité pour certaines, et je vous invite donc à lire les <a href="http://blog.mageekbox.net/?post/2010/12/13/Mort-de-PHP6-270-jours">billets</a> <a href="http://blog.mageekbox.net/?post/2010/12/01/Mort-de-PHP6-260-jours">relatifs</a> <a href="http://blog.mageekbox.net/?post/2010/11/21/Mort-de-PHP6-250-jours">à</a> l'évolution du développement afin de faire le tri.</p> <p>Le <a href="http://www.afup.org/pages/forumphp2010/">forum PHP 2010</a>, qui a eu lieu les 9 et 10 novembre derniers, a accueilli quatre figures emblématiques de la communauté des développeurs de <a href="http://www.php.net">PHP</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a>, le créateur du langage, et <a href="http://en.wikipedia.org/wiki/Zeev_Suraski">Zeev Suraski</a>, l'un des deux pères du <a href="http://en.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, avaient ainsi fait le déplacement jusqu'à Paris.
</p>
<p>De plus, <a href="http://derickrethans.nl/">Derick Rethans</a>, notamment connu pour avoir développé <a href="http://www.xdebug.org">Xdebug</a>, et <a href="http://ilia.ws/">Ilia Alshanetsky</a>, qui participe au développement du langage dans sa globalité, ont participé à l'événement, qui fêtait cette année les 15 ans d'existence du langage et les 10 ans de l'<a href="http://www.afup.org"><abbr title="Association Française des Utilisateurs de PHP">AFUP</abbr></a>.</p>
<p>J'ai donc profité de cette occasion pour discuter physiquement, avec <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a>, <a href="http://derickrethans.nl/">Derick</a> et <a href="http://ilia.ws/">Ilia</a> de l'avenir de <a href="http://www.php.net">PHP</a> et du fonctionnement de la communauté des développeurs, sans passer par mes outils de communication habituels que sont <a href="http://en.wikipedia.org/wiki/IRC">IRC</a> et la liste de
diffusion des développeurs du langage, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>Je vous livre donc dans les lignes qui suivent une synthèse de ces discussions très informelles, puisqu'elles ont eu lieu en dehors des conférences.</p>
<p>J'ai ainsi eu au cours de nos conversation la confirmation qu'il y avait 90% de chances pour que <a href="http://derickrethans.nl/">Derick Rethans</a> soit le <q>release master</q> de la prochaine version du langage.</p>
<p>Cette version, fruit du travail énorme effectuée par la communauté des développeurs depuis <a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">l'abandon du développement de PHP 6</a>, sera certainement nommée PHP 5.4 et sa sortie est prévue pour la première moitié de l'année 2011.</p>
<p>Elle proposera entre autre chose un modèle objet renforcé, via le concept de <a href="http://blog.mageekbox.net/?post/2010/12/16/Rendez-vous-AFUP-du-15/12/2010">traits</a>, ainsi que le support de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, la possibilité <a href="http://wiki.php.net/rfc/functionarraydereferencing">d’accéder directement</a> aux éléments d'un tableau renvoyé par une fonction ou une méthode, et des améliorations au niveau du support <a href="http://wiki.php.net/rfc/closures/object-extension">des fonctions anonymes et des fermetures</a>.</p>
<p>Elle donnera également la possibilité de définir le type numérique des arguments des méthodes et des fonctions, et elle proposera l'interface <a href="http://wiki.php.net/rfc/jsonable"><code>jsonable</code></a> qui permettra de définir le comportement d'un objet lorsqu'il sera sérialisé au format <a href="http://en.wikipedia.org/wiki/JSON"><abbr title="JavaScript Object Notation">JSON</abbr></a>.</p>
<p>Cependant, tout cela n'a pas été fait au détriment des performances, puisqu'elles sont en nette hausse, grâce à une optimisation poussée de la gestion de la mémoire.</p>
<p>PHP 5.4 sera donc plus rapide, mais surtout beaucoup moins gourmand en mémoire, puisque les tests montrent que suivant le contexte d'exécution, il est susceptible de consommer jusqu'à 30% de mémoire de moins que la précédente version.</p>
<p>Enfin, certains <q>boulets</q> historiques de <a href="http://www.php.net">PHP</a>, comme la directive <q>register_globals</q>, le <q>safe mode</q> ou les <q>magic quotes</q> ont été supprimés, mais en contrepartie, le code existant reposant sur ces fonctionnalités ne fonctionnera plus.</p>
<p><a href="http://ilia.ws/">Ilia</a> m'a d'ailleurs indiqué que ce nettoyage devrait se poursuivre avec les prochaines versions, de façon à assainir le langage, mais cependant, cela ne provoquera jamais de cassure brutale de la compatibilité.</p>
<p>La communauté a en effet la volonté de faire cela de manière très progressive afin de permettre une mise à jour en douceur des quelques
milliards de lignes de code <a href="http://www.php.net">PHP</a> existantes dans le monde.</p>
<p>Et de plus, le périmètre de cet assainissement n'est pas clairement défini puisque le développement du langage suit à l'heure actuelle une politique très pragmatique.</p>
<p>Ainsi, toute modification ou un évolution doit absolument répondre à une problématique réelle et sérieuse qui ne peut pas être résolue par un autre moyen, tout en ayant un impact minimal sur les performances du langage et ne pas rendre le langage plus complexe.</p>
<p>L'ajout de l'interface <a href="http://wiki.php.net/rfc/jsonable"><code>jsonable</code></a> est l'exemple parfait de cette politique, car elle permet de répondre simplement à une problématique concrète dans le monde du développement web d'aujourd'hui, induite l'utilisation massive d'<abbr title="Asynchronous Javascript And XML">AJAX</abbr> qui nécessite de faire transiter dans un format simple un volume de données important entre des clients et un serveur.</p>
<p>En conséquence, la décision de supprimer une fonctionnalité jugée comme dangereuse ou comme étant une erreur de conception ne sera prise qu'uniquement en fonction de cet aspect pragmatique.</p>
<p>C'est la raison pour laquelle il y a peu de chances de voir un jour la règle de nommage des fonctions de <a href="http://www.php.net">PHP</a> uniformisée, alors que c'est une demande récurrente des utilisateurs du langage.</p>
<p>En effet, les fonctions concernées fonctionnent parfaitement, et la correction de cet aspect purement esthétique n'est pas jugée comme primordiale, même si <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> avoue que s'il en avait la possibilité, il réécrirait <a href="http://www.php.net">PHP</a> en suivant une politique de nommage des fonctions beaucoup plus rigoureuse.</p>
<p>Cette philosophie est également la cause du refus de l'implémentation des annotations proposée récemment.</p>
<p>D'une part, les partisans des annotations n'ont pas su convaincre les contributeurs de la pertinence de ce qu'ils proposaient, tant au niveau fonctionnel que technique.</p>
<p>D'autre part, les annotations peuvent être émulée à l'aide d'outils déjà présent dans le langage, et notamment <a href="http://fr2.php.net/manual/en/reflectionclass.getdoccomment.php">l'introspection</a>.</p>
<p>Il est cependant possible d'espérer voir arriver un jour les annotations dans <a href="http://www.php.net">PHP</a>, car <a href="http://derickrethans.nl/">Derick Rethans</a> a posé le dossier sur la table lorsqu'il a proposé une feuille de route pour la publication de la prochaine version du langage, dont
la première version alpha doit être diffusée à la fin de novembre 2010.</p>
<p>Il a également proposé d'intégrer <a href="http://en.wikipedia.org/wiki/Alternative_PHP_Cache#Alternative_PHP_Cache">APC</a>, l'un des systèmes de cache d'opcode disponible sur le marché, dans le cœur du langage.</p>
<p>Cependant, aucune décision définitive n'a été prise à ce niveau, car certain problème sont à régler, le premier d'entre eux étant que pour l'instant, <a href="http://en.wikipedia.org/wiki/Alternative_PHP_Cache#Alternative_PHP_Cache">APC</a> ne fonctionne pas avec la version de développement de <a href="http://www.php.net">PHP</a>.</p>
<p>Et pour en revenir à l'aspect pragmatique du développement du langage, <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> le justifie très simplement.</p>
Pour lui, <a href="http://www.php.net/">PHP</a> doit être un outil simple et efficace, qui doit permettre avant tout de résoudre des problèmes réels rapidement.
<p>En conséquence, il ne faut développer que l'indispensable, et peu importe si l'implémentation sous-jacente n'est pas <q>belle</q>.</p>
<p>De son point de vue, un code mal écrit qui résout un problème vite et bien vaut mieux qu'aucune solution.</p>
<p>De plus, il pense qu'il est inutile de perdre du temps à développer des fonctionnalités qui ne présente pas une valeur ajoutée suffisante ou à rendre le code plus esthétique : la résolution du problème prévaut sur la beauté de la solution.</p>
<p>Les membres de la communauté des développeurs appliquent également cette philosophie, même si <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> avoue qu'ils sont certainement beaucoup moins extrémistes que lui.</p>
<p>Et d'après <a href="http://ilia.ws/">Ilia</a> et <a href="http://derickrethans.nl/">Derick</a>, ils l'appliquent d'autant mieux que la plupart d'entre sont des bénévoles qui développent le langage sur leur
temps libre.</p>
<p>Ils préfèrent donc ne pas perdre leur temps à refaire plus proprement des choses qui fonctionnent alors qu'elles sont mal
implémentées, et à contrario se concentrer sur des développements à forte valeur ajoutée pour le plus grand nombre plutôt que sur des choses plus exclusives fonctionnellement et nécessaires uniquement à une minorité.</p>
<p>Le support d'<a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>, qui devait être la fonctionnalité phare de PHP 6, fait d'ailleurs les frais de cette politique, puisque les développeurs du langage considèrent que les outils présent dans <a href="http://www.php.net/">PHP</a> actuellement pour manipuler des chaînes de caractères dans ce format sont suffisants pour répondre à la majorité des besoins.</p>
<p>En conséquence, depuis l'arrêt du développement de PHP 6, la communauté des contributeurs n'a fait aucun développement pour implémenter ou améliorer son support dans le langage, et il ne faut donc pas compter voir ce dernier être intégré plus fortement à <a href="http://www.php.net/">PHP</a> à court terme.</p>
<p><a href="http://fr.php.net/pdo"><abbr title="PHP Data Object">PDO</abbr></a>, la couche d'abstraction dédiées aux bases de données, fait également les frais de cette approche pragmatique.</p>
<p>Il existe en effet une <a href="http://wiki.php.net/rfc/pdov1"><abb title="Request For Comment">RFC</abb></a> datant de deux ans, qui pose les bases de sa réécriture complète afin de lui ajouter de nouvelles fonctionnalités.</p>
<p>Cependant, le développement est au point mort, notamment à cause du fait que la version actuelle est fonctionnelle et
couvre un spectre suffisant des besoins des utilisateurs du langage.</p>
<p>Autre conséquence, la feuille de route concernant l'ajout de fonctionnalité est complètement vierge actuellement, et aussi bien <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> que <a href="http://ilia.ws/">Ilia</a> ou <a href="http://derickrethans.nl/">Derick</a> n'ont pu me donner la moindre indication sur une quelconque orientation.</p>
<p>J'ai donc lancé quelques <q>sondes</q> pour connaître leur ressenti par rapport à quelques technologies émergentes dans le web actuellement.</p>
<p>En effet, la volonté de la communauté des développeurs est de faire évoluer le langage en même temps que le web, et il m'a donc semblé pertinent de leur demander ce qu'ils pensaient d'une technologie comme <a href="http://nodejs.org/">node.js</a>, par exemple, qui permet d'exécuter du code <a href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a> au niveau du serveur avec une gestion des entrées/sorties non bloquante.</p>
<p><a href="http://ilia.ws/">Ilia</a> et <a href="http://derickrethans.nl/">Derick</a> pensent que c'est une technologie très intéressante, mais que, pour l'instant, l'intérêt d'intégrer tout ou partie des concepts sous-jacents de <a href="http://nodejs.org/">node.js</a> n'est pas démontré.</p>
<p><a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> est quand à lui beaucoup plus intéressé par <a href="http://en.wikipedia.org/wiki/Gearman">Gearman</a>, qui permet faire de la distribution de tâches de manière asynchrone
sur un ou plusieurs serveurs.</p>
<p>Il voit en effet cette technologie comme une alternative crédible aux <a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29">threads</a>, qu'il considère en conséquence comme complètement inutile
au niveau de <a href="http://www.php.net">PHP</a>.</p>
<p>J'ai également évoqué le départ de <a href="http://blog.mageekbox.net/?post/2010/05/06/Un-coup-dur-pour-PHP">Lukas Kahwe Smith</a> de la communauté des développeurs avec <a href="http://ilia.ws/">Ilia</a>.</p>
<p>Pour mémoire, <a href="http://blog.mageekbox.net/?post/2010/12/20/?post/2010/05/06/Un-coup-dur-pour-PHP">Lukas</a> est celui qui avait une réelle volonté de structurer le développement du langage.</p>
<p> Pour cela, il a mis en place divers outils de suivi, ainsi que le principe des <q>release masters</q> et des <a href="http://wiki.php.net/rfc"><abbr title="Request For Comments">RFC</abbr></a>.</p>
<p>Le fait qu'il quitte le projet pouvait donc potentiellement avoir un impact important sur le développement du langage.</p>
<p>Cependant, <a href="http://ilia.ws/">Ilia</a> considère que ce type d'événement est parfaitement normal dans le sens ou il fait parti du cycle de vie d'un projet libre, et qu'en conséquence, son impact est nul.</p>
<p>Le futur de <a href="http://www.php.net/">PHP</a> s'annonce donc intéressant, car si pour son créateur, le langage est mature et ne nécessite plus d'évolution majeure, car il lui permet de résoudre l'ensemble de ses problèmes, la porte n'est pas fermée, bien au contraire.</p>
<p>L'ajout de fonctionnalités ou les évolutions devront juste être en accord avec la politique de développement pragmatique appliquée par les
contributeurs.</p>
<p>De plus, les problèmes rencontrés ces derniers mois dans le développement du langage et par sa communauté n'a pas perturbé fortement son évolution, puisqu'une nouvelle version proposant de nouvelles fonctionnalités va voir prochainement le jour, et cela même si elle n'implémentera pas Unicode ou certaines évolutions réclamées par certains utilisateurs, car jugées peu pertinentes, aussi bien fonctionnellement que techniquement.</p>http://blog.mageekbox.net/?post/2010/12/20/Interview-avec-Rasmus%2C-Ilia-et-Derick#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/220Mort de PHP6 + 270 joursurn:md5:c48ad6f661948da49b53482687152b532010-12-13T23:00:00+01:002010-12-14T11:08:33+01:00mageekguyPHP Xinternals@PHP XRFCtrunk<p>Avec un peu de retard à cause d'un emploi du temps relativement
chargé actuellement, voici ma chronique habituelle concernant le
développement de <a href="http://www.php.net/">PHP</a>.</p>
<p>Après l'effervescence de <a href="http://blog.mageekbox.net/?post/2010/12/01/Mort-de-PHP6-260-jours">la période précédente</a> causée par le vent de
révolution qui a soufllé dans le monde des développeurs du langage, les
dix jours qui viennent de s'écouler ont été plus calmes.</p>
<p>Cependant, cela ne veut pas dire qu'ils ont été dénués d'intêrets.</p>
<p>En effet, si les modifications apportées au <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>
sont quasiment exclusivement des corrections et des optimisations
issues du travail effectué sur les branches 5.2 et 5.3, la liste de
diffusion des contributeurs est restée active.</p>
<p>Une nouvelle <abbr title="Request For Comment">RFC</abbr> a été proposée, et les débats commencés durant les dix jours précédents ont continué.</p>
<p>De plus, de nouveaux débats ont commencé, et certains ont déclenché une vive discussion.</p> <p>Comme à l'habitude, afin de ménager le suspense, je vais commencer par décrire les modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Il y en a eu soixante-dix, et la majorité d'entre elles sont des corrections de bugs ou de tests unitaires, mais en cherchant bien, il y a une information intéressante.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=51250">#51250</a>, <a href="http://bugs.php.net?id=53440">#53440</a>, <a href="http://bugs.php.net?id=29085">#29085</a>, <a href="http://bugs.php.net?id=53463">#53463</a>, <a href="http://bugs.php.net?id=53492">#53492</a>, <a href="http://bugs.php.net?id=53511">#53511</a>, <a href="http://bugs.php.net?id=39199">#39199</a>, <a href="http://bugs.php.net?id=53512">#53512</a>, <a href="http://bugs.php.net?id=53512">#53512</a>, <a href="http://bugs.php.net?id=53517">#53517</a>, <a href="http://bugs.php.net?id=53515">#53515</a>, <a href="http://bugs.php.net?id=26158">#26158</a>, <a href="http://bugs.php.net?id=53503">#53503</a>, <a href="http://bugs.php.net?id=53425">#53425</a>, <a href="http://bugs.php.net?id=53150">#53150</a>, <a href="http://bugs.php.net?id=47435">#47435</a>, <a href="http://bugs.php.net?id=53530">#53530</a>, <a href="http://bugs.php.net?id=53493">#53493</a>, <a href="http://bugs.php.net?id=53493">#53493</a> et <a href="http://bugs.php.net?id=48607">#48607</a> ont été corrigés.</p>
<p>Par ailleurs, les demandes utilisateurs <a href="http://bugs.php.net?id=53447">#53447</a>, <a href="http://bugs.php.net?id=53457">#53457</a> et <a href="http://bugs.php.net?id=53457">#53457</a> ont été implémentées.</p>
<p>Il sera donc possible avec la prochaine version de <a href="http://www.php.net">PHP</a> d'ouvrir via <a href="http://fr.php.net/manual/en/function.fopen.php"><code>fopen()</code></a> le descripteur de fichier de son choix, comme par exemple ceux disponibles dans <code>/dev/fd</code> et cela aussi bien sous <a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution"><abbr title="Berkeley Software Distribution">BSD</abbr></a> que <a href="http://en.wikipedia.org/wiki/Linux">Linux</a> et le support de <a href="http://en.wikipedia.org/wiki/Openssl"><code>openssl</code></a> a été amélioré dans certain contexte d'exécution spécifique.</p>
<p>Les développeurs auront également enfin la possibilité de définir un séparateur de plus d'un caractère pour le séparateur des centaines lors de l'utilisation de la fonction <a href="http://fr.php.net/manual/en/function.number-format.php"><code>number_format()</code></a>.</p>
<p>Des modifications ont également été effectuée afin de faciliter la compilation du langage sous <a href="http://en.wikipedia.org/wiki/Windows">Windows</a>, améliorer les tests unitaires et enfin permettre la compilation de <a href="http://www.php.net">PHP</a> via le même processus que sous <a href="http://fr.wikipedia.org/wiki/UNIX">UNIX</a> via <a href="http://php.net/manual/fr/install.pecl.phpize.php"><code>phpize</code></a>.</p>
<p>La gestion des traits, toujours en cours de finalisation, a également été légèrement modifiée.</p>
<p>En effet, suite à une discussion sur <a href="http://news.php.net/php.internals">internals@</a>, une collision au niveau d'un nom de méthode lors de l'injection d'un trait dans une classe à la compilation du code PHP générera une erreur du type <a href="http://news.php.net/php.internals/50848"><code>E_COMPILE_ERROR</code></a>.</p>
<p>Toujours suite à <a href="http://news.php.net/php.internals/50885">une discussion</a> sur la liste de diffusion, le paramètre de configuration <code>enable_post_data_reading</code> a été ajouté, afin de pouvoir empêcher <a href="http://www.php.net">PHP</a> d'effectuer le traitement correspondant à la <a href="http://www.faqs.org/rfcs/rfc1867.html">RFC 1867</a> sur les données contenues dans <code>$_POST</code> et ainsi conserver les données brutes.</p>
<p>Le fait de ne pas traiter systématiquement peut en effet être intéressant dans le cas de développement particulier, par exemple dans le cadre de services web.</p>
<p>Cependant, comme je l'ai annoncé en introduction, il y a également eu d'autres discussions sur <a href="http://news.php.net/php.internals">internals@</a>.</p>
<p>Un vif débat a éclaté suite à <a href="http://news.php.net/php.internals/50921">la proposition de supprimer</a> le mot-clef <code>global</code> et la variable <code>$GLOBALS</code> correspondante.</p>
<p>L'objectif de cette proposition est de rendre PHP moins permissif et d'ainsi éviter le phénoméne du <q>code spaghetti</q>.</p>
<p>Évidement, pour des raisons qui me semble évidentes et que je ne détaillerai pas, cette suggestion n'a pas du tout reçu un accueil favorable.</p>
<p>Dans un autre registre, le débat concernant la <a href="http://wiki.php.net/rfc/propertygetsetsyntax"><abbr title="Request For Comments">RFC</abbr></a> relative à la définition automatique d'accesseurs à la façon de <a href="http://fr.wikipedia.org/wiki/C_sharp">C#</a>, qui a commencé lors de la période précédente, a continué à déchaîné les passions, mais pour l'instant, elle n'est toujours pas acceptée.</p>
<p>Une nouvelle <a href="http://wiki.php.net/rfc/autodefine"><abbr title="Request For Comments">RFC</abbr></a> a également été proposée, qui a pour but de généraliser le fonctionnement de <q>l'autoloading</q> aux fonctions, voir même aux variables.</p>
<p>Elle a pour le moment reçu un accueil favorable, et il est donc possible que cette fonctionnalité soit un jour incluse dans le langage.</p>
<p>Une autre <abbr title="Request For Comments">RFC</abbr> a également été proposée, visant à permettre <a href="http://news.php.net/php.internals/50979">la définition de l'espace de nommage</a> d'un fichier lors de son inclusion, ainsi que de permettre au développeur de <a href="http://news.php.net/php.internals/50979">choisir</a> entre les balises <code><?</code> et <code><?php</code> lors de l'inclusion.</p>
<p>Elle n'est cependant pas encore formalisée dans le wiki correspondant, et n'a reçu encore aucun commentaire.</p>
<p>Par ailleurs, la proposition de rendre le mot-clef <code>function</code> optionnel semble définitivement enterrée.</p>
<p>De plus, les discussions concernant la gestion du projet PHP en lui-même se sont calmées, ainsi que celles relatives au choix d'un nouveau système de gestion de version.</p>
<p>Sur ce point précis, une <abbr title="Request For Comments">RFC</abbr> récapitulant les débats et proposant une ou plusieurs solutions <a href="http://news.php.net/php.internals/start/50784">devrait être prochainement rédigée</a>.</p>
<p>Dans un autre registre, il a été proposé <a href="http://news.php.net/php.internals/50844">d'empêcher la modification d'un objet \dateTime</a> une fois qu'il a été instancié, mais pour des raisons techniques, cela ne semble pas possible pour le moment, voir même incohérent par rapport au fonctionnement de la classe, du moins au regard de l'implémentation proposée.</p>
<p>Enfin, des discussions sont en cours afin d'éclaircir le <a href="http://news.php.net/php.internals/51014">fonctionnement</a> <a href="http://news.php.net/php.internals/51006">des</a> <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, qui ne semble pas encore bien clair à certain.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/12/13/Mort-de-PHP6-270-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/218Mort de PHP6 + 260 joursurn:md5:87949630356593ae0f81f65ceb75c8e82010-12-01T08:30:00+01:002010-12-01T10:36:54+01:00mageekguyPHP XGitmultibytePHP XPierre JoyeRFCUnicode<p>Le développement de <a href="http://www.php.net">PHP</a> vit depuis <a href="http://blog.mageekbox.net/?post/2010/11/21/Mort-de-PHP6-250-jours">la dernière rétrospective</a> une période mouvementée.</p>
<p>En effet, il y a actuellement <a href="http://blog.mageekbox.net/?post/2010/11/18/PHP-5.2.15-RC1-et-PHP-5.3.4-RC1-sont-disponibles-au-t%C3%A9l%C3%A9chargement-%21">deux nouvelles versions du langage en préparation</a>, et une troisième, qui correspond à la version de développement et devrait en théorie s'appeler PHP 5.4, est en cours de préparation.</p>
<p>De plus, il souffle sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, comme un léger vent de révolution.</p>
<p>En effet, si vous ne le saviez pas encore, en caricaturant quelque peu, il y a actuellement trois camps au sein de la communauté des contributeurs au langage, qui se livre quasiment quotidiennement un combat acharné pour parvenir à leurs fins.</p>
<p>L'un, que j'appellerai le camp traditionaliste, fait tout pour que le développement de PHP se poursuive de la même façon que depuis toujours, à savoir avec peu, voir aucun, formalisme, un pragmatisme forcené qui frise parfois le ridicule, une mauvaise fois récurrente et un nombrilisme relativement prononcé qui lui fait perdre de vue, voir même totalement ignorer, les désirs des utilisateurs.</p>
<p>L'autre, que j'appelais le camp progressiste, fait au contraire tout ce qu'il peut pour faire évoluer le développement du langage vers plus de formalisme tout en l'ouvrant plus largement vers les utilisateurs, en écoutant ce qui vient de l'extérieur en essayant d'en tirer le meilleur.</p>
<p>Et entre les deux, il y a les éternels indécis qui font parti de ce que j'appellerais le camp centriste et dont l'opinion varie au grès des courants et des pressions appliquées par l'un ou l'autre camp.</p>
<p>Et depuis quelques jours, le camp progressiste a lancé une grande offensive sur plusieurs points, en proposant plusieurs <abbr title="Request For Comments">RFC</abbr> qui vont pour la plupart à l'encontre des idées du camp traditionaliste.</p>
<p>En conséquence, si le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient la version en cours de développement de <a href="http://www.php.net/">PHP</a>, a évolué et que quelques modifications significatives ont été effectuées ces dix derniers jours, les choses les plus intéressantes se sont produites sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p> <p>Et pour ménager un peu le suspense, je vais donc commencer par vous parler très logiquement des modifications faites sur <a href="http://svn.php.net/viewvc/php/php-src/trunk/">la version de développement</a>, et que l'on pourra appelé peut être dans quelques mois PHP 5.4.</p>
<p>La modification plus importante concerne le paramètre de compilation<code>--enable-zend-multibyte</code>, qui permettait à <a href="http://www.php.net/">PHP</a> de détecter les scripts au format <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> et qui devait être explicitement activé lors de la compilation du langage.</p>
<p>Il a maintenant disparu et il est remplacé par la directive de configuration <code>zend.multibyte</code>, accessible via le fichier <code>php.ini</code>, et la détection des scripts encodés à l'aide d'<a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> est dorénavant activée par défaut.</p>
<p>J'avoue que cette modification m'effraye un peu, car j'ai déjà rencontré des problèmes, notamment au niveau des archives <a href="http://fr.php.net/phar">PHAR</a>, lorsque ce paramètre de compilation était activé, sans avoir jamais pu en connaître ou en découvrir la raison.</p>
<p>J'espère donc que le fait que le mécanisme de détection automatique de l'encodage soit maintenant activé par défaut ne posera pas de problèmes.</p>
<p>Autre modification intéressante, effectuée suite à la requête <a href="http://bugs.php.net?id=53427">#53427</a>, les clefs associatives d'un tableau passé en premier argument de <code><a href="http://fr2.php.net/stream_select">stream_select()</a></code> sont maintenant conservées.</p>
<p>Il faut cependant noter que cette modification ne pourra être effectuée dans PHP 5.3, pour des raisons techniques.</p>
<p>Par ailleurs, dans un registre plus modeste, les bugs <a href="http://bugs.php.net?id=52854">#52854</a>,
<a href="http://bugs.php.net?id=51901">#51901</a>,
<a href="http://bugs.php.net?id=51003">#51003</a>,
<a href="http://bugs.php.net?id=35547">#35547</a>,
<a href="http://bugs.php.net?id=53377">#53377</a>,
<a href="http://bugs.php.net?id=46587">#46587</a>,
<a href="http://bugs.php.net?id=53352">#53352</a>,
<a href="http://bugs.php.net?id=53403">#53403</a>,
<a href="http://bugs.php.net?id=46587">#46587</a>,
<a href="http://bugs.php.net?id=53304">#53304</a>,
<a href="http://bugs.php.net?id=53407">#53407</a>,
<a href="http://bugs.php.net?id=52501">#52501</a>,
<a href="http://bugs.php.net?id=53409">#53409</a>,
<a href="http://bugs.php.net?id=52327">#52327</a>,
<a href="http://bugs.php.net?id=53420">#53420</a>,
<a href="http://bugs.php.net?id=52828">#52828</a>,
<a href="http://bugs.php.net?id=52656">#52656</a> et enfin
<a href="http://bugs.php.net?id=52202">#52202</a> ont été résolus.</p>
<p>Un bug a de plus été corrigé dans la révision <a href="http://svn.php.net/viewvc?view=revision&revision=305754">305754</a> sur la correction du bug <a href="http://bugs.php.net?id=46587">#46587</a>, et comme d'habitude, je n'ai pu m'empêcher de sourire à la lecture du commentaire associé :</p>
<blockquote><pre><code>Fixes the fix for bug #46587.<br /></code></pre></blockquote>
<p>Et comme d'habitude, il y a le lot de petites optimisations diverses qui ne correspondent pas à un rapport de bug, sans oublier évidement les nettoyages effectués sur le code pour supprimer des alertes à la compilation ou bien pour respecter les conventions de codage.</p>
<p>Les affaires courantes étant maintenant expédiées, nous allons pouvoir maintenant rentrer dans le vif du sujet, à savoir ce qu'il se passe actuellement sur <a href="http://news.php.net/group.php?group=php.internals">la liste de diffusion des contributeurs</a>.</p>
<p>Plusieurs discussions, plus ou moins importantes, sont en cours et concerne à la fois le développement du langage et ses fonctionnalités.</p>
<p>Tout d'abord, une <abbr title="Request For Comments">RFC</abbr> visant à formaliser <a href="http://wiki.php.net/rfc/releaseprocess">le processus de création d'une nouvelle version du langage</a> a été proposée par un groupe de huit développeurs relativement influant au sein de la communauté des contributeurs.</p>
<p>Fraîchement accueilli dans un premier temps par les traditionalistes, il semble que la discussion évolue dans le bon sens et soit <a href="http://news.php.net/php.internals/50532">constructive</a>, d'autant que cette <abbr title="Request For Comments">RFC</abbr> a reçu le <a href="http://news.php.net/php.internals/50495">soutient</a> d'<a href="http://en.wikipedia.org/wiki/Andi_Gutmans">Andi Gutmans</a>, l'un des deux créateurs du <a href="http://en.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> ainsi que celui de <a href="http://pooteeweet.org/blog/0/1854#m1854">Lukas Kahwe Smith</a>, l'ex monsieur formalisme de <a href="http://www.php.net/">PHP</a> puisqu'il a quitté le projet il y a maintenant <a href="http://blog.mageekbox.net/?post/2010/05/06/Un-coup-dur-pour-PHP">quelques mois</a>.</p>
<p>Il faut dire que les contributeurs peinent à sortir une version alpha de PHP 5.4 et que cette <abbr title="Request For Comments">RFC</abbr> arrive donc à point nommé.</p>
<p>Initialement prévue pour le 24 novembre, cette version alpha n'est toujours pas disponible, du fait <a href="http://news.php.net/php.internals/50416">d'un manque de consensus</a> sur certaines fonctionnalités emblématiques de la prochaine version, comme le contrôle du type des arguments numériques lors d'un appel de fonction ou de méthode, la suppression des <q><a href="http://php.net/manual/en/security.magicquotes.php">magic quotes</a></q>, la cassure de la compatibilité avec les versions antérieures ou bien encore sur une chose aussi basique que <a href="http://news.php.net/php.internals/50522">le numéro de la version</a>.</p>
<p>De plus, les traits ne semblent pas encore être totalement opérationnels, car certain cas exotiques ne sont pas correctement gérés, et si la dernière version d'<a href="http://fr2.php.net/apc">APC</a> compile lorsqu'il est intégré dans le code de <a href="http://www.php.net">PHP</a>, il n'est pas fonctionnel.</p>
<p>Bref, les contributeurs ne sont pas près de voir le bout du tunnel en ce qui concerne PHP 5.4, et cela d'autant plus que l'outil de gestion de version qui est utilisé par la communauté des développeurs, à savoir subversion, ne permet pas d'extraire facilement du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> les fonctionnalités indésirables afin de générer cette fameuse version alpha.</p>
<p><a href="http://blog.thepimp.net/">Pierre Joye</a>, également parmi les auteurs de la <abbr title="Request For Comments">RFC</abbr> relative <a href="http://wiki.php.net/rfc/releaseprocess">au processus de création d'une nouvelle version du langage</a>, a donc <a href="http://news.php.net/php.internals/50486">proposé</a> de migrer de subversion vers un système de gestion plus adapté au processus de développement de <a href="http://www.php.net/">PHP</a>, j'ai nommé <a href="http://git-scm.com/">Git</a>.</p>
<p>Là encore, la proposition a reçu un accueil mitigé, d'autant qu'il y a parmi les contributeurs des fans d'autres systèmes de gestion de version décentralisé similaire à <a href="http://git-scm.com/">Git</a>, comme <a href="http://mercurial.selenic.com/">Mercurial</a>.</p>
<p>Et contrairement à la précédente, cette proposition n'a pas reçu le soutien d'<a href="http://en.wikipedia.org/wiki/Andi_Gutmans">Andi</a>, qui pense qu'il y a <a href="http://news.php.net/php.internals/50496">mieux à faire</a> sur le projet actuellement.</p>
<p>Il est donc difficile de dire ce que tout cela va donner, mais les choses bougent, et de mon point de vue, plutôt dans le bon sens.</p>
<p>Parallèlement à ces discussions relatives au processus de développement, il y a également eu des débats au sujet des fonctionnalités du langage.</p>
<p>Ainsi, <a href="http://pecl.php.net/user/felipe">Felipe Pena</a>, également partie prenante dans les <abbr title="Request For Comments">RFC</abbr> précédemment citées, <a href="http://news.php.net/php.internals/50592">a proposé</a> de permettre l’accès aux propriétés et aux méthodes d'une instance de classe directement après son sa création, de la manière suivante :</p>
<blockquote><pre><code><?php var_dump(new foo()->bar()->x); ?></code></pre></blockquote>
<p>À contrario des précédentes, <a href="http://wiki.php.net/rfc/instance-method-call">la <abbr title="Request For Comments">RFC</abbr> correspondante</a> a reçu un accueil chaleureux d'emblée de la plupart des contributeurs, et elle semble bien partie pour être intégrée prochainement dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> une fois que quelques <a href="http://news.php.net/php.internals/50625">détails syntaxiques</a> auront été réglés.</p>
<p>Une <abbr title="Request For Comments">RFC</abbr> proposant de <a href="http://wiki.php.net/rfc/optional-t-function">supprimer le mot-clef <code>function</code></a> au niveau des déclarations de méthodes dans une classe a également été rédigée.</p>
<p>Une déclaration de méthode pourrait alors prendre la forme suivante :</p>
<blockquote><pre><code><?php<br /><br /> class Foo<br /> {<br /> public bar()<br /> {<br /> echo "Hello World";<br /> }<br /> }<br /><br />?><br /></code></pre></blockquote>
<p>Si elle a été plébiscitée dans un premier temps, elle est maintenant <a href="http://news.php.net/php.internals/50674">contestée</a>, notamment par les traditionalistes, car si elle était acceptée, cela compliquerait la maintenance du code, puisqu'il serait beaucoup moins facile de détecter une déclaration de méthode au sein d'un projet, sans parler des problèmes que cela poseraient aux outils de développement.</p>
<p>Enfin, une <abbr title="Request For Comments">RFC</abbr> proposant l'implémentation <a href="http://wiki.php.net/rfc/propertygetsetsyntax">d'accesseurs à la manière de C#</a> a été <a href="http://news.php.net/php.internals/50675">proposée</a> :</p>
<blockquote><pre><code><?php<br /><br />class TimePeriod<br />{<br /> private $seconds;<br /> <br /> public $Hours<br /> {<br /> get { return $this->seconds / 3600; }<br /> set { $this->seconds = $value * 3600; }<br /> };<br />}<br /><br />?><br /></code></pre></blockquote>
<p>Pour le moment, les avis sont mitigés à son sujet, et même si elle était finalement acceptée, la fonctionnalité correspondante ne serait pas intégrée dans la prochaine version du langage.</p>
<p>La communauté des développeurs de PHP est donc en pleine ébullition suite à une série d'offensives du parti progressiste, ce qui est bien la preuve que le langage est bien vivant et dispose des ressources nécessaires pour évoluer dans le bon sens, n'en déplaise à ses détracteurs.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/12/01/Mort-de-PHP6-260-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/214Mort de PHP6 + 250 joursurn:md5:64b481bb28fa02a3348363ddcb380a5a2010-11-21T14:30:00+01:002010-11-21T14:30:52+01:00mageekguyPHP XDerick RethansDTraceGuilherme BlancojsonPHP 5.4PHP XtraitstrunkZend Engine<p>Après une interruption induite par le <a href="http://blog.mageekbox.net/?post/2010/11/15/Compte-rendu-du-forum-PHP-2010-1">forum PHP 2010</a> et des <a href="http://blog.mageekbox.net/?post/2010/11/06/Le-forum-PHP-2010%2C-c-est-trois-deux-jours-%21">retrouvailles familiales</a>, ce cycle reprend son cours normal.</p>
<p>Ce billet retrace donc tout ce qu'il s'est passé au niveau du développement de la prochaine version de <a href="http://www.php.net">PHP</a> au court des vingts derniers jours.</p>
<p>En conséquence, j'ai un peu plus d'informations intéressantes à vous faire partager que d'habitude, d'autant que suivant la <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">loi de Murphy</a>, les développeurs de <a href="http://www.php.net">PHP</a> ont choisi justement cette période pour prendre <a href="http://blog.mageekbox.net/?post/2010/11/02/Petite-bombe-largue-a-de-22-h-30-%21">une décision importante</a>.</p>
<p>Je ne m'en plaint cependant pas, bien au contraire, car pour une fois, je n'aurais pas l'impression de faire un simple rapport sur des corrections de bugs.</p> <p>Donc pour ceux qui ne le saurait pas encore, <a href="http://derickrethans.nl/">Derick Rethans</a> a <ins>proposé</ins> sur <a href="http://news.php.net/php.internals">internals@</a>, la liste de diffusion des développeurs de <a href="http://www.php.net/">PHP</a>, qu'une version alpha de la prochaine version du langage soit disponible pour le 24 novembre 2010, et cela semble avoir été accepté par la communauté.</p>
<p><a href="http://derickrethans.nl/">Derick</a> ayant initié le mouvement, il semble qu'il soit devenu de fait le <q>release master</q> de la prochaine version de PHP.</p>
<p>Il sera donc chargé à l'avenir de gérer cette version du langage, autant au niveau technique que fonctionnel, en prenant les décisions qui s'imposent au niveau du code et en décidant des nouvelles fonctionnalités qui y seront intégrées.</p>
<p>Sur ce dernier point, il semble que l'ensemble des nouvelles fonctionnalités présentes dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la version de développement de PHP, fera parti de la prochaine version.</p>
<p>Elle disposera donc entre autre des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, du support de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, de l'interface <a href="http://wiki.php.net/rfc/jsonable"><code>jsonSerializable</code></a>, et il sera possible d'utiliser <code>$this</code> dans les fonctions anonymes ainsi que d'accéder directement à un élément d'un tableau renvoyé par une fonction ou une méthode.</p>
<p><a href="http://www.php.net/">PHP</a> autorisera de plus la définition d'<a href="http://wiki.php.net/rfc/typecheckingparseronly">un type numérique</a> pour les arguments des fonctions et des méthodes, mais il n'effectuera aucun contrôle à ce niveau, et ce sera donc au développeur d'en tenir compte s'il le désire via la <a href="http://fr2.php.net/manual/fr/book.reflection.php">réflection</a>.</p>
<p>La prochaine version profitera également des améliorations apportées sur les entrées/sorties et la gestion de la mémoire, ainsi que sur des points spécifiques, comme par exemple une optimisation d'<a href="http://fr2.php.net/unserialize"><code>unserialize()</code></a>.</p>
<p>Elle apportera donc une amélioration très significative des performances, confirmée par les tests que j'ai pu effectuer.</p>
<p>Quelques boulets historiques vont également disparaître, même s'il y a encore une discussion en cours sur le sujet pour définir si le code correspondant est supprimé totalement des sources du langage ou ces boulets sont simplement désactivés par défaut, comme vous le constaterez dans les lignes qui suivent.</p>
<p>Les principaux boulets concernées sont les <a href="http://php.net/manual/fr/security.magicquotes.php">guillemets magiques</a>, le <q><a href="http://php.net/manual/fr/features.safe-mode.php">safe mode</a></q>, les <a href="http://php.net/manual/fr/ini.core.php">directives</a> <code>register_globals</code>, <code>register_long_arrays</code> et <code>allow_call_time_pass_reference</code> ainsi que la fonction <a href="http://fr2.php.net/manual/en/function.import-request-variables.php"><code>import_request_variables()</code></a>.</p>
<p>D'autres modifications et évolutions plus ou moins intéressantes viennent compléter ce tableau, et une liste exhaustive est disponible dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> via le fichier <a href="http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup">NEWS</a>.</p>
<p>La prochaine version apportera donc un certain nombre de nouveautés et de changements dans le fonctionnement du langage.</p>
<p>Pour autant, les contributeurs la considère comme une version mineure car elle n'apporte aucune grosse nouveauté selon eux.</p>
<p>En conséquence, elle est pour le moment nommée PHP 5.4 en interne, et si cela est confirmé, nous devrions voir apparaître dans quelques temps une branche 5.4 dans <a href="http://svn.php.net/viewvc/">le dépôt subversion</a> de <a href="http://www.php.net/">PHP</a>.</p>
<p>La sortie de la version finale est pour le moment prévu avant la mi-2011, ce qui est très flou et laisse pas mal de temps à la communauté pour fignoler les derniers détails.</p>
<p>Évidemment, tout cela a donné lieu à quelques discussions sur <a href="http://news.php.net/php.internals">internals@</a>, notamment au sujet de <a href="http://news.php.net/php.internals/50301">la suppression des guillemets magiques</a>, notamment sur la façon d'informer l'utilisateur que cette fonctionnalité est <a href="http://news.php.net/php.internals/50401">dépréciée ou supprimée</a>.</p>
<p>Il y a également eu <a href="http://news.php.net/php.internals/50366">un bug</a> concernant la gestion des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a> dans un cas particulier qui a été remonté et corrigé dans la foulée, signe qu'il y a encore un peu de travail à fournir avant d'avoir une intégration parfaite du concept dans le langage.</p>
<p>La même chose s'est produite pour <a href="http://news.php.net/php.internals/50311">le support</a> de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, qui ne fonctionnait plus depuis un moment, et qui a également <a href="http://bugs.php.net/bug.php?id=53338">été corrigé</a>.</p>
<p>Il y a également eu un débat au sujet de l'utilisation de la notation <code><?=</code>, suite à cette <a href="http://bugs.php.net/bug.php?id=50662">demande</a>.</p>
<p>En effet, cette notation n'est plus utilisable depuis que la <a href="http://php.net/manual/fr/ini.core.php">directive</a> <code>short_open_tags</code> est dépréciée.</p>
<p>À l'issue de la discussion, il a été décidé que cette notation sera dorénavant disponible même si le support des <code>short_open_tags</code> n'est pas activé.</p>
<p>Par ailleurs, une nouvelle <abbr title="Request For Comment">RFC</abbr> a été <a href="http://wiki.php.net/rfc/binnotation4ints">proposée</a> afin que <a href="http://www.php.net">PHP</a> supporte la notation binaire pour les entiers, en complément de la notation décimale, octale et hexadécimale.</p>
<p>Elle a reçu un accueil très favorable et cette fonctionnalité devrait être ajoutée rapidement dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et sera peut être même disponible dans PHP 5.4.</p>
<p>Suite à la proposition de sortir une version alpha de la prochaine version du langage, la question des annotations est revenue <a href="http://news.php.net/php.internals/50206">sur le tapis</a>, à l'initiative de <a href="http://blog.bisna.com/">Guilherme Blanco</a>, l'un des deux créateurs de l'implémentation qui a fait <a href="http://blog.mageekbox.net/?post/2010/10/02/Un-petit-point-sur-les-annotations">polémique</a> il n'y pas si longtemps.</p>
<p>Cependant, malgré que <a href="http://blog.bisna.com/">Guilherme</a> ait pris des pincettes pour amener le sujet, il est maintenant avéré que les annotations ne seront <a href="http://news.php.net/php.internals/50345">pas disponibles dans PHP 5.4</a>, et pour l'instant, il n'est même pas possible de dire si elles seront un jour intégrées au langage, car certain développeurs historiques comme <a href="http://en.wikipedia.org/wiki/Zeev_Suraski">Zeev Suraski</a> y sont <a href="http://news.php.net/php.internals/50232">opposés</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Zeev_Suraski">Zeev</a> pense en effet que le le coût technique et fonctionnel des annotations est bien trop élevé par rapport à ce qu'elles apportent.</p>
<p>Au niveau du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la volonté de <a href="http://derickrethans.nl/">Derick Rethans</a> de sortir une version alpha de la prochaine version a été un électrochoc.</p>
<p>En effet, en vingts jours, il y a eu environs 130 modifications effectuées sur la version de développement.</p>
<p>Très logiquement, la majorité de ces modifications sont des corrections ou des optimisations afin de consolider le code et améliorer la fiabilité du langage.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=47168">#47168</a>,
<a href="http://bugs.php.net?id=47199">#47199</a>,
<a href="http://bugs.php.net?id=47643">#47643</a>,
<a href="http://bugs.php.net?id=50117">#50117</a>,
<a href="http://bugs.php.net?id=50579">#50579</a>,
<a href="http://bugs.php.net?id=50987">#50987</a>,
<a href="http://bugs.php.net?id=52045">#52045</a>,
<a href="http://bugs.php.net?id=52173">#52173</a>,
<a href="http://bugs.php.net?id=52410">#52410</a>,
<a href="http://bugs.php.net?id=52512">#52512</a>,
<a href="http://bugs.php.net?id=52660">#52660</a>,
<a href="http://bugs.php.net?id=52691">#52691</a>,
<a href="http://bugs.php.net?id=52692">#52692</a>,
<a href="http://bugs.php.net?id=52693">#52693</a>,
<a href="http://bugs.php.net?id=52732">#52732</a>,
<a href="http://bugs.php.net?id=52784">#52784</a>,
<a href="http://bugs.php.net?id=52820">#52820</a>,
<a href="http://bugs.php.net?id=53136">#53136</a>,
<a href="http://bugs.php.net?id=53141">#53141</a>,
<a href="http://bugs.php.net?id=53153">#53153</a>,
<a href="http://bugs.php.net?id=53226">#53226</a>,
<a href="http://bugs.php.net?id=53236">#53236</a>,
<a href="http://bugs.php.net?id=53241">#53241</a>,
<a href="http://bugs.php.net?id=53248">#53248</a>,
<a href="http://bugs.php.net?id=53260">#53260</a>,
<a href="http://bugs.php.net?id=53271">#53271</a>,
<a href="http://bugs.php.net?id=53273">#53273</a>,
<a href="http://bugs.php.net?id=53279">#53279</a>,
<a href="http://bugs.php.net?id=53284">#53284</a>,
<a href="http://bugs.php.net?id=53297">#53297</a>,
<a href="http://bugs.php.net?id=53305">#53305</a>,
<a href="http://bugs.php.net?id=53306">#53306</a>,
<a href="http://bugs.php.net?id=53310">#53310</a>,
<a href="http://bugs.php.net?id=53319">#53319</a>,
<a href="http://bugs.php.net?id=53323">#53323</a>,
<a href="http://bugs.php.net?id=53335">#53335</a>,
<a href="http://bugs.php.net?id=53338">#53338</a>,
<a href="http://bugs.php.net?id=53362">#53362</a> et
<a href="http://bugs.php.net?id=53366">#53366</a> ont été corrigés.</p>
<p>Il y a donc eu pas loin de quarante corrections au cours des vingts derniers jours.</p>
<p>Par ailleurs, les demandes de fonctionnalités <a href="http://bugs.php.net?id=53213">#53213</a>,
<a href="http://bugs.php.net?id=53238">#53238</a>,
<a href="http://bugs.php.net?id=53264">#53264</a> et
<a href="http://bugs.php.net?id=53271">#53271</a> ont été implémentées, la plus intéressante étant à mon sens le support de la méthode <code><a href="http://fr2.php.net/fputcsv">fputcsv()</a></code> par la classe <a href="http://fr2.php.net/manual/fr/class.splfileobject.php"><code>\splFileObject</code></a>.</p>
<p>Certain seront de plus intéressé d'apprendre que <code>$_SERVER['REQUEST_TIME']</code> est maintenant précis à la micro-seconde.</p>
<p><a href="http://php.net/manual/fr/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> a de plus été consolidé, via la correction de quelques problèmes plus ou moins mineurs et diverses optimisations et les <a href="http://php.net/manual/fr/ref.stream.php">flux</a> ont également subit le même traitement.</p>
<p>Le reste des modifications sont des optimisations et des corrections diverses en divers point du <a href="http://en.wikipedia.org/wiki/Zend_engine">Zend Engine</a> ou bien liées à la compilation des sources ou à suppression des boulets historiques du langage dans le cadre de la version alpha de PHP 5.4.</p>
<p>Le rythme a donc été élevé, surtout comparativement aux périodes précédentes.</p>
<p>Cependant, je pense qu'il va retomber quelques peu dans les semaines qui viennent car les développeurs vont devoir se concentrer sur les versions <a href="http://fr.wikipedia.org/wiki/Version_d%27un_logiciel#Version_admissible_ou_pre-release"><abbr title="Release Candidate">RC</abbr></a> de <a href="http://blog.mageekbox.net/?post/2010/11/18/PHP-5.2.15-RC1-et-PHP-5.3.4-RC1-sont-disponibles-au-t%C3%A9l%C3%A9chargement-%21">PHP 5.2.15 et de PHP 5.3.4</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/11/21/Mort-de-PHP6-250-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/212Mort de PHP6 + 230 joursurn:md5:ab9d8bce1f6d6db5089fd6ed84e8528e2010-11-01T09:00:00+01:002010-11-01T13:13:29+01:00mageekguyPHP X::internals@lemonmysqlndPHP 6PHP Xtrunk<p>Il n'y a pas eu de changement notable dans le rythme de développement de <a href="http://www.php.net">PHP</a> sur la période de dix jours qui vient de s'écouler.</p>
<p>Il est resté dans la ligné de <a href="http://blog.mageekbox.net/?post/2010/10/21/Mort-de-PHP6-220-jours">la période précédente</a>, avec moins d'une trentaine de modifications sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Et comme pour la période précédente, il s'agit essentiellement de corrections et d'optimisations diverses.</p>
<p>Sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, la situation est similaire.</p>
<p>Le rythme de publication est en effet au ralentie, et en conséquence, il n' y a eu qu'un seul débat, relativement intense mais à mon sens très puéril.</p>
<p>Cependant, malgré sa puérilité, j'y ai trouvé une information intéressante.</p> <p>Et pour ménager le suspense, vu que c'est quasiment la seule information intéressante que j'ai pu extraire de ces dix jours, je vais commencer par parler des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Nous retrouvons donc le lot habituel de corrections.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=53144">#53144</a>, <a href="http://bugs.php.net?id=53071">#53071</a>, <a href="http://bugs.php.net?id=53180">#53180</a>, <a href="http://bugs.php.net?id=49687">#49687</a> et <a href="http://bugs.php.net?id=53198">#53198</a> ont été corrigées.</p>
<p>Les demandes de modification <a href="http://bugs.php.net?id=44164">#44164</a> et <a href="http://bugs.php.net?id=52860">#52860</a>
ont également été implémentées.</p>
<p>Cette dernière modification fait d'ailleurs partie du gros travail que Gustavo André dos Santos Lopes, <abbr title="Also Known As">aka</abbr> cataphract dans la communauté des développeurs <a href="http://www.php.net">PHP</a>, a débuté sur <a href="http://blog.mageekbox.net/?post/2010/10/21/Mort-de-PHP6-220-jours">la période précédente</a> et qui concerne entre autre <code><a href="http://www.php.net/manual/en/function.htmlspecialchars.php">htmlspecialchars()</a></code> et <code><a href="http://php.net/manual/en/function.htmlentities.php">htmlentities()</a></code>.</p>
<p>Ces deux fonctions ont été réécrites en profondeur et supportent maintenant les constantes <code>ENT_HTML401</code>, <code>ENT_XML1</code>, <code>ENT_XHTML</code> et <code>ENT_HTML5</code> qui permettent d'adapter leur comportement au format du document qui doit être généré.</p>
<p>Et c'est encore lui qui a ajouté dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> les fichiers <a href="http://svn.php.net/viewvc/php/php-src/trunk/UPGRADING?view=markup">UPGRADING</a> et <a href="http://svn.php.net/viewvc/php/php-src/trunk/UPGRADING?view=markup">UPGRADING.INTERNALS</a>, qui décrivent les différences entre la dernière version officielle du langage et la version de développement, respectivement à destination de l'utilisateur final et du développeur.</p>
<p>Ces fichiers sont la transcription conviviales du fichier <a href="http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup">NEWS</a> introduit il y a quelques temps, qui a lui pour but de fournir une vision beaucoup plus fine et techniques des modifications effectuées.</p>
<p>Et en les lisant, il est facile de constater que le nom de prochaine version de <a href="http://www.php.net">PHP</a> n'est toujours pas défini, puisque cette dernière y est référencée sous le label <q>PHP X.Y</q>.</p>
<p>Gustavo a également ajouté au langage la méthode <code>ReflectionParameter::canBePassedByValue()</code>, qui, comme son nom l'indique, permet de savoir si un argument d'une fonction ou d'une méthode peut être passé par valeur et/ou par référence.</p>
<p>À ce titre, cette nouvelle méthode est donc le pendant de <code><a href="http://fr2.php.net/manual/en/reflectionparameter.ispassedbyreference.php">ReflectionParameter::isPassedByReference()</a></code>.</p>
<p>Dans le même registre, il a également corrigé un bug non référencé dans <code><a href="http://fr2.php.net/manual/en/reflectionproperty.isdefault.php">ReflectionProperty::isDefault()</a></code>, qui renvoyait un résultat incorrect lorsqu'elle était utilisé en relation avec <code><a href="http://fr2.php.net/manual/en/reflectionclass.getproperties.php">ReflectionClass::getProperties()</a></code>.</p>
<p>Vous l'aurez compris, Gustavo a été le plus prolifique des développeurs sur la période qui vient de s'écouler, puisqu'il est l'auteur d'un peu moins de la moitié des ajouts et des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p><a href="http://andrey.hristov.com/">Andrey Hristov</a>, <abbr title="Also Known As">aka</abbr> andrey, est quand à lui le second, de par le travail qu'il a effectué sur <a href="http://fr.php.net/manual/en/book.mysqlnd.php">mysqlnd</a>, en lui ajoutant un <q>mode debug</q> et en le corrigeant et l'optimisant.</p>
<p>Le reste des modifications réalisées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> sont, comme d'habitude, du nettoyage et de l'optimisation à divers niveaux.</p>
<p>Il est maintenant temps de parler de ce qu'il est passé sur la liste de diffusion des développeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>Comme je l'ai dis en introduction, il y a eu un débat relativement intense et puéril, qui a concerné le renommage de <a href="http://news.php.net/php.internals/49978"><code>T_PAAMAYIM_NEKUDOTAYIM</code> en </a><code><a href="http://news.php.net/php.internals/49978">T_DOUBLE_COLON</a></code>.</p>
<p>Pour ceux qui l'ignoreraient encore, <a href="http://news.php.net/php.internals/49978"><code>T_PAAMAYIM_NEKUDOTAYIM</code></a> est depuis 12 ans maintenant le nom de la constante interne à l'interpréteur de <a href="http://www.php.net">PHP</a> représentant <a href="http://fr.wikipedia.org/wiki/Port%C3%A9e_%28informatique%29">l'opérateur de résolution de portée <code>::</code></a>.</p>
<p>Et le problème est que c'est le nom de cette variable qui est affiché dans le message d'erreur généré par l'interpréteur du langage lorsqu'il rencontre un problème lié à <code>::</code> :</p>
<blockquote><pre><code>Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM </code></pre></blockquote>
<p>Ce message est évidement relativement cryptique, surtout pour celui qui ne connais pas l'hébreu, puisque <q>PAAMAYIM NEKUDOTAYIM</q> signifie <q>deux points</q> en hébreux.</p>
<p>De plus, il existe un <a href="http://fr2.php.net/manual/en/tokens.php">alias</a> de cette constante au sein de l'extension <a href="http://fr2.php.net/tokenizer">tokenizer</a> de PHP, portant le nom <code>T_DOUBLE_COLON</code>.</p>
<p>La demande de renommage est donc relativement compréhensible.</p>
<p>Cependant, le nom de cette constante étant historique et affectif, la proposition a reçu un accueil très froid, d'autant que les contributeurs ont fait preuve de leur mauvaise foi habituelle.</p>
<p><del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> m'a d'ailleurs bien fait <a href="http://news.php.net/php.internals/49992">rire</a> :</p>
<blockquote><pre>It is a tip of the hat to the amount of PHP work that came out of Israel, and it is a good reminder that there are a lot of other languages in the world.</pre></blockquote>
<p>Je trouve en effet assez risible qu'il dise cela alors que le langage qu'il a créé il ya 20 ans ne supporte toujours pas nativement <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>.</p>
<p>Pour autant, le débat, indirectement, n'a pas été si stérile qu'il aurait pu semblé l'être au premier abord.</p>
<p>En effet, le sujet relatif à <a href="http://wiki.php.net/rfc/lemon">la réécriture de l'interpréteur de PHP en utilisant lemon</a> s'est invité dans la conversation, et cela a été l'occasion d'apprendre que les problèmes de performances lié à l'utilisation de <a href="http://wiki.php.net/rfc/lemon">lemon</a> <a href="http://news.php.net/php.internals/50036">n'étaient toujours pas réglés</a> et qu'en conséquence, il y avait pour l'instant peu de chance de voir <a href="http://fr.wikipedia.org/wiki/GNU_Bison">bison</a> abandonné un jour.</p>
<p>Enfin, il n'y a toujours eu aucune information de diffuser au sujet d'une éventuelle version alpha de la prochaine version majeure, malgré la question posée à ce sujet il y a une vingtaine de jours.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/11/01/Mort-de-PHP6-230-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/205Mort de PHP6 + 220 joursurn:md5:0d5d928efadb9dfb8b44658742c4a0192010-10-21T23:00:00+02:002010-10-22T09:16:10+02:00mageekguyPHP Xinternals@PHP 6PHP XsqliteUnicodeZend Engine<p>Si <a href="http://blog.mageekbox.net/?post/2010/10/11/Mort-de-PHP6-210-jours">la période précédente</a> avait été relativement intéressante, il n'en est pas de même pour celle qui vient de se terminer.</p>
<p>En effet, le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient en tout ou partie la prochaine version majeure de <a href="http://www.php.net/">PHP</a>, n'a été modifié qu'une vingtaine de fois, alors qu'il avait reçu plus de 70 modifications il y a 10 jours.</p>
<p>Le ralentissement est d'ailleurs nettement visible sur <a href="http://blog.mageekbox.net/?post/2010/04/22/L-%C3%A9lectro-enc%C3%A9phalogramme-de-PHP-existe-%21">l'électroencéphalogramme</a> du langage.</p>
<p><img title="trunkPHP20101021.png, oct. 2010" style="margin: 0 auto; display: block;" alt="trunkPHP20101021.png" src="http://blog.mageekbox.net/public/svneeg.mageekbox.net.png" /></p>
<p>Et si le nombre de modifications est beaucoup moins important, l'intérêt de ces dernière l'est tout autant, puisqu'il s'agit quasiment exclusivement de corrections, de nettoyage et d'optimisation diverses.</p>
<p>Il est difficile de donner la cause de ce ralentissement, car il y a beaucoup d'explications possibles, la première étant qu'une énorme travail a déjà été réalisé et que la majorité sinon la totalité des nouvelles fonctionnalités envisagées pour la prochaine version majeure du langage sont maintenant implémenté.</p>
<p>Il ne faut donc pas à mon sens percevoir négativement ce ralentissement, mais plutôt comme un signe positif qui pourrait éventuellement laisser espérer prochainement une version alpha, d'autant que cela fait maintenant un moment que la consolidation du code est en cours.</p>
<p>Le sujet vient d'ailleurs <a href="http://news.php.net/php.internals/49943">d'être évoqué</a> sur la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals/">internals@</a>, elle-même relativement calme, puisqu'un membre de la liste a demandé si une date de diffusion avait été décidée pour cette fameuse version alpha.</p> <p>Il n'a cependant pas reçu la moindre réponse à sa demande au moment où j'écris ces lignes.</p>
<p>Et en attendant une réponse éventuelle au sujet d'un futur hypothétique, je me propose de vous parler du présent, même si je suis bien obligé d'avouer qu'il n'a rien de bien passionnant.</p>
<p>Le lot de correction de bugs est présent, comme d'habitude, mais contrairement aux périodes précédentes, il est beaucoup plus petit.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=49407">#49407</a>,
<a href="http://bugs.php.net?id=25927">#25927</a>,
<a href="http://bugs.php.net?id=52939">#52939</a>,
<a href="http://bugs.php.net?id=53070">#53070</a> et,
<a href="http://bugs.php.net?id=53089">#53089</a> ont été corrigés, tandis que le bug <a href="http://bugs.php.net?id=53006">#53006</a> est en cours de résolution.</p>
<p>Par ailleurs, la fonction <code><a href="http://fr.php.net/get_html_translation_table/">get_html_translation_table()</a></code> accepte maintenant un troisième paramètre permettant d'indiquer l'encodage devant être utilisé, comme dans le cas de <code><a href="http://fr.php.net/htmlentities">htmlentities()</a></code>.</p>
<p>Cela semble confirmer que la gestion des jeux de caractères en général et d'<a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> en particulier au sein de <a href="http://www.php.net">PHP</a> revient peu à peu au premier plan des préoccupations de certains développeurs, même si c'est par la très petite porte et qu'il s'agit de solutions très partielles qui n'ont rien à voir avec une gestion beaucoup plus globale.</p>
<p>Dans un registre différent, <a href="http://www.php.net/">PHP</a> est maintenant capable de détecter les éditions <q>Starter</q>, <q>Tablet PC</q> et <q>Media Center</q> de Windows, même si pour l'instant la version <q>Server 2008</q> n'est toujours pas reconnue correctement.</p>
<p>Le reste des modifications concerne diverses optimisations au sein du <a href="http://en.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, ainsi qu'une correction dans la classe <code><a href="http://fr2.php.net/manual/en/function.ziparchive-getarchivecomment.php">zipArchive::getArchiveComment()</a></code> et au niveau de la gestion des <a href="http://fr.php.net/stream">flux</a>.</p>
<p>Au passage, <a href="http://www.sqlite.org/">sqlite</a> a été mis à jour et <a href="http://www.php.net">PHP</a> embarque dorénavant la version <a href="http://www.sqlite.org/releaselog/3_7_3.html">3.7.3</a>.</p>
<p>La liste de diffusion des contributeurs a été également relativement calme, même si un membre de la liste a relevé un <q><a href="http://news.php.net/php.internals/49901">dysfonctionnement</a></q>, pour parler diplomatiquement, dans le processus de gestion des rapports de bugs.</p>
<p>Évidemment, aucun commentaire n'a été fait sur le dysfonctionnement signalé, et la suite de la discussion a été exclusivement réserver à l'aspect fonctionnel du problème soulevé par le rapport de bug mentionné.</p>
<p>Il y a également eu <a href="http://news.php.net/php.internals/49912">une tentative de relance</a> du débat relatif à la gestion de paramètres nommés par le langage.</p>
<p>Il s'agit d'un vieux serpent de mer qui revient régulièrement à la surface, même si les discussions à ce sujet sont considérées comme closes et qu'il a été décidé depuis 2005 que <a href="http://www.php.net/">PHP</a> <a href="http://www.php.net/%7Ederick/meeting-notes.html#named-parameters">n'implémentera jamais</a> ce type de fonctionnalité, car <a href="http://news.php.net/php.internals/49924">cela compliquerait inutilement</a> le langage.</p>
<p>Ce <q>détail</q> a d'ailleurs été signifié avec <a href="http://news.php.net/php.internals/49916">délicatesse</a> et <a href="http://news.php.net/php.internals/49923">gentillesse</a> à celui qui a relancé le débat, même si certain ont essayé de <a href="http://news.php.net/php.internals/49934"><q>tempérer</q></a> les choses en précisant que des fonctionnalités refusées maintes fois par le passé ont finalement été intégrées, comme par exemple les espaces de nommage et que les choses pouvaient, voir devaient, évoluer.</p>
<p>La rudesse de la réponse n'a cependant pas empêché qu'il soit relancé une nouvelle fois dans le cadre <a href="http://news.php.net/php.internals/49938">d'une discussion</a> visant à permettre de ne pas définir de valeur pour des arguments optionnels si cela n'est pas nécessaire, par exemple de cette façon :</p>
<blockquote><pre><code><?php<br /><br />function foo($var1, $var2 = 2, $var3 = 3)<br />{<br />echo "$var1, $var2, $var3\n";<br />}<br />foo(10,, 30);<br /><br />?></code></pre></blockquote>
<p>Cependant, cela n'est pas plus passé que la première fois, et encore une fois, <a href="http://news.php.net/php.internals/49952">toute discussion sur le sujet a été refusée</a>.</p>
<p>Enfin, <a href="http://derickrethans.nl/">Derick Rethans</a> a recommencé à travailler sur le contrôle du type des arguments, et les choses semblent aller <a href="http://news.php.net/php.internals/49925">relativement vite</a> et être conforme aux décisions prisent lors du dernier débat à ce sujet.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/10/21/Mort-de-PHP6-220-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/202