mageekblog - Mot-clé - internals@Le 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearL'avenir de PHP vu par Éric Daspet #2urn:md5:8775fec11492e184d86dab625dfa72a52013-09-12T13:40:00+02:002013-09-12T14:34:38+02:00mageekguyPHPinternals@interviewPHP<p>Comme <a href="http://blog.mageekbox.net/?post/2013/09/04/L-avenir-de-PHP-vu-par">annoncé précédemment</a>, trois ans après la première, je commence aujourd’hui la publication d’une seconde série d’interviews à propos de l’avenir de <a href="http://www.php.net">PHP</a>, et comme prévu, je la débute avec une interview <a href="http://eric.daspet.name">d’Éric</a>.</p>
<p>Et hasard du calendrier, cet avenir suscite une nouvelle fois des interrogations aussi bien parmi ses développeurs que ses utilisateurs.</p>
<p>En effet, au cours de la semaine dernière, <a href="http://blog.ircmaxell.com">Anthony Ferrara</a> a quitté <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>.</p>
<p>Et dans la foulée, il a expliqué les raisons de son départ dans <a href="http://blog.ircmaxell.com/2013/09/rambling-on-internals.html">un billet qui fait depuis polémique</a>, même si de mon point de vue il n'y a pas de raisons puisqu’il n’apporte aucune information nouvelle et ne propose aucune solution concrète.</p>
<p>Or, il se trouve <a href="http://eric.daspet.name">qu’Éric</a> est un <a href="http://blog.mageekbox.net/?post/2010/10/13/switch-%28true%29-case-%C3%89ric-Daspet-%3A-%24mageekblog-interview%28%29%3B-break%3B">switcheur</a>, c’est-à-dire un utilisateur de <a href="http://www.php.net">PHP</a> qui, pour tout un tas de raison, a progressivement abandonné ce langage au profit d’un ou plusieurs autres plus adaptés à sa sensibilité et à sa façon de travailler.</p>
<p>De plus, c’est une référence historique dans la communauté PHP française, puisqu’en plus d’avoir des compétences unanimement reconnues dans ce langage et d'autres domaines, il est coauteur du livre <q><a href="http://www.eyrolles.com/Informatique/Livre/php-5-avance-9782212113235">PHP 5 avancé</a></q>.</p>
<p>Dans le contexte actuel, son interview prend donc une connotation toute particulière, et je le remercie donc d’autant plus d’avoir accepté une nouvelle fois de répondre à mes questions.</p> <dl>
<dt>Peux-tu te (re)présenter en quelques mots ?</dt>
<dd>
<p>La dernière fois, <a href="http://blog.mageekbox.net/?post/2010/09/01/L-avenir-de-PHP-vu-par-Éric-Daspet">c’était en 2010</a> ? Alors depuis j’ai cofondé une startup dans la distribution du livre numérique. Nous accompagnons les libraires dans la vente d’ebooks via une solution la plus ouverte possible, tranchant avec les jardins fermés et prisons dorées des Amazon et cie. Nous y faisons du <a href="http://www.php.net">PHP</a>, mais aussi un peu de <a href="https://www.ruby-lang.org/fr/">Ruby</a> et du JavaScript.</p>
</dd>
<dt>Que penses-tu de l’évolution de <a href="http://www.php.net">PHP</a> 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> ?</dt>
<dd>
<p>Plutôt du bien. Les versions 5.4 et 5.5 ont permis de confirmer que les innovations de la 5.3 n’étaient pas qu’un accident de parcours. J’avoue que je n’avais pas parié sur une évolution aussi positive.</p>
<p>Je retiens les traits, l’<abbr title="Application programming interface">API</abbr> pour les mots de passe, l’abandon des magic quotes (enfin) et l’arrivée d’un cache d’opcode intégré à <a href="http://www.php.net">PHP</a> (je ne saurai exprimer combien la situation précédente était insensée). Il y a aussi plein d’autres choses que je trouve sympa, mais essentiellement de l’ordre de la correction ou de l’amélioration.</p>
<p>Bref, c’est bien et ça va dans la bonne direction, pas un rythme insoutenable, il faut que ça continue de monter en puissance. </p>
</dd>
<dt>Avec le recul, penses-tu que la communauté des contributeurs a tiré toutes les leçons des erreurs commises avec PHP 6 ?</dt>
<dd>
<p>Je vais répondre à côté : Il y a eu une bonne prise de conscience du mauvais fonctionnement entre les développeurs et la communauté et, de l’extérieur vu que je ne suis plus la liste interne de façon régulière, j’ai l’impression que le nouveau fonctionnement est plutôt bon.</p>
<p>La gestion du langage reste toutefois trop influencée par <a href="http://www.zend.com">Zend</a>, <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus</a> et quelques développeurs historiques. Pendant des années, on nous a dit qu’intégrer <a href="http://php.net/manual/fr/book.apc.php">APC</a> n’était pas une bonne idée parce qu’il fallait avoir le choix et que ça ralentirait <a href="http://www.php.net">PHP</a>, mais quand c’est <a href="http://www.zend.com">Zend</a> qui propose d’intégrer <q>son</q> code pour faire la même chose, ça passe. Pour moi c’est assez symptomatique. Ceci dit seul le résultat importe et ce résultat est bon, donc ne mégotons pas.</p>
</dd>
<dt><a href="http://www.php.net">PHP</a> évolue aujourd’hui beaucoup plus vite que par le passé, penses-tu que ce soit une bonne chose ?</dt>
<dd>
<p>Franchement, je pense qu’on peut amener plus de choses. J’ai encore de grandes attentes et je suis plutôt favorable à une accélération qu’à un ralentissement. C’est d’autant plus vrai que le plus difficile était de laisser derrière nous certains reliquats historiques. Maintenant que c’est fait, il n’y a pas de raison d’avancer lentement.</p>
<p>D’autres langages comme Ruby semblent avoir un cœur bien plus sujet à modifications sans que ça soit un vrai problème. Je crois qu’un des problèmes de <a href="http://www.php.net">PHP</a> c’est aussi le faible suivi des mises à jour, et avancer trop vite ne servirait à rien.</p>
</dd>
<dt>De nouveaux langages comme <a href="http://golang.org">Go</a>, <a href="https://www.dartlang.org">Dart</a>, <a href="http://nodejs.org">Node.js</a>, <a href="http://www.scala-lang.org">Scala</a> ou <a href="http://clojure.org">Clojure</a> sont venus s’ajouter à la liste des concurrents de <a href="http://www.php.net">PHP</a> au côté de Ruby et python et ils semblent avoir un gros potentiel. En conséquence, penses-tu que <a href="http://www.php.net">PHP</a> soit encore un bon choix actuellement pour commencer un projet ?</dt>
<dd>
<p>Quel projet ? Avec quelles contraintes ? Avec quelle équipe ? Avec quelle histoire et quel existant ? Ce n’est pas forcément un mauvais choix. Après je ne fais pas de religion et chaque projet a ses besoins et ses spécificités.</p>
<p>Je pourrai partir en PHP, Ruby/Python (que je mets dans la même case), Java, ou JavaScript suivant les cas. Go, Dart, Scala, Clojure, je ne pense pas que je l’envisagerai hors besoin très spécifique. Ça fait beaucoup parler, mais non seulement je manque de recul, mais en plus le retour d’expérience et la masse critique sont insuffisants pour moi. </p>
<p>Ceci dit ça n’empêche pas de jouer avec, de découvrir. Au contraire : J’incite tous les développeurs à jouer avec un maximum de langages.</p>
</dd>
<dt>Quelles ont été pour toi les évolutions les plus significatives dans l’univers de <a href="http://www.php.net">PHP</a> depuis 2010 ?</dt>
<dd>
<p>L’intégration d’un cache d’opcode est une grosse étape. Pas forcément la plus utile vu que tout le monde ajoutait un cache d’opcode de toute façon, mais symboliquement ça permet de laisser ce sujet derrière nous.</p>
<p>Je n’utilise pas encore vraiment les <a href="http://fr2.php.net/trait">traits</a> (les habitudes ont la vie dure), mais je suis heureux de voir arriver quelque chose pour favoriser la mutualisation technique dans le modèle objet. Ça manquait vraiment, surtout quand je vois la richesse qu’apportent les mix-in en Ruby.</p>
<p>L’<abbr title="Application programming interface">API</abbr> de mot de passe était un indispensable. L’<abbr title="Application programming interface">API</abbr> <code>crypt</code> était sous-utilisée, les gens faisaient n’importe quoi. Bref, j’espère que ça va améliorer sensiblement l’état des applicatifs PHP. Ça mérite mieux qu’attendre une mise à jour vers 5.5.0.</p>
<p>Après même si je pense que ça ne changera rien pour 99 % des projets, je suis heureux de voir qu’on laisse derrière nous des fautes de conception comme les magic quotes. On a traîné ça trop longtemps par peur de casser la compatibilité. Passons à autre chose.</p>
</dd>
<dt>De quoi aurais-tu besoin aujourd’hui dans <a href="http://www.php.net">PHP</a> dont tu ne disposes pas ?</dt>
<dd>
<p>Je trouve la syntaxe des fonctions anonymes assez lourdes. Le <code>function ($x, $y) use ($a, $b) { /* … */ }</code> prend une sacrée place et ce n'est pas forcément top pour la lisibilité du code. Une syntaxe courte serait appréciable. Et quitte à aller dans ce sens, j’apprécie beaucoup le système de bloc de Ruby donc pourquoi ne pas imaginer quelque chose de similaire côté syntaxe (mais probablement plus restreint en terme de fonctionnalités).</p>
<p>J’ai aussi surtout envie de pouvoir gérer des accesseurs automatiques sur les attributs, ou des attributs virtuels, suivants comment vous appelez ça. Pour l’instant la seule solution si on ne veut pas faire des <code>getX()</code> et <code>setX()</code> partout à la Java, c’est d’utiliser les horribles <code>__get()</code> et <code>__set()</code>. Python, JavaScript et Ruby ont tous réussi à trouver une façon de faire. C’est une attente que j’ai depuis la 5.0 et je suis convaincu que ça diminuerait significativement la complexité et la quantité de code en jeu dans pas mal de projets et bibliothèques.</p>
<p>Après j’aimerai plus d’<abbr title="Application programming interface">API</abbr> objet et une meilleure homogénéité dans les fonctions natives, mais je sais que modifier ça ne se fait pas facilement.</p>
</dd>
<dt>Au vu de tes réponses précédentes, est-il possible de dire que tu crois toujours en l’avenir du langage ?</dt>
<dd>
<p>Je crois que <a href="http://www.php.net">PHP</a> ne risque pas de disparaître, et que de nombreux projets vont continuer à se baser dessus, avec raison. Après ça ne m’empêche pas d’avoir des préférences personnelles pour d’autres langages plus dynamiques.</p>
</dd>
</dl>http://blog.mageekbox.net/?post/2013/09/12/L-avenir-de-PHP-vu-par-Eric-Daspet-2#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/447PHP 5.4 RC5urn:md5:c3d0701aa6300cce8900eeee6820351a2012-01-06T13:48:00+01:002012-01-09T08:42:57+01:00mageekguyPHP Xinternals@PHPPHP 5.4Release Candidate<p>Hier soir, <a href="http://blog.experimentalworks.net/">David Soria Parra</a> et <a href="http://php100.wordpress.com/">Stanislav Malyshev</a> ont <a href="http://svn.php.net/viewvc?view=revision&revision=321780">une nouvelle fois</a> livré une version <abbr title="Release Candidate">RC</abbr> de PHP 5.4.</p>
<p>Et comme les versions <abbr title="Release Candidate">RC</abbr> <a href="http://blog.mageekbox.net/?post/2011/11/11/PHP-5.4-RC1">se</a> <a href="http://blog.mageekbox.net/?post/2011/12/05/PHP-5.4-RC2">suivent</a><a href="http://blog.mageekbox.net/?post/2011/12/09/PHP-5.4-RC3"> et se</a> <a href="http://blog.mageekbox.net/?post/2011/12/28/PHP-5.4-RC4">ressemblent</a>, cette petite dernière n'est pas très excitante, même si elle apporte quelques petites nouveautés au niveau fonctionnel.</p>
<p>D'après le fichier <code><a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup">NEWS</a></code>, son principal intérêt réside dans les corrections de bugs qu'elle apporte, au nombre d'une petite dizaine.</p>
<p>Certains étaient très critiques puisqu'ils pouvaient provoquer un plantage de <a href="http://www.php.net">PHP</a>, une corruption de la mémoire ou du tableau <code>$_FILES</code>, tandis que d'autres étaient soient relatifs à la compilation des sources du langage, soient relatifs à son fonctionnement.</p> <p>L'une des informations réellement intéressantes en provenance du fichier <a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup">NEWS</a> est qu'il y aura encore une version <abbr title="Release Candidate">RC</abbr> supplémentaire avant la sortie de la version finale de PHP 5.4.</p>
<p>En effet, l'entrée correspondante a été créée dans le fichier, et même si elle ne dispose pas encore d'une date, vu les débats actuels sur <a href="http://news.php.net/php.internals/57241">internals@</a>, la liste de diffusion des développeurs de <a href="http://www.php.net">PHP</a>, concernant la nouvelle directive de configuration <code>max_input_vars</code> introduite dans la <a href="http://blog.mageekbox.net/?post/2011/12/28/PHP-5.4-RC4">RC4</a>, il me semble inévitable que la version RC6 soit disponible dans les 15 prochains jours.</p>
<p>Quoique vu que pour une fois que j'annonce une <abbr title="Release Candidate">RC</abbr>, il soit très possible que ce soit la version finale qui pointe finalement le bout de son nez, vu qu'à chaque fois que je m'aventure à prédire la sortie de la version finale, je me trompe systématiquement.</p>
<p>Donc peut être que cette fois, justement parce que je dis que cette version finale se fera encore attendre un peu, ce ne sera finalement pas le cas.</p>
<p>C'est le début de l'année, j'ai le droit de rêver un peu, non (et d'après <a href="http://news.php.net/php.internals/57154">ceci</a>, je ne rêve pas tant que ça) ?</p>
<p>L'autre information intéressante, mais c'est tout relatif, concerne l'ajout de l'interface <code><a href="https://bugs.php.net/bug.php?id=60551">Session_Handler_Interface</a></code>, qui devra être implémentée par toute classe devant pouvoir s'interface avec la fonction <code><a href="http://fr.php.net/session_set_save_handler">session_set_save_handler(</a>)</code> de la manière suivante :</p>
<blockquote><pre><code><?php
class mySessionHandler implements Session_Handler_Interface
{
function open() { /* ... */ }
function close() { /* ... */ }
function read() { /* ... */ }
function write() { /* ... */ }
function destroy() { /* ... */ }
function gc() { /* ... */ }
}
session_set_save_handler(new mySessionHandler());
?>
</code></pre></blockquote>
<p>D'après moi, cette modification pourrait poser quelques problèmes lors d'une migration vers PHP 5.4, vu qu'il est maintenant très fréquent que la session soient gérées via un objet dédié.</p>
<p>Si c'est le cas, la classe de ce dernier devra donc être modifiée afin de supporter l'interface <code><a href="https://bugs.php.net/bug.php?id=60551">Session_Handler_Interface</a></code>.</p>
<p>Je met cependant un petit bémol à mon affirmation, car je n'ai pas encore eu le temps de faire les tests correspondants, et de plus, rien ne figure à ce sujet dans le fichier <code><a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/UPGRADING?view=markup">UPDATING</a></code>.</p>
<p>Comme d'habitude, le fichier NEWS est incomplet, notamment en ce qui concerne les bugs corrigés, dont voici la liste :</p>
<blockquote><pre>Fix bug #60591, memory leak when access a non-exists file
Fix bug #60322, ob_get_clean() now raises an E_NOTICE if no buffers exist
Fix bug #60326, restore ob_gzhandler
Fix bug #60326, fix TS build
Fix bug #60326, fix crash introduced by initial fix
Fix bug #60611, segmentation fault with Cls::{expr}() syntax
Fix bug #60613, segmentation fault with $cls->{expr}() syntax
Fix bug #53280, segfaults if query column count is less than param count
Fix a crash in cli mode when apache_request_headers() is called
Fix bug #54374 and bug #55500, filter file names better, no dangling
Fix bug #55871, interruption in substr_replace()
Fix bug #55663, fixed test for bug 43139 on Firebird
Fix bug #60629, memory corruption when web server closed the fcgi fd
Fix bug #60440, return values of inherited session handler to match user handlers
Fix bug #60627, httpd.worker segfault on startup with php_value
Fix bug #60659, FPM does not clear auth_user on request accept</pre>
</blockquote>
<p>Je rappelle que malgré ces corrections, cette version RC5 n'est toujours pas qualifiée pour être utilisée en production et doit donc en conséquence être testée sur un serveur dédié à cette tâche.</p>
<p>Les sources sont disponibles à <a href="http://downloads.php.net/stas">l'endroit habituel</a> et comme d'habitude, une version <a href="http://windows.php.net/qa/">spécifique à Windows</a> est disponible.</p>
<p>Et pour conclure, les développeurs de <a href="http://www.php.net">PHP</a> ont souhaité <a href="http://svn.php.net/viewvc?view=revision&revision=321634">la bonne année à leur manière</a> !</p>http://blog.mageekbox.net/?post/2012/01/06/PHP-5.4-RC5#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/317Mettons fin aux rumeurs, voici les faits !urn:md5:e0a7c7a637862d6ec9ae95b1b6dfe0f22011-07-26T13:00:00+02:002011-07-26T14:14:18+02:00mageekguyPHPinternals@mysqlmysqliPDOPHP<p>Depuis la mi-juillet, <a href="http://www.phpclasses.org/blog/post/153-The-Plot-to-Kill-PHP-MySQL-Extension.html">certains</a> colportent la rumeur que l'extension <code>mysql</code> de <a href="http://www.php.net">PHP</a> va être, dans un futur proche, supprimée du langage.</p>
<p>Or, l'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> est l'une des plus anciennes pierres angulaires de <a href="http://www.php.net/">PHP</a>, et elle est en conséquence encore aujourd'hui utilisée par un très grand nombre de sites, malgré l'existence d'alternative plus fiable et plus pratique, telles que <a href="http://php.net/pdo"><code>PDO</code></a> et l'extension <a href="http://php.net/mysqli"><code>mysqli</code></a>.</p>
<p>La suppression de l'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> du langage poserait donc un gros problème à beaucoup de gens et d'entreprises, et en conséquence, la rumeur s'est répandue comme une trainée de poudre, aidée en cela par quelques sites ayant pignon sur rue, et quelques réseaux sociaux.</p>
<p>J'ai donc décidé de mettre les choses au clair, en me basant sur des faits vérifiables, même si un minimum d'esprit critique permet de se rendre compte que cette rumeur est, je vais le dire immédiatement et très clairement, totalement infondée.</p> <p>Tout d'abord, la question de l'avenir de l'extension mysql a bien <a href="http://marc.info/?l=php-internals&m=131031747409271&w=2">été évoquée</a> 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>.</p>
<p>Cependant, tout lecteur un minimum attentif remarquera que la première phrase du message ayant déclenché la rumeur est :</p>
<blockquote><p>Don't panic! This is <strong>not</strong> a proposal to add errors or remove this popular extension.</p>
</blockquote>
<p>Dans le genre message clair et précis, je pense qu'il n'est pas possible de faire beaucoup mieux, d'autant que l'auteur de la proposition est très explicite dans la suite de son message :</p>
<blockquote><p>Add notes that refer to it as <strong>deprecated</strong></p>
</blockquote>
<p>L'auteur propose donc de marquer l'extension comme étant obsolète, ce qui ne signifie pas du tout qu'elle va être supprimée.</p>
<p>Certes, il poursuit ensuite en décrivant une stratégie éducative ayant pour but à encourager les utilisateurs de l'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> à migrer vers des solutions alternatives, mais encore une fois, cela n'implique pas du tout que l'extension en question sera inutilisable à l'avenir.</p>
<p>D'ailleurs, celui qui connait un tantinet la politique de développement de <a href="http://www.php.net/">PHP</a> sait très bien à quoi s'en tenir.</p>
<p>Depuis <del>trop</del> longtemps, les développeurs du langage s'attache à maintenir au maximum une compatibilité maximum entre les différentes versions du langage, quitte à se trimbaler pendant des années des horreurs telles que les <a href="http://blog.mageekbox.net/?post/2011/07/23/La-r%C3%A9volution-continue-%21"><q>magic quotes</q></a>.</p>
<p>Cette politique donne lieu depuis des années à des débats houleux à la fois au sein de la communauté des développeurs et celle des utilisateurs, et parfois même entre les deux communautés.</p>
<p>Il est donc très amusant de constater qu'elle n'a pas été prise en compte par ceux qui ont propagé la rumeur et il est donc totalement impensable, en l'état actuel des choses, que l'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> disparaisse purement et simplement.</p>
<p>Car pour être clair, les développeurs seront très fortement incités à ne plus utiliser l'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> à l'avenir, et à termes, lorsque les développeurs de <a href="http://www.php.net/">PHP</a> auront jugé que la période d'évangélisation aura été suffisante, elle ne sera plus fournie nativement avec le langage.</p>
<p>Cependant, elle continuera alors d'exister la forme d'une extension <a href="http://pecl.php.net">PECL</a> que ceux qui n'auront pas migré vers <a href="http://php.net/mysqli"><code>mysqli</code></a> ou <a href="http://php.net/pdo"><code>PDO</code></a> pourront mettre en œuvre pour faire fonctionner leur code historique, code historique qui leur coûtera certainement plus cher à maintenir qu'une réécriture partielle ou complète du code pour supporter l'une des alternatives proposées, mais c'est un autre débat.</p>
<p>L'extension <a href="http://www.php.net/manual/en/book.mysql.php"><code>mysql</code></a> de <a href="http://www.php.net/">PHP</a>, quoique obsolète à tout point de vue, se porte donc bien et à encore de longues années de vie devant elle, et il est donc inutile de paniquer, même si je recommande à ses utilisateurs d'utiliser dorénavant des extensions plus rapides, plus fiables techniquement et en accord avec les possibilités actuelles de <a href="http://www.mysql.com">mysql</a>.</p>http://blog.mageekbox.net/?post/2011/07/26/Mettons-fin-aux-rumeurs%2C-voici-les-faits-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/277La révolution continue !urn:md5:d34c6fbaba9902ffd1847f542cbc15942011-07-23T22:00:00+02:002011-07-25T08:01:51+02:00mageekguyPHP Xinternals@magic quotesPHP 5.4révolution<p>Vendredi a été un jour à marquer d'une pierre blanche dans l'histoire de <a href="http://www.php.net">PHP</a>, car l'un des boulets du langage a été supprimés.</p>
<p>En effet, depuis cette date, la version en cours de développement de PHP 5.4 <a href="http://svn.php.net/viewvc?view=revision&revision=313575">ne supporte plus</a> les <q><a href="http://www.php.net/manual/fr/security.magicquotes.php">magic quotes</a></q>, grâce à un patch de <a href="http://blog.thepimp.net/">Pierre Joye</a> et <a href="http://www.adoy.net/">Pierrick Charron</a>.</p>
<p>Cette version sera donc la première à ne plus supporter cette fonctionnalité, et il s'agit d'un événement historique pour plusieurs raisons.</p> <p>Tout d'abord, c'est l'aboutissement d'un chemin qui a été long et douloureux à arpenter.</p>
<p>En effet, la suppression des <a href="http://www.php.net/manual/fr/security.magicquotes.php"><q>magic quotes</q></a> avait été planifiée par les contributeurs en <a href="http://www.php.net/%7Ederick/meeting-notes.html#magic-quotes">2005</a>, lors d'une réunion dont l'objectif était la définition de la feuille de route du <a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">défunt PHP 6</a>.</p>
<p>Le développement de ce dernier ayant pris du retard, cette fonctionnalités avait été marquée comme étant obsolète avec la version 5.3 du langage.</p>
<p>Cependant, déjà à l'époque, cette simple modification avait suscité <a href="http://www.mail-archive.com/internals@lists.php.net/msg36039.html">un débat houleux</a> au sein de la communauté des contributeurs, car certains d'entres eux semblaient effrayés par l'impact de cette suppression sur le code existant de part le monde reposant sur cette fonctionnalité.</p>
<p>Pourtant, la question avait été abordé à plusieurs reprises sur <a href="http://news.php.net/php.internals">internals@</a>, la liste de diffusion des contributeurs, et il était déjà à l'époque de notoriété publique que les <q><a href="http://www.php.net/manual/fr/security.magicquotes.php">magic quotes</a></q> posaient <a href="http://www.php.net/manual/fr/security.magicquotes.whynot.php">plus de problèmes qu'elles n'en résolvaient</a>, puisque la documentation officielle du langage déconseille leur utilisation.</p>
<p>Le débat a donc <a href="http://marc.info/?t=129001021400001&r=2&w=2">repris de plus belle</a>, lorsque <a href="http://www.serverphorums.com/read.php?7,232453">la question de leur suppression a été remise sur le tapis</a> dans le cadre du développement de PHP 5.4, et ce débat <a href="http://news.php.net/php.internals/54126">a continué jusqu'à hier</a> et continuera peut être encore à l'avenir.</p>
<p>Il aura donc fallu plus de 6 ans de négociations, de tractations et de lobbying au sein de la communauté pour obtenir ce résultat, et rien que cela suffirait pour qualifier l'événement d'historique, mais il existe également d'autres raisons.</p>
<p>Cette suppression rend en effet PHP 5.4 incompatible avec du code existant, ce qui, pour ceux qui ne le saurait pas, est totalement contraire à la politique de développement du langage.</p>
<p>En effet, <a href="http://www.php.net">PHP</a> étant utilisé par un grand nombre de sites de par le monde, ses développeurs tiennent absolument à conserver la plus grande compatibilité possible entre chacune des versions du langage.</p>
<p>C'est la raison pour laquelle le moteur de PHP 5 est aujourd'hui toujours capable d'exécuter du code écrit en PHP 4, et c'est également la raison pour laquelle il a fallu si longtemps pour que la suppression des <q><a href="http://www.php.net/manual/fr/security.magicquotes.php">magic quotes</a></q> devienne effective.</p>
<p>Il a en effet fallu convaincre suffisamment de développeurs du bien fondé de cette décision, et surtout, il a fallu trouver la meilleure solution pour le faire.</p>
<p>Les fonctions permettant de connaître le statut des <a href="http://www.php.net/manual/fr/security.magicquotes.php"><q>magic quotes</q></a>, à savoir <code>get_magic_quotes_gpc()</code> et <code>get_magic_quotes_runtime()</code>, ont donc été conservées, afin de ne pas casser la compatibilité avec le code existant, mais elles retourne dorénavant toujours <code>false</code>.</p>
<p>De plus, les directives de configuration de PHP les concernant, soit <code>magic_quotes_gpc</code>, <code>magic_quotes_runtime</code> et <code>magic_quotes_sybase</code>, ont été supprimées et ne sont donc plus supportée dorénavant.</p>
<p>Un appel à la fonction <code>set_magic_quotes_runtime()</code>, qui permet d'activer les lors de l'exécution du code provoquera quand à lui dorénavant une erreur de type<code> E_CORE_ERROR</code>.</p>
<p>Enfin, il y a un autre facteur qui vient d'ajouter à la longueur du processus ayant permis leur suppression et à la cassure de la compatibilité qu'elle provoque qui font de l'abandon du support des <a href="http://www.php.net/manual/fr/security.magicquotes.php"><q>magic quotes</q></a> un événement historique.</p>
<p>La suppression de cette fonctionnalité a en effet été validée par la communauté des contributeurs et des utilisateurs au cours du <a href="https://wiki.php.net/todo/php54/vote">premier vote</a> organisé conformément à la <abbr title-="" request="" for="" comments="">RFC</abbr> sur le <a href="https://wiki.php.net/rfc/voting">sujet</a>.</p>
<p>Un vote a donc eu lieu publiquement, les votes ont été comptabilisés de manière fiable, tout le monde à eu l'occasion de s'exprimer, et les décisions correspondantes sont appliquées, et cela peut paraître surprenant, mais dans le microcosme des développeurs de PHP, c'est un peu comme si la Terre se mettait à tourner en sens inverse, à tel point que cela pourrait paraître trop beau pour être vrai.</p>
<p>Pourtant, ça l'est bel et bien, puisque le support de la notation courte pour la définition des tableaux a également été ajouté à la version de développement de PHP 5.4, également conformément au <a href="https://wiki.php.net/todo/php54/vote">vote</a>.</p>
<p>La version alpha 3 de PHP 5.4 devrait donc, en plus des nouveautés qu'elle apporte comme <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">le support des traits</a> ou <a href="http://blog.mageekbox.net/?post/2011/07/05/Test-du-serveur-http-int%C3%A9gr%C3%A9-%C3%A0-PHP-5.4">un serveur <abbr title="HyperText Transport Protocol">HTTP</abbr> intégré</a>, ne plus supporter les <a href="http://www.php.net/manual/fr/security.magicquotes.php"><q>magic quotes</q></a> et permettre la définition d'un tableau à l'aide des syntaxes suivantes :</p>
<blockquote><pre><code><?php<br />$tableau = [1, 2, 3, 4];<br />$tableau = ['un' => 1, 'deux' => 2, 'trois' => 3, 'quatre' => 4];<br />$tableau = ['un' => 1, 2, 'trois' => 3, 4];<br />?><br /></code></pre></blockquote>
<p>La <a href="http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21">révolution débutée il y a quelques jours</a> est donc bien en marche, qu'on se le dise !</p>http://blog.mageekbox.net/?post/2011/07/23/La-r%C3%A9volution-continue-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/276Résultats du vote !urn:md5:b99d5ee4f7343b395682fb5ca9f704df2011-07-17T22:00:00+02:002011-07-22T08:27:30+02:00mageekguyPHP Xinternals@PHP 5.4RFCvote<p>Hier, le <a href="http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21">vote</a> devant permettre à la communauté des développeurs et des utilisateurs de <a href="http://www.php.net">PHP</a> de <a href="https://wiki.php.net/todo/php54/vote">définir les fonctionnalités</a> qui seront retirées ou ajoutées à PHP 5.4 <a href="http://news.php.net/php.internals/53989">a été clôturé</a>, conformément à son calendrier.</p>
<p>Le vote s'est dans l'ensemble bien déroulé, même si j'ai été le responsable d'une certaine agitation sur la liste de diffusion des contributeurs, en indiquant par erreur dans <a href="http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21">le billet concernant ce vote</a> qu'il suffisait de s'inscrire sur le <a href="http://wiki.php.net">wiki</a> de PHP pour pouvoir y participer.</p>
<p>Cela a en effet provoqué l'inscription et donc la participation au vote d'un nombre relativement important de personnes, ce qui a <a href="http://news.php.net/php.internals/53876">perturbé certains membres</a> historiques d'<a href="http://news.php.net/php.internals">internals@</a>, d'autant que le <a href="http://wiki.php.net">wiki</a> autorisait tout le monde à voter, indépendamment de son statut au sein de la communauté.</p>
<p>La conjugaison de ces deux facteurs a failli provoquer une remise en cause du système de vote, mais après quelques explications, <a href="http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21">les choses se sont arrangées</a>, et le vote a pu se poursuivre sans plus de problèmes.</p>
<p>Et c'est donc le résultat de ce vote que je vous présente aujourd'hui.</p> <p>D'après les résultats, il semble que l'espace de nom <code><span class="Apple-style-span" style="font-size: 12px; font-weight: normal;">\PHP</span></code> sera à l'avenir réservé et qu'il ne pourra donc pas être utilisé dans un développement.</p>
<p>Personnellement, j'avais une préférence pour <code>\php</code>, plus simple à taper et plus <q>joli</q>, mais cela est avant tout une affaire de goût.</p>
<p>La documentation devrait donc être mis à jour pour refléter ce résultat, même si trois contributeurs se sont exprimés contre cette proposition alors qu'ils ne s'était jamais exprimé dans un sens ou dans l'autre auparavant.</p>
<p>À contrario, <code>bool</code>, <code>int</code>, <code>string</code> et les autres types primitifs de PHP ne seront pas déclarés comme étant des mots réservés, pour des raisons de compatibilité avec le code existant, et le résultat du vote ne sera donc pas pris en compte.</p>
<p>Le niveau d'erreur <code>E_STRICT</code> sera par contre ajouté à <code>E_ALL</code> à partir de PHP 5.4, à l'unanimité, tout comme la possibilité de désactivé le traitement effectué par PHP de manière automatique sur les données reçues via une requête <abbr title="HyperText Transport Protocol">HTTP</abbr> de type <code>POST </code> et la possibilité d'utiliser une <a href="https://wiki.php.net/rfc/binnotation4ints">notation binaire</a> pour définir la valeur d'entier.</p>
<p>De plus, les <q><a href="http://php.net/manual/fr/security.magicquotes.php">magic quotes</a></q> seront également bientôt et enfin de l'histoire ancienne, même si trois contributeurs ne sont pas d'accord pour que cette fonctionnalité soit supprimée.</p>
<p>La possibilité de pouvoir définir des tableaux grâce à une syntaxe courte devrait également faire son apparition avec PHP 5.4, suivant la forme <code>['foo', 'foo' => 'bar']</code>.</p>
<p>La possibilité de pouvoir imposer le fait qu'un argument doit être une fonction de rappel devrait également être ajouté, mais le mot-clef à utiliser pour cela n'est pas encore clairement défini, les votants étant partagés entre <code>callable</code> et <code>callback</code>.</p>
<p><a href="http://php100.wordpress.com/">Stanislav Malyshev</a>, le <q>Release Manager</q> de PHP 5.4, a donc demandé à ce que la solution la plus simple et la moins perturbante soit utilisée, et je pense donc que <code>callback</code> devrait finalement être utilisé, puisque c'est le vocable qui a été utilisé jusqu'ici dans la documentation.</p>
<p>Le fonctionnement des fermetures lexicales devrait également être modifié suivant la <a href="https://wiki.php.net/rfc/closures/object-extension#privateprotected_members_scope"><abbr title="Request For Comments">RFC</abbr> correspondante</a>, à la condition cependant que la modification ne casse pas la compatibilité avec le code existant.</p>
<p>Par contre, le support de <a href="https://wiki.php.net/rfc/foreachlist"><code>list()</code> par l'instruction <code>foreach</code></a> ne fera pas parti de PHP 5.4, puisque cette proposition a été refusée par une large majorité.</p>
<p>Pour la première fois dans l'histoire de PHP, la communauté des utilisateurs a pu s'exprimer au sujet de l'avenir du langage, au côté de ses développeurs.</p>
<p>Et s'il y a eu un problème de communication sur la façon dont les utilisateurs pouvaient s'exprimer, leurs votes ont cependant été pris en compte, et PHP 5.4 sera donc la première version réellement <q>communautaire</q> du langage.</p>
<p>Et pour ceux qui se poserait encore la question malgré <a href="http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21">les corrections que j'ai apporté au billet correspondant</a>, il faudra à l'avenir pour participer à un vote de ce type être :</p>
<ul><li>Soit un contributeur ;</li>
<li>Soit un participant actif de internals@, la liste de diffusion des contributeurs ;</li>
<li>Soit être le développeur principal d'un projet basé sur <a href="http://www.php.net">PHP</a> ;</li>
</ul>
<p>De plus, dans les deux derniers cas, le support d'un ou de plusieurs développeurs de <a href="http://www.php.net">PHP</a> sera également obligatoire. </p>http://blog.mageekbox.net/?post/2011/07/17/R%C3%A9sultats-du-vote-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/275La révolution est en marche !urn:md5:28b4e4756ac369f015e844a4b8b41bec2011-07-10T22:20:00+02:002011-07-11T08:40:19+02:00mageekguyPHP Xinternals@PHPPHP 5.4RFCvote<p>Silencieusement, une page de l'histoire de <a href="http://www.php.net">PHP</a> vient de se tourner.</p>
<p>En effet, il y a quelques jours, la <abbr title="Request For Comments">RFC</abbr> définissant <a href="https://wiki.php.net/rfc/releaseprocess">les règles de gestion du processus de release de PHP</a> avait été acceptée par la communauté des contributeurs, ainsi que celle régissant <a href="https://wiki.php.net/rfc/voting">le processus de vote</a> permettant à la communauté d'accepter ou de refuser l'ajout ou la modification de fonctionnalités au langage.</p>
<p>Et hier, <a href="http://php100.wordpress.com/">Stanislav Malyshev</a>, l'un des deux <q>Release Manager</q> de PHP 5.4, a lancé le premier vote suivant ces nouvelles règles.</p>
<p>Pour la première fois dans l'histoire du langage, les développeurs de <a href="http://www.php.net">PHP</a> ainsi que ses utilisateurs sont donc invités à faire un choix concernant l'avenir du langage à l'aide du suffrage universel.</p> <p>D'ailleurs, ce n'est pas un choix, mais bien <a href="https://wiki.php.net/todo/php54/vote">plusieurs</a>, que nous sommes invités à faire, et le symbole est d'autant plus fort que l'issue du vote aura un impact direct sur <a href="https://wiki.php.net/todo/php54">PHP 5.4</a>, puisque ce vote concerne les fonctionnalités susceptibles d'être ajoutées au langage avec cette version.</p>
<p>Il nous est en effet demandé de :</p>
<ul><li>Choisir entre <code>PHP</code> et <code>php</code> pour l'espace de noms qui sera à l'avenir réservé pour les besoins internes du langage ;</li>
<li>Décider si le nom des types primitifs du langage tels que <code>string</code>, <code>bool</code>, <code>float</code> et <code>int</code> doivent devenir des mots réservés ;</li>
<li>Décider si <code>E_STRICT</code> doit être intégré à <code>E_ALL</code> ;</li>
<li>Décider l'ajout d'une option permettant <a href="http://www.mail-archive.com/internals@lists.php.net/msg48994.html">de désactiver le nettoyage des données</a> reçues via les requêtes <abbr titile="HyperText Transport Protocol">HTTP</abbr> de type <code>POST</code> par le langage ;</li>
<li>Décider si l<a href="https://wiki.php.net/rfc/binnotation4ints">a notation binaire</a> doit être supportée pour affecter des valeurs entières en binaire à des variables ;</li>
<li>Décider de <a href="https://wiki.php.net/rfc/magicquotes">la suppression des <q>magic quotes</q></a> (ne souriez pas, il y a des <s>cons</s> gens qui ont voté contre cette suppression) ;</li>
<li>Décider si <a href="https://wiki.php.net/rfc/shortsyntaxforarrays">la syntaxe courte</a> pour la création de tableau doit être supportée, et dans l'affirmative, de choisir entre <code>['foo', 'foo' => 'bar']</code> et <code>['foo', 'foo': 'bar', 'boo' => 'baz']</code> ;</li>
<li>Choisir s'il doit être possible <a href="https://wiki.php.net/rfc/callable">d'imposer une fonction de retour</a> (<abbr title="Also Known As">aka</abbr> callback) comme argument, et dans l'affirmative, de choisir entre <code>callable</code> et <code>callback</code> pour le type des fonctions de retour ;</li>
<li>Décider si <a href="https://wiki.php.net/rfc/closures/object-extension#privateprotected_members_scope">le comportement des fermetures lexicales</a> doit être modifié ;</li>
</ul>
<p>Mais pourquoi est-ce une révolution ?</p>
<p>Tout d'abord, Jusqu'à hier, l'avenir du langage était aux mains d'un petit groupe de personnes qui prenait ses décisions de manière plus ou moins transparente, en fonction de paramètres plus ou moins subjectifs et arbitraires, voire même pour certains en fonction de leur intérêt personnel.</p>
<p><del>Aujourd'hui, cela fait désormais partis du passé, puisque toute personne disposant d'un accès sur le <a href="http://wiki.php.net">wiki</a> de <a href="http://www.php.net">PHP</a> et participant au développpeut voter pour ou contre une <abbr title="Request For Comments">RFC</abbr>.</del></p>
<p>Aujourd'hui, cela fait désormais partis du passé, puisque toute personne qui participe au développement de <a href="http://www.php.net/">PHP</a> en tant que contributeur, membre actif de <a href="http://news.php.net/php.internals">internals@</a> ou développeur principal d'un projet basé sur le langage peut voter pour ou contre une <abbr title="Request For Comments">RFC</abbr>.</p>
<p><del>Et comme il suffit de <a href="https://wiki.php.net/start?do=register">demander un accès</a> au <a href="http://wiki.php.net">wiki</a> pour l'obtenir, cela signifie qu'un utilisateur du langage peut donner son avis tout autant qu'un contributeur.</del></p>
<p>Et comme il suffit de s'inscrire sur <a href="http://news.php.net/php.internals">internals@</a> pour y participer, cela signifie qu'un utilisateur du langage peut donner son avis tout autant qu'un contributeur.</p>
<p>Ainsi, c'est donc la communauté dans son ensemble, et non juste quelques personnes, qui vont à l'avenir décider de ce que deviendra <a href="http://www.php.net">PHP</a>, et si cela n'est pas une révolution, je ne sais pas ce que c'est.</p>
<p>De plus, auparavant, s'il y avait bien un processus de vote, il était très loin d'être formalisé, et le suivi des résultats était pour le moins délicat.</p>
<p>Pour voter pour une fonctionnalité, il fallait tout d'abord être un contributeur et suivre leur liste de diffusion, <a href="http://news.php.net/php.internals">internals@</a>, ce qui, je peux vous le dire, demande parfois une bonne dose de courage.</p>
<p>Ensuite, il fallait être au courant qu'il y avait un vote, et ensuite arriver à bien comprendre l'objet du vote, bien souvent très fortement dilué parmi le flux continu de message arrivant quotidiennement sur la liste de diffusion des contributeurs, sans parler de la difficulté à faire le tri entre l'information pertinente et le bruit ambiant, ni de la difficulté à suivre les débats et à s'y retrouver parmi les débats transverses suscités par la proposition de départ.</p>
<p>Les contributeurs devaient ensuite envoyer sur la liste de diffusion un message ayant pour objet le libellé du vote et indiquer dans le corps du message +1 s'ils étaient d'accord avec la proposition, 0 s'ils n'avaient pas d'opinion, et -1 s'ils n'étaient pas d'accord.</p>
<p>Sauf que bien souvent, le contributeur ajoutait des conditions à son vote du style <q>+1 si cela est modifié comme cela, sinon, -1</q>, ce qui non seulement relançait les débats au cours du vote, mais en plus rendait très compliqué le décompte des <q>bulletins</q>.</p>
<p>Enfin, les dates de début et de fin de vote étaient bien souvent plus que flou, et il était donc quasiment impossible de savoir s'il était pertinent de voter et si le vote allait effectivement être pris en compte.</p>
<p>En résumé, suivre les débats pour ensuite pouvoir se forger une opinion pour pouvoir voter en toute connaissance de cause était un vrai parcours du combattant, et en conséquence, le nombre de votants était bien loin d'être représentatif.</p>
<p>De plus, le dépouillement des votes était tout simplement une vaste fumisterie, puisque outre le fait que certains votaient au conditionnel, il était très facile de se tromper en décomptant les votes.</p>
<p>Aujourd'hui, cela fait également parti du passé, car chaque vote est dorénavant comptabilisé publiquement et nominativement sur le <a href="http://wiki.php.net">wiki</a>, et les votes assortis de conditions ne sont plus possibles.</p>
<p>De plus, les dates de début et de fin du vote sont clairement annoncées et le sujet du vote fait l'objet d'une <abbr title="Request For Comments">RFC</abbr>, ce qui permet aux votants de se documenter afin qu'ils puissent prendre leur décision en toute connaissance de cause.</p>
<p>La transparence est donc de rigueur, et c'est la raison pour laquelle je peux vous dire que l'ensemble des propositions relatives à PHP 5.4 sont bien parties <a href="https://wiki.php.net/todo/php54/vote">pour être acceptées dans leur intégralité</a>.</p>
<p>Encore une fois, si ce n'est pas une révolution, je ne sais pas ce que c'est !</p>http://blog.mageekbox.net/?post/2011/07/10/La-r%C3%A9volution-est-en-marche-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/272PHP 5.4 alpha 1 est disponible au téléchargementurn:md5:0a036cafc6a3023e58d44869a7ef23782011-06-29T14:00:00+02:002011-06-29T14:00:00+02:00mageekguyPHP Xinternals@PHP 5.4PHP 6RFCtraits<p>Je l'avais annoncé <a href="http://blog.mageekbox.net/?post/2011/06/20/PHP-5.4-alpha-1">il y a quelques jour</a>, c'est maintenant chose faite.</p>
<p>Hier, aux alentours de 23 h 40, après plus d'un an de gestation et conformément à <a href="https://wiki.php.net/todo/php54">sa feuille de route</a>, PHP 5.4 alpha 1 <a href="http://news.php.net/php.internals/53637">a été rendu disponible</a>.</p>
<p>Le code correspondant est donc <a href="http://downloads.php.net/stas/">téléchargeable</a>, et une version compilé pour Windows est également <a href="http://windows.php.net/snapshots/">disponible</a>.</p>
<p>Et j'ai presque envie de dire que c'est un événement historique dans la vie du langage, même s'il ne s'agit que d'une version intermédiaire et non d'une majeure.</p> <p>Tout d'abord, le calendrier a été respecté, et cela malgré l'indisponibilité depuis deux semaines de <a href="http://bugs.php.net">bugs.php.net</a>, suite à un crash matériel et à l'impossibilité pour les contributeurs en charge de sa maintenance d'y avoir un accès physique pour en extraire les données.</p>
<p>Il était en effet impossible de sortir une version alpha, par définition potentiellement très instable, sans disposer de l'outil ad hoc pour collecter les rapports de bugs, et de gros efforts ont donc été mis en œuvre pour régler ce problème.</p>
<p>La date de sortie a donc été respectée malgré un contexte très défavorable et ce seul fait est donc déjà un événement, car par le passé, des échéances similaires avaient été placées à plusieurs reprises mais n'avaient jamais été respecté, malgré l'absence de problème technique.</p>
<p>Ensuite, il s'agit de la première version <q>significative</q> au niveau fonctionnel depuis presque deux ans et qui ne soit donc pas une version de <q>maintenance</q> de la branche 5.3.</p>
<p>Cette version 5.4 apporte en effet un certain nombre de <a href="http://svn.php.net/viewvc/php/php-src/branches/PHP_5_4/NEWS?view=markup">nouveautés</a>, comme par exemple un serveur http intégré destiné à faciliter le développement, <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">le support natif de Dtrace</a> ou bien encore le support des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a> au niveau de la programmation orientée objet.</p>
<p>Elle vient également avec ce qu'il est appelé communément au sein de la communauté des contributeurs du <q>syntaxic sugar</q>, qui rendra l'écriture du code plus confortable pour les développeurs.</p>
<p>De plus, PHP 5.4 représente une rupture significative avec les versions antérieures, car si historiquement chaque nouvelle version majeure ou intermédiaire étaient plus ou moins incompatibles avec les précédentes, 5.4 va beaucoup plus loins que les précédentes à ce niveau.</p>
<p>Certains boulets historiques du langage ont en effet été supprimés, comme par exemple le mécanisme des <q>magic quotes</q>, celui des <q>register globals</q> ou bien encore le <q>safe mode</q> ou les <q>short tags</q>.</p>
<p>Les développeurs ont d'ailleurs prévus de ne pas s'arrêter là et le nettoyage devrait d'ailleurs se poursuivre dans les prochaines versions.</p>
<p>Cependant, il devrait se faire dans la mesure du possible et majoritairement par l'introduction de nouvelles API, et non par la suppression de fonctionnalités, ceci afin de conserver au maximum la sacro-sainte compatibilité avec les versions antérieures du langage.</p>
<p>Il n'y a donc aucune chance de voir un jour par exemple l'API des fonctions permettant de manipuler les chaînes de caractères uniformisée afin qu'elle soit cohérente en terme de nommage des fonctions et d'ordre des arguments.</p>
<p>Cependant, il est possible qu'il soit ajouté un jour au langage une classe <code>\php\string</code> qui disposera, elle, d'une interface revue et corrigée, et de plus susceptible de supporter <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>.</p>
<p>Nous disposerons alors à ce moment d'un langage permettant d'écrire du code <q>propre</q> tout en permettant l'exécution de code reposant sur d'ancienne version. </p>
<p>En parlant d'<a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>, c'est également l'une des raisons qui font que PHP 5.4 peut être considérée comme une version historique.</p>
<p>En effet, les développeurs de PHP ont décidé pour l'instant de faire l'impasse sur son support, et PHP 5.4 n'apporte donc rien de nouveau à ce niveau, alors que c'était l'objectif principal de PHP 6.</p>
<p>Personne au sein de la communauté ne semble en effet pour le moment capable de dire ce que signifierait supporter <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> au niveau de PHP, tant au niveau technique que fonctionnel.</p>
<p>Cependant, le sujet revient de manière récurrente sur le tapis sur la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, et tout espoir n'est donc pas perdu pour qu'un jour, la situation se décante à ce niveau et qu'une solution performante à tout point de vue soit trouvée.</p>
<p>Dans l'intervalle, il faudra faire avec les outils existants, tels que <code><a href="http://fr.php.net/intl">intl</a></code> ou <code><a href="http://fr.php.net/mbstring">mbstring</a></code>, la refonte de ce dernier ayant d'ailleurs fait l'objet d'une <a href="https://wiki.php.net/rfc/altmbstring"><abbr title="Request For Comment">RFC</abbr></a>.</p>
<p>Enfin, il s'agit de la première version du langage dont le processus de release est formalisé et connu.</p>
<p>La <abbr title="Request For Comment"><a href="https://wiki.php.net/rfc/releaseprocess">RFC</a></abbr> relative au processus de release du langage a en effet <a href="https://wiki.php.net/rfc/releaseprocess/vote">été entérinée</a> par une large majorité des contributeurs, et elle servira donc de cadre pour PHP 5.4.</p>
<p>En conclusion, le langage est vivant, s'assainit et cela malgré les aléas qu'il a rencontré au cours de son développement ces dernières années.</p>
<p>De plus, son développement se formalise et se structure, via des processus écrits, librement consultables et mis en place à l'issue d'un vote permettant à toutes les personnes impliquées de s'exprimer.</p>
<p>Le langage est donc sur un chemin très différent, à la fois plus ouvert et plus balisé, que celui qu'il suivait avant l'arrêt du développement de PHP 6.</p>
<p>Il ne reste donc plus qu'à lui souhaiter bonne route !</p>http://blog.mageekbox.net/?post/2011/06/29/PHP-5.4-alpha-1-est-disponible-au-t%C3%A9l%C3%A9chargement#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/270La 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 : les nouvelles du front #420urn:md5:775675c091a202ec40c14b5041c428052011-05-27T09:00:00+02:002011-05-27T12:54:34+02:00mageekguyPHP XGCCinternals@OracleparfaitPHPPHP 6Pierre JoyeRasmus LerdorfRFCshort_open_tagstrunk<p>10 jours viennent une nouvelle fois de s'écouler depuis <a href="http://blog.mageekbox.net/?post/2011/05/15/PHP-%3A-les-nouvelles-du-front-410">mon précédent billet</a> relatif au développement de <a href="http://www.php.net">PHP</a>.</p>
<p>À l'époque, les échanges sur la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, commençait à se calmer, après une période d'effervescence déclenchée par la volonté affichée des contributeurs de sortir une nouvelle version du langage basée sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>De vieux débats avaient alors ressuscité, notamment au sujet des annotations et du contrôle du type des arguments, ce qui avait entrainé des discussions parfois virulentes s'étalant sur plusieurs jours.</p>
<p>Des compromis avaient cependant finalement été trouvés, et <a href="http://news.php.net/php.internals">internals@</a> semblait donc bien partie pour retrouver son calme relatif habituel.</p>
<p><a href="http://blog.mageekbox.net/?post/2011/05/15/PHP-%3A-les-nouvelles-du-front-410">J'avais alors supposé</a> que ce n'était que temporaire, car <a href="http://blog.thepimp.net">Pierre Joye</a>, l'un des développeurs principaux du langage, ne s'était pas exprimé puisqu'il était en vacances.</p>
<p>Il semble cependant que je me sois trompé, car son retour n'a pas pour l'instant relancé les débats, même si quelques indices me laisse supposer que des discussions sont en cours en dehors d'<a href="http://news.php.net/php.internals">internals@</a>.</p> <p>Il n'y a donc pas eu de remises en cause, pour le moment, des décisions prises au cours de la période précédente, et pour l'instant, il semble bien que <a href="http://www.php.net">PHP</a> supportera un jour <a href="https://wiki.php.net/rfc/annotations-in-docblock">les annotations sous la forme de commentaires</a> dans le code.</p>
<p>Pour autant, d'autres décisions ont été prises, suite à des propositions ou à des questions posées sur la liste de diffusion.</p>
<p>Ainsi, les messages d'erreurs relatifs à l'analyse du code source d'un script vont (enfin) être amélioré afin d'être plus explicite.</p>
<p>La prochaine version du langage signera donc peut être bien la fin du <a href="http://www.google.fr/?q=T_PAAMAYIM_NEKUDOTAYIM#sclient=psy&hl=fr&site=&source=hp&q=T_PAAMAYIM_NEKUDOTAYIM&btnG=Recherche+Google&aq=f&aqi=&aql=&oq=T_PAAMAYIM_NEKUDOTAYIM&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=e9ecfc087bf1bb74&biw=1920&bih=964">fameux message</a> d'erreur suivant :</p>
<blockquote><pre><code>Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in Command line code on line 1</code></pre></blockquote>
<p>Il devrait en effet être avantageusement remplacé par :</p>
<blockquote><pre><code>Parse error: syntax error, unexpected :: in Command line code on line 1</code></pre></blockquote>
<p>Et plus généralement, les noms des symboles correspondant aux instructions du langage devrait être remplacé par un descriptif explicite, tel qu'expliqué dans la <a href="https://wiki.php.net/rfc/improved-parser-error-message"><abbr title="Request For Comments">RFC</abbr> correspondante</a>.</p>
<p>La <abbr title="Standard PHP Libray">SPL</abbr>, et plus généralement les constructeurs des classes qui la compose, ont également fait l'objet d'un débat.</p>
<p>En effet, la documentation indique que plusieurs de ses classes disposent d'un constructeur, ce qui ne réflète pas forcément la réalité.</p>
<p>C'est par exemple le cas de la classe <code><a href="http://fr.php.net/splobjectStorage">\SplObjectStorage</a></code>, et en conséquence, dans une classe dérivée de cette dernière, un appel au constructeur de la classe <code><a href="http://fr.php.net/splobjectStorage">\SplObjectStorage</a></code> génère une erreur :</p>
<blockquote><pre><code><?php<br /><br />class mySplObjectStorage<br />{<br /> public function __construct()<br /> {<br /> parent::__construct(); // provoque une erreur.<br /> }<br />}<br /><br />?>></code></pre></blockquote>
<p>La discussion a rapidement débordé du cadre de la <a href="http://fr2.php.net/spl"><abbr title="Standard PHP Libray">SPL</abbr></a> pour aborder le problème de manière plus globale.</p>
<p>Il en est <a href="http://news.php.net/php.internals/52422">ressortie</a> que dans un premier temps, la <abbr title="Standard PHP Libray">SPL</abbr> devrait être modifiée pour ajouter les constructeurs manquant, et que dans un second temps, il soit étudié la possibilité qu'un appel à un constructeur ou à un destructeur absent d'une classe parente ne génére plus d'erreur.</p>
<p>Dans un autre registre, le débat concernant l'avenir de la syntaxe <code><?=</code> a également été relancé au cours de ces 10 jours.</p>
<p>Il était en effet prévu pour <a href="http://www.php.net">PHP</a> 6 que la directive <a href="http://php.net/manual/en/ini.core.php"><code>short_open_tags</code></a> soit supprimée de <a href="http://www.php.net">PHP</a>.</p>
<p>Or, la gestion de la notation <code><?=</code> est actuellement dépendante de l'implémentation de cette directive, et cette notation est très utilisée.</p>
<p>Les contributeurs ont donc décidé de découpler les deux fonctionnalités afin de pouvoir supprimer la directive <a href="http://php.net/manual/en/ini.core.php"><code>short_open_tags</code></a> de la prochaine version du langage tout en conservant la notation <code><?=</code>.</p>
<p>C'est d'ailleurs <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> lui-même qui a mis fin au débat en <a href="http://svn.php.net/viewvc?view=revision&revision=311260">effectuant la modification nécessaire</a> sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Cette période a également vu une amélioration des performances de <a href="http://www.php.net">PHP</a> pour tout ce qui concerne les calculs arithmètiques, grâce à l'utilisation de directive de compilation spécifique.</p>
<p>Pour l'instant, seules les versions du langage compilée avec <a href="http://fr.wikipedia.org/wiki/GNU_Compiler_Collection"><abbr title="Gnu Compiler Collection">GCC</abbr></a> pourront en bénéficier, mais il est prévu également <a href="http://news.php.net/php.internals/52473">le même type d'optimisation</a> pour Visual Studio.</p>
<p>Le gain est <a href="http://news.php.net/php.internals/52470">de l'ordre de 10%</a> lors de l'exécution d'un script spécifique destiné à mesurer les performances de <a href="http://www.php.net">PHP</a>.
</p>
<p>Cependant, pour des scripts ne faisant pas appel massivement à des calculs arithmétiques, soit la grande majorité des scripts existant, le gain n'est pas significatif.</p>
<p>Enfin, tout comme il sera possible d'écrire <code>myFunction()['myKey']</code> avec la prochaine version du langage, il sera possible d'instancier un classe et d'utiliser l'instance créer dans la foulée, sans passer par une variable intermédiaire :</p>
<blockquote><pre><code><?php<br /><br />new \myClass()->doSomething();<br /><br />// Remplace :<br />// $instance= new \myClass();<br />// $instance>doSomething();<br /><br />?></code></pre></blockquote>
<p>Le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> a quand a lui été modifié une soixantaine de fois sur la période qui vient de s'écouler.</p>
<p>Parmi ces modifications, il y a évidemment le lot habituel de corrections, puisque les bugs <a href="http://bugs.php.net?id=42060">#42060</a>, <a href="http://bugs.php.net?id=50363">#50363</a>, <a href="http://bugs.php.net?id=53782">#53782</a>, <a href="http://bugs.php.net?id=54269">#54269</a>, <a href="http://bugs.php.net?id=54529">#54529</a>, <a href="http://bugs.php.net?id=54721">#54721</a>, <a href="http://bugs.php.net?id=54727">#54727</a>, <a href="http://bugs.php.net?id=54804">#54804</a>, <a href="http://bugs.php.net?id=54895">#54895</a>, <a href="http://bugs.php.net?id=54912">#54912</a> et <a href="http://bugs.php.net?id=54924">#54924</a> ont été corrigés.</p>
<p>Des fuites de mémoire ont par ailleurs été colmatées, grâce à la mise en œuvre de <a href="http://labs.oracle.com/projects/parfait/">parfait</a>, un outil d'analyse de code C/C++ développé par <a href="http://labs.oracle.com/">Oracle</a> pour détecter entre autre ce genre de problème.
</p>
<p>Par ailleurs, l'interface <a href="http://php.net/manual/fr/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> et le support de <a href="http://www.mysql.com/">MySQL</a>, via des corrections et des optimisations sur <a href="http://fr.php.net/manual/fr/book.mysqlnd.php">mysqlnd</a>, <a href="http://fr.php.net/manual/fr/book.mysql.php">mysql</a>, <a href="http://fr.php.net/manual/fr/book.mysqli.php">mysqli</a> et <a href="http://fr.php.net/manual/fr/book.pdo.php"><abbr title="<a href="http://blog.mageekbox.net/?post/2011/05/27/ http:="" www.php.net="">PHP</abbr></a> Data Object">PDO, ont été les plus gros bénéficiaires du travail effectué par les contributeurs sur ces 10 jours.</p>
<p>Enfin, Suite à la demande de <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> lors de la période précédente, les tests unitaires du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> continuent à être corrigés.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/05/27/PHP-%3A-les-nouvelles-du-front-420#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/261PHP : 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 #390urn:md5:59344b6ec5bc157cf9e62b37fb662fac2011-04-18T23:00:00+02:002011-04-20T00:00:59+02:00mageekguyPHP XAndi Gutmansinternals@PHPPHP 5.4Pierre JoyeRFCtrunk<p>Le moins que l'on puisse dire au sujet des 10 jours qui viennent de s'écouler est qu'ils ont été particulièrement contrastés.</p>
<p>En effet, le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net">PHP</a> a été très calme, puisqu'il n'a subit que 16 modifications, ce doit être un record depuis que je fais cette chronique.</p>
<p>Cette baisse d'activité est d'ailleurs très nettement visible sur l'électro-encéphalogramme du langage :</p>
<p><img src="http://blog.mageekbox.net/public/trunkPHP20110418.png" alt="trunkPHP20110418.png" style="margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block; " title="trunkPHP20110418.png, avr. 2011" /></p>
<p>À contrario, la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, a été relativement active, avec notamment un débat fleuve qui avait pourtant commencé lors de <a href="http://blog.mageekbox.net/?post/2011/04/07/PHP-%3A-les-nouvelles-du-front-380">la période précédente</a>.</p> <p>Sur les 16 modifications faites sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, 7 sont des corrections de bugs.</p>
<p>Le bug <a href="http://bugs.php.net?id=54358">#54358</a> que j'avais détecté lors de la sortie de PHP 5.3.6 grâce aux tests unitaires <a href="http://www.slideshare.net/impossiblium/atoum-le-framework-de-tests-unitaires-pour-php-53-simple-moderne-et-intuitif">d'Atoum</a> a par exemple été corrigé, ainsi que les bugs <a href="http://bugs.php.net?id=54039">#54039</a>,
<a href="http://bugs.php.net?id=54494">#54494</a>,
<a href="http://bugs.php.net?id=54440">#54440</a>,
<a href="http://bugs.php.net?id=54121">#54121</a>,
<a href="http://bugs.php.net?id=54238">#54238</a> et
<a href="http://bugs.php.net?id=54268">#54268</a>.</p>
<p>Deux autres modifications correspondent à l'implémentation de fonctionnalités demandées par les utilisateurs du langage.</p>
<p>La version de <a href="http://www.php.net">PHP</a> contenue dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> est donc maintenant capable de se connecter à une base de données à l'aide du protocole <abbr title="Secure Sockets Layer"><a href="http://fr.wikipedia.org/wiki/Secure_Sockets_Layer">SSL</a></abbr> via <abbr title="PHP Data Objects"><a href="http://fr2.php.net/pdo">PDO</a></abbr>, tandis que <a href="http://bugs.php.net/bug.php?id=54540">la gestion des ressources</a> d'<a href="http://fr2.php.net/intl/">intl</a> a été améliorée.</p>
<p>Par ailleurs, le patch proposé par <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a> lors de la p<a href="http://blog.mageekbox.net/?post/2011/04/07/PHP-%3A-les-nouvelles-du-front-380">ériode précédente</a> visant à ajouter un argument à la fonction <code><a href="http://fr2.php.net/manual/fr/function.debug-backtrace.php">debug_backtrace()</a></code> afin de ne récupérer qu'un nombre limité de traces a été appliqué sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>La documentation de la fonction a été mise à jour en conséquence, et on peut y remarquer que la prochaine version y est désignée sous le nom de PHP 5.4.</p>
<p>De là à dire qu'il s'agira bien du nom de la version correspondant au trunk, il y a un pas que j'hésite à franchir, mais je pense que c'est tout de même un indice recevable, d'autant que j'ai eu des informations complémentaires via <a href="http://news.php.net/php.internals">internals@</a>.</p>
<p>Cela sous-entend cependant qu'il ne s'agira pas d'une majeure en tant que telle, mais si elle est de la même veine que PHP 5.3, je pense que nous ne nous en plaindrons pas.</p>
<p>La dernière modification significative est l'ajout de la constante PHP_MANDIR, qui contient le chemin d'accès au répertoire des pages du manuel de <a href="http://www.php.net">PHP</a>, les autres étant des optimisations diverses et des corrections visant à améliorer la fiabilité du langage et la lisibilité de son code.</p>
<p>Comme je l'ai dis en introduction, l'activité a été beaucoup plus intense sur <a href="http://news.php.net/php.internals">internals@</a>.</p>
<p>Le débat débuté sur <a href="http://blog.mageekbox.net/?post/2011/04/07/PHP-%3A-les-nouvelles-du-front-380">la période précédente</a> au sujet de l'opérateur ternaire et de la possibilité de lui permettre de ne pas générer d'erreur lors d'un test sur une variable indéfinie s'est poursuivi et a quasiment monopolisé l'attention des contributeurs.</p>
<p>Plusieurs propositions différentes ont en effet été faites pour obtenir ce comportement, comme par exemple l'introduction d'un opérateur dérivé de l'opérateur ternaire et qui serait représenté par <code>??</code> et qui aurait le comportement suivant :</p>
<blockquote><pre><code><?php
...
// Fonctionnement standard de l'opérateur ternaire
$value = isset($a[$key]) ? $a[$key] : 'Indéfini';
// Utilisation de ?? pour éviter l'appel à isset()
$value = $a[$key] ?? : 'Indéfini';
// Utilisation de ?? d'une manière similaire à l'opérateur ternaire
$value = $a[$key] ?? strtoupper($a[$key]) : 'Indéfini';
...
?> </code></pre></blockquote>
<p>Le débat a de plus dérivé sur le sujet de l'opérateur <code>@</code> et de l'ajout du mot-clef <a href="http://news.php.net/php.internals/51857"><code>silent</code></a> pour le remplacer dans les cas ou la propagation et surtout la gestion de l'erreur ne doit pas être possible, ce que ne permet pas <code>@</code>.</p>
<p>Comme d'habitude dans ce genre de situation, le débat s'est étouffé de lui-même, sans qu'aucune décision soit prise.</p>
<p>Pour autant, cela ne veut pas dire que les idées énoncées lors de la discussion vont partir aux oubliettes, et il donc très possible de voir l'une ou l'autre de ces solutions intégrées dans le langage à plus ou moins longue échéance.</p>
<p>Il a également été proposé <a href="http://news.php.net/php.internals/51920">d'intégrer le patch</a> permettant de disposer <a href="https://wiki.php.net/rfc/builtinwebserver">d'un serveur <abbr title="HyperText Transport Protocol">HTTP</abbr></a> au sein même du langage.</p>
<p>Pour le moment, la proposition, qui avait déjà rencontré un accueil chaleureux par le passé, a été plutôt bien accueilli, même si <a href="http://en.wikipedia.org/wiki/Andi_Gutmans">Andi Gutmans</a> semble vouloir, avec raison, mettre vraiment l'accent sur le fait qu'il s'agit <a href="http://news.php.net/php.internals/51924">uniquement d'un outil de développement</a>.</p>
<p>Enfin, une discussion a commencé au sujet d'une hypothétique version 5.4, qui serait une version mineure basée sur le trunk.</p>
<p>Pour l'instant, rien n'est réellement décidé, d'autant que <a href="http://blog.thepimp.net">Pierre Joye</a>, l'un des instigateurs de la <abbr title="Request For Comments">RFC</abbr> relative à <a href="https://wiki.php.net/rfc/releaseprocess">la gestion du processus de release</a> du langage, n'a pas encore pris part au débat, et qu'il était ressorti de ma dernière discussion avec lui sur le sujet que ce n'était pas encore le bon moment pour faire cela.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>
<p>Cette information est donc, malheureusement, à prendre avec des pincettes et il faut donc attendre pour savoir ce qu'il en sortira exactement.</p>http://blog.mageekbox.net/?post/2011/04/19/PHP-%3A-les-nouvelles-du-front-390#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/254PHP : 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/248Contributeurs et statistiquesurn:md5:3dece3a6f1c3612d2c3cc40d58e1adf92011-03-23T14:00:00+01:002011-03-23T21:38:58+01:00mageekguyPHPinternals@PHPstatistiquestrunk<p>Je parle régulièrement sur ce blog de la communauté des développeurs de <a href="http://www.php.net">PHP</a>, notamment dans les <a href="http://blog.mageekbox.net/?post/2011/03/16/Mort-de-PHP6-360-Jours">billets</a> relatifs au développement de la prochaine version majeure du langage.</p>
<p>Et à force de côtoyer les contributeurs, que ce soit via leur <a href="http://news.php.net/group.php?group=php.internals">liste de diffusion</a> ou sur <abbr title="Internet Relay Chat">IRC</abbr>, j'en suis arrivé à discerner, de manière peut être un peu caricaturale, deux camps, à savoir les traditionalistes qui résistent au changement, et les progressistes qui au contraire veulent faire évoluer le langage.</p>
<p>Ces deux camps s'opposent régulièrement sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a> ou par l'intermédiaire d'autres médias, au cours de débats parfois virulents.</p>
<p>Pour autant, je n'avais jusqu'à présent qu'une vision intuitive de cette communauté, basé uniquement sur des impressions forcément subjectives.</p>
<p>J'ai donc décidé récemment, pour tout un tas de raisons, de m'intéresser plus objectivement à ce microcosme étrange, changeant, et parfois violent.</p> <p>Pour cela, j'ai commencé, car c'était le plus simple et le plus rapide, par étudier le journal des modifications effectuées sur le dépôt <a href="http://subversion.tigris.org/">subversion</a> qui contient ce qui deviendra peut être un jour la prochaine version majeure de <a href="http://www.php.net/">PHP</a>, <abbr title="Also Known As">aka</abbr> le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>J'ai donc récupéré dans un fichier au format texte l'intégralité des événements survenus sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> depuis le 23 mars 2010, date de sa création suite à <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>.</p>
<p>J'ai ensuite passé ce fichier à un script PHP fait maison, afin d'en extraire quelques statistiques, et je dois dire que j'ai été assez surpris du résultat.</p>
<p><img title="Commits sur le trunk PHP par contributeur, mar. 2011" style="margin: 0 auto; display: block;" alt="Commits sur le trunk PHP par contributeur" src="http://blog.mageekbox.net/public/commitsTrunkParContributeurs.png" /></p>
<p>J'ai ainsi découvert qu'il y avait eu 51 personnes qui ont travaillé sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> jusqu'à aujourd'hui et qu'elles ont modifié le code du langage 1732 fois.</p>
<p>J'avoue avoir été surpris en ce qui concerne le nombre de contributeurs, car je m'attendais à un chiffre beaucoup plus réduit de l'ordre de la dizaine à peine, et que de plus, je pensais que le nombre de modifications était beaucoup plus important.</p>
<p>Cependant, en poussant un peu plus loin mes calculs, j'ai compris la raison pour laquelle j'avais sous-estimé le nombre de contributeurs.</p>
<p>En effet, dans le cadre de ma veille, j'analyse attentivement le travail effectué sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et en conséquence, j'ai en mémoire le nom des principaux contributeurs.</p>
<p>Et il se trouve que 7 contributeurs sur 51, soit 13% du total, ont cumulés à eux seuls 65% des modifications depuis le 23 mars 2010.</p>
<p>De plus, 33 contributeurs, soit 35% du total, ont participé pour moins de 1% au développement.</p>
<p>Il est donc parfaitement logique que j'ai totalement sous-estimé le nombre réel de contributeurs.</p>
<p>Je précise immédiatement que je ne produirais pas de palmarès nominatifs, car je pense que cela ne serait pas forcément une bonne chose, pour tout un tas de raison.</p>
<p>Cependant, je peux vous dire que parmi le top 10 des contributeurs, il n'y a aucun développeur historique du langage.</p>
<p>Je peux également vous dire que parmi ces fameux 65%, il n'y a aucun membre du clan <q>traditionaliste</q>, ce qui vérifie encore une fois l'adage <q>il y a ceux qui font, et ceux qui font chier</q>.</p>
<p>D'ailleurs, bizarrement, parmi le top 10, il n'y a que des membres du clan progressiste et des personnalités neutres.</p>
<p>Enfin, j'ai dis que je ne donnerais pas de nom, mais j'ai menti.</p>
<p>De par le fait qu'il soit le créateur de PHP, <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> tient une place particulière au sein de la communauté.</p>
<p>En effet, il n'en est pas le leader, mais il s'exprime régulièrement, notamment sur les sujets qui lui tienne à cœur, et il arrive parfois qu'il fasse preuve d'autorité pour calmer les débats, même si cela est exceptionnel.</p>
<p>Et bien <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> arrive en 19<sup>ème</sup> position avec (coïncidence) 19 modifications, soit environs 1.1% du total.</p>
<p>Aujourd'hui, grâce à cette analyse, j'ai donc une vision plus claire de la communauté et de sa <q>hiérarchie</q>, en terme de <q>productivité</q>, mais cela n'a fait que confirmer une impression que j'avais déjà depuis quelque temps, à savoir qu'il y a très peu de contributeurs réellement actifs.</p>
<p>De plus, j'ai eu la confirmation que ceux qui en font le plus ne sont pas ceux qui s'exprime le plus sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a> ou qui résiste au changement, même si pour l'instant, ce n'est encore qu'une impression purement subjective car je n'ai pas encore croisé mes résultats avec les éventuels statistiques que je pourrais extraire de la liste de diffusion.</p>http://blog.mageekbox.net/?post/2011/03/23/Contributeurs-et-statistiques#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/247Mort de PHP6 + 360 Joursurn:md5:a3c937c8264ba4e8e461175765f25d962011-03-18T13:30:00+01:002011-03-18T13:36:06+01:00mageekguyPHP Xannotationsinternals@Olivier HoareauPHPPierrick CharronRasmus Lerdorf<p>Suite à ma petite virée à <a href="http://blog.mageekbox.net/?post/2011/03/16/Il-y-a-la-ConFoo-pour-%C3%A7a-%21">Montréal</a>, j'ai pris beaucoup de retard dans la rédaction de mon billet des 350 jours concernant le développement de la prochaine version majeure de <a href="http://www.php.net">PHP</a>.</p>
<p>Du coup, j'ai décidé de passer directement au billet des 360 jours, d'autant que la <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">loi de Murphy</a> a une fois de plus été vérifiée, puisque les contributeurs ont été très actifs dernièrement, notamment sur leur liste de diffusion, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, alors que je n'étais pas disponible pour suivre les débats.</p>
<p>J'ai donc beaucoup à dire au sujet des vingts jours qui viennent de s'écouler, ce qui contraste fortement avec le peu d'informations que j'avais à communiquer au sujet des <a href="http://blog.mageekbox.net/?post/2011/02/14/Mort-de-PHP6-330-jours">deux</a> <a href="http://blog.mageekbox.net/?post/2011/02/24/Mort-de-PHP6-340-Jours">périodes</a> de 10 jours précédentes.</p> <p>Je ne vais cependant pas mettre la charrue avant les bœufs, et je vais commencer par présenter le travail effectué sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net">PHP</a>, afin de garder le meilleur pour la fin.</p>
<p>Il y a eu un peu plus d'une cinquantaine de modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> au cours des vingts derniers jours.</p>
<p>La grande majorité de ces modifications sont des optimisations ou des corrections visant à éliminer des problèmes à la compilation ou bien à l’exécution.</p>
<p>Nous retrouvons donc le la litanie habituelle de corrections de bugs, puisque ceux correspondant aux identifiants <a href="http://bugs.php.net?id=54108">#54108</a>,
<a href="http://bugs.php.net?id=54092">#54092</a>,
<a href="http://bugs.php.net?id=54089">#54089</a>,
<a href="http://bugs.php.net?id=54118">#54118</a>,
<a href="http://bugs.php.net?id=54167">#54167</a>,
<a href="http://bugs.php.net?id=54193">#54193</a>,
<a href="http://bugs.php.net?id=49608">#49608</a>,
<a href="http://bugs.php.net?id=54152">#54152</a>,
<a href="http://bugs.php.net?id=54180">#54180</a>,
<a href="http://bugs.php.net?id=54242">#54242</a>,
<a href="http://bugs.php.net?id=54242">#54242</a>,
<a href="http://bugs.php.net?id=40510">#40510</a>,
<a href="http://bugs.php.net?id=54247">#54247</a>,
<a href="http://bugs.php.net?id=51958">#51958</a>,
<a href="http://bugs.php.net?id=54262">#54262</a> et
<a href="http://bugs.php.net?id=54265">#54265</a> ont été fixés.</p>
<p>Parallèlement, des régressions apparues lors du développement ont été supprimées, des tests unitaires ont été ajoutés ou corrigés, et des optimisations ont été effectuées, notamment au niveau de l'extension <a href="http://fr2.php.net/snmp"><abbr title="Simple Network Management Protocol">SNMP</abbr></a>.</p>
<p>Rien de bien croustillant donc à se mettre sous la dent, mais comme je l'ai déjà dit en introduction, la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, a été beaucoup plus intéressante, car très active.</p>
<p>La discussion au sujet de la <a href="http://wiki.php.net/rfc/enum"><abbr title="Request For Comments">RFC</abbr></a> relative aux <a href="http://en.wikipedia.org/wiki/Enumerated_type">énumérations</a>, commencée lors de <a href="http://blog.mageekbox.net/?post/2011/02/24/Mort-de-PHP6-340-Jours">la période précédente</a>, s'est poursuivie, mais pour l'instant, il n'y a pas encore eu de consensus, que ce soit sur la nature d'une <a href="http://en.wikipedia.org/wiki/Enumerated_type">énumération</a>, ou bien sur la façon de les implémenter au sein du langage.</p>
<p>Il faut dire que la discussion a dérivé à un moment donné sur le contrôle du type des arguments des fonctions et des méthodes, et que ce sujet est encore apparemment toujours très sensible au sein de la communauté.</p>
<p>De plus, d'autres débats ont débuté à propos de plusieurs nouvelles propositions, ce qui a en quelque sorte étouffé celui concernant les <a href="http://en.wikipedia.org/wiki/Enumerated_type">énumérations</a>.</p>
<p>Ainsi, il a été proposé d'utiliser l'algorithme de <a href="http://volnitsky.com/project/str_search/">Voltnitsky</a> dans les fonctions permettant de localiser une sous-chaîne dans une chaîne de caractères, car il est censé être plus efficace que celui utilisé jusqu'à présent, notamment dans le cas de longues chaînes.</p>
<p>Dans l'absolu, cette suggestion a été accueillie favorablement, même si les contributeurs sont relativement frileux du fait de la jeunesse de l'algorithme.</p>
<p>Une <a href="http://wiki.php.net/rfc/builtinwebserver"><abbr title="Request For Comments">RFC</abbr></a> visant à intégrer un serveur <abbr title="HyperText Transfer Protocol">HTTP</abbr> au sein de PHP via l'interface en ligne de commande, <abbr title="Also Known As">aka</abbr> <abbr title="Command Line Interface">CLI</abbr>, a également été rédigée.</p>
<p>Elle a reçu un accueil chaleureux, notamment de la part de <del>Dieu</del> <a href="http://news.php.net/php.internals/51547">Rasmus Lerdorf</a>, ce qui explique peut être son succès auprès des autres contributeurs.</p>
<p>Cependant, des limites très claires concernant les cas d'utilisation de ce serveur ont été posées.</p>
<p>En effet, , si jamais il est un jour effectivement intégré au langage, il ne sera conçu que pour être utilisé en phase de développement et aucunement en production.</p>
<p>Il a également été <a href="http://news.php.net/php.internals/51562">proposé</a> d'utiliser le concept d'<a href="http://fr.wikipedia.org/wiki/Encapsulation_%28programmation%29">encapsulation</a> au niveau des classes, ce qui permettrait de rendre ces dernières publiques, internes et privées.</p>
<p>Pour le moment, le concept a été jugée intéressant par quelques développeurs, mais il semble nécessaire de pousser <a href="http://news.php.net/php.internals/51646">un peu plus loin</a> la réflexion initiale afin de comprendre toutes les implications, et d'autres s'interroge sur <a href="http://news.php.net/php.internals/51647">son utilité</a>.</p>
<p>Il a également été demandé d'ajouter aux <a href="http://fr2.php.net/stream">flux</a> le support des méta-données liées à des fichiers, ce qui permettrait d'utiliser ces derniers avec des fonctions telles que chmod(), chown() ou bien encore touch().</p>
<p>Cette suggestion a provoqué une petite bataille rangée au sein de la communauté.</p>
<p>En effet, techniquement, il est <a href="http://news.php.net/php.internals/51598">très délicat</a>, voir impossible, d'implémenter un support exhaustif à ce niveau pour tout les systèmes d'exploitation et l'ensemble des systèmes de fichiers existant.</p>
<p>Un camp milite donc pour <a href="http://news.php.net/php.internals/51606">une implémentation à minima</a>, qui permettrait de manipuler les méta-données d'un fichier à l'aide d'un <a href="http://fr2.php.net/stream">flux</a> pour les configurations les plus répandues, tandis que l'autre ne veut pas en entendre parler, car cela pourrait potentiellement poser des <a href="http://news.php.net/php.internals/51618">problèmes à l'avenir</a>.</p>
<p>Finalement, après quelques <a href="http://news.php.net/php.internals/51626">échanges tendus</a> entre les leaders de chaque camp, <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> a, pour une fois, <a href="http://news.php.net/php.internals/51627">tranché dans le vif</a> en proposant que chaque camp rédige une <abbr title="Request For Comments">RFC</abbr>, afin de pouvoir choisir la meilleure solution en toute connaissance de cause aux alentours du 21 mars 2011.</p>
<p>Un autre <a href="http://news.php.net/php.internals/51672">débat</a> a eu lieu concernant l'implémentation de l'interface <code>\countable</code> au niveau la classe <code>\splFIleObject</code> afin qu'un appel à <code>sizeof()</code> ou <code>count()</code> retourne le nombre le ligne contenues dans le fichier considéré.</p>
<p>Dans ce cas, si l'intérêt fonctionnel n'a pas été discuté, il n'a pas encore été trouvé de consensus au niveau de l'implémentation.</p>
<p>En effet, <a href="http://news.php.net/php.internals/51675">certain</a> considère que ce n'est pas le rôle de <code>sizeof()</code> ou de <code>count()</code> de retourner ce type d'information mais plutôt celui d'une méthode nommé par exemple <code>\splFileObjet::getLineCount()</code>, alors que d'autres considère que ce n'est pas le rôle de la classe <code>\splFileObject</code> de gérer cette fonctionnalité, mais celui d'une <a href="http://news.php.net/php.internals/51695">autre classe</a> qui n'existe pas encore.</p>
<p>Enfin, le débat sur les annotations a <a href="http://news.php.net/php.internals/51673">redémarré</a> (coïncidence troublante, j'en avais justement parlé avec <a href="http://www.adoy.net">Pierrick Charron</a> lors de la <a href="http://blog.mageekbox.net/?post/2011/03/16/Il-y-a-la-ConFoo-pour-%C3%A7a-%21">ConFoo</a> quelques jours auparavant).</p>
<p>Cependant, la discussion n'est malheureusement pas allé très loin, même si celui qui a relancé la discussion semble <a href="http://news.php.net/php.internals/51687">très motivé</a>.</p>
<p>Notre <a href="http://blog.phppro.fr/">Olivier Hoareau</a> national a de son côté <a href="http://news.php.net/php.internals/51701">demandé</a> sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a> s'il était possible d'embarquer au sein d'un même exécutable un binaire PHP spécifique ainsi que le code PHP correspondant sous la forme d'un <a href="http://fr2.php.net/phar"><abbr title="PHP Archive">PHAR</abbr></a>, le tout sous différents systèmes d'exploitation.</p>
<p>Il a reçu un certain nombre de réponses, mais aucune ne permet de résoudre l'ensemble du problème, même si <a href="http://www.winbinder.org">winbinder</a> semble être une solution sous <a href="http://fr.wikipedia.org/wiki/Microsoft_Windows">Windows</a>.</p>
<p>Dans un autre registre, la discussion concernant la possibilité de laisser au développeur la possibilité de définir le type de balise PHP qui sera utilisé dans un fichier a été <a href="http://news.php.net/php.internals/51653">relancée</a> par l'auteur de la proposition.</p>
<p>Cependant, le débat a <a href="http://news.php.net/php.internals/51663">tourné court</a> car la <abbr title="Request For Comments">RFC</abbr> correspondante n'existe pas dans le <a href="http://wiki.php.net/rfc">wiki</a> et elle ne pourra reprendre que lorsqu'elle aura été ajoutée.</p>
<p>Et pour terminer, un vieux serpent de mer a refait surface durant ces vingts derniers jours.</p>
<p>En effet, historiquement, <a href="http://www.php.net">PHP</a> supprime automatiquement l'éventuel caractère <code><abbr title="End Of Line">EOL</abbr></code> présent après la balise fermante <code>?></code>.</p>
<p>Une nouvelle fois, ce comportement étrange a suscité une <a href="http://news.php.net/php.internals/51658">interrogation</a>, qui a reçu la <a href="http://brian.moonspot.net/php-history-newline-closing-tag">réponse habituelle</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/03/16/Mort-de-PHP6-360-Jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/245Mort de PHP6 + 340 Joursurn:md5:e992a57f477db5e5701b1f5caa32147b2011-02-24T23:00:00+01:002011-02-28T23:35:45+01:00mageekguyPHP XenumICUinternals@PHP6readlinetrunk<p>Voici donc avec presque trois jours de retard, par manque de temps et de motivation, mon point habituel sur le développement de la prochaine version majeure de <a href="http://www.php.net">PHP</a>.</p>
<p> Le rythme de travail des contributeurs au langage a quelque peu augmenté sur les dix derniers jours, puisqu'il y eu deux fois plus de modifications effectuées sur cette période par rapport à <a href="http://blog.mageekbox.net/?post/2011/02/24/?post/2011/02/14/Mort-de-PHP6-330-jours">la précédente</a>, soit approximativement une cinquantaine.</p>
<p>Pour autant, il s'agit une nouvelle fois de corrections et d'optimisations, et
en conséquence, il n'y a aucune nouveauté fonctionnelle à se mettre sous
la dent.</p>
<p>La liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, est restée quand à elle relativement calme, même s'il y a tout de même eu une discussion intéressante.</p>
<p>Il faut dire que les contributeurs sont en train de finaliser la version 5.3.6 du langage et y concentre en conséquence l'essentiel de leurs efforts, ce qui explique ce calme relatif.</p> <p>Cependant, pour ménager le peu de suspense que je peux introduire dans ce billet, je vais commencer par la traditionnelle liste de corrections de bugs, qui est assez conséquente dans cette itération.</p>
<p>Les bugs <a href="http://bugs.php.net?id=54002">#54002</a>,
<a href="http://bugs.php.net?id=54002">#54002</a>,
<a href="http://bugs.php.net?id=53958">#53958</a>,
<a href="http://bugs.php.net?id=54016">#54016</a>,
<a href="http://bugs.php.net?id=43512">#43512</a>,
<a href="http://bugs.php.net?id=54040">#54040</a>,
<a href="http://bugs.php.net?id=54055">#54055</a>,
<a href="http://bugs.php.net?id=54058">#54058</a>,
<a href="http://bugs.php.net?id=54060">#54060</a>,
<a href="http://bugs.php.net?id=54061">#54061</a>,
<a href="http://bugs.php.net?id=54061">#54061</a>,
<a href="http://bugs.php.net?id=54108">#54108</a>,
<a href="http://bugs.php.net?id=54092">#54092</a>,
<a href="http://bugs.php.net?id=54089">#54089</a> ont donc été corrigés, et elles concernent aussi bien les extensions <a href="http://fr.php.net/manual/en/book.exif.php">exif</a>, <a href="http://fr.php.net/manual/en/book.openssl.php">openssl</a> ou <a href="http://fr.php.net/manual/en/book.fileinfo.php">fileinfo</a>, que la compilation sous <a href="http://en.wikipedia.org/wiki/Windows">Windows</a> ou bien encore le colmatage de fuite de mémoire.</p>
<p>Par ailleurs, la demande <a href="http://bugs.php.net/bug.php?id=53888">#53888</a>, créée par <a href="http://hoa-project.net/Contact.html">Ivan Enderlin</a>, le créateur du framework <a href="http://hoa-project.net/">Hoa</a> dont la première version β vient de sortir, a été acceptée et développée.</p>
<p>Il est donc désormais possible, avec la version de <a href="http://www.php.net/">PHP</a> contenue dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, de tronquer un <a href="http://fr.php.net/stream">flux</a> à l'aide d'une fonction définie par le développeur.</p>
<p>La demande <a href="http://bugs.php.net?id=53878">#53878</a> a également été intégrée dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et en conséquence, la console de <a href="http://www.php.net/">PHP</a> sera à l'avenir fonctionnelle même si l'extension <a href="http://fr.php.net/manual/en/book.readline.php">readline</a> a été compilée en tant que bibliothéque partagée.</p>
<p>De plus, dans la continuité du travail déjà effectuée sur la période précédente, la fiabilité de l'extension <a href="http://fr.php.net/manual/en/book.snmp.php"><abbr title="Simple Network Management Protocol">SNMP</abbr></a> et des <a href="http://fr.php.net/stream">flux</a> a été améliorée, et des problèmes liés à <a href="http://site.icu-project.org/"><abbr title="International Components for Unicode">ICU</abbr></a> lors de la compilation de <a href="http://www.php.net/">PHP</a> sous <a href="http://en.wikipedia.org/wiki/Unix">UNIX</a> et <a href="http://en.wikipedia.org/wiki/Windows">Windows</a> ont également été résolus.</p>
<p>Et comme d'habitude, le reste des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> concerne essentiellement des corrections et des optimisations diverses destinées à améliorer la fiabilité et la qualité du langage.</p>
<p>Les modifications effectuées sur la version de développement ayant été couverte, il est maintenant temps de parler de ce qu'il s'est passé sur la liste de diffusion des contributeur, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>Tout comme lors des <a href="http://blog.mageekbox.net/?post/2011/02/14/Mort-de-PHP6-330-jours">dix jours précédents</a>, il n'y a pas eu de gros débats enragés.</p>
<p>Pour autant, une <a href="http://news.php.net/php.internals/51446">discussion</a> relativement intéressante a eu lieu au sujet de la <abbr title="Request For Comments">RFC</abbr> proposant une <a href="http://wiki.php.net/rfc/enum">implémentation</a> du concept <a href="http://en.wikipedia.org/wiki/Enumerated_type">d'énumération</a>.</p>
<p>Il faut savoir que c'est un sujet récurrent au sein de la communauté des développeurs, et qu'en règle général, toute proposition d'une implémentation est rejetée rapidement, à l'aide de différents prétextes plus ou moins valables.</p>
<p>Sauf que pour une fois, cela n'a pas été le cas, et que la discussion a plutôt portée sur <a href="http://news.php.net/php.internals/51466">la nature</a> d'une <a href="http://news.php.net/php.internals/51458">énumération</a> au sein d'un langage de programmation, ainsi que sur <a href="http://news.php.net/php.internals/51470">leur portée fonctionnelle</a>.</p>
<p>Il est donc raisonnable d'espérer à moyen terme (ne soyons pas trop optimiste) de voir apparaître au sein du langage une implémentation plus ou moins complexe du concept, même si un consensus au sujet de la nature exacte de ce que pourrait être une énumération au sein de <a href="http://www.php.net">PHP</a> n'a pas pu être trouvée pour le moment.</p>
<p>Par ailleurs, la discussion a dérivé sur le sujet <a href="http://news.php.net/php.internals/51502">du contrôle de type</a> lors du passage d'arguments à une fonction ou une méthode, et il semblerait que choses n'aient pas évolué à ce niveau et que ce soit toujours un sujet sensible qui ne fait également pas consensus.</p>
<p>Enfin, j'ai eu la surprise de lire que des gens cherchait à utiliser <a href="http://www.php.net">PHP</a> sur du <a href="http://news.php.net/php.internals/51474">matériel embarqué</a>, alors qu'il n'a clairement pas été conçu pour cela.</p>
<p>En conséquence, il est nécessaire de compiler le langage d'une manière particulière afin d'obtenir un exécutable le plus petit possible en terme d'espace disque afin de répondre aux contraintes du monde de l'embarqué, ou les ressources matériels disponibles sont limités.</p>
<p><del>Dieu</del> <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> et <a href="http://news.php.net/php.internals/51487">quelques</a> <a href="http://news.php.net/php.internals/51488">autres</a> ont donc donné <a href="http://news.php.net/php.internals/51484">leur recette personnelle</a> permettant d'obtenir une version <q>light</q> de <a href="http://www.php.net/">PHP</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/02/24/Mort-de-PHP6-340-Jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/241Mort 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/236