mageekblog - Mot-clé - Zend EngineLe 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearAtoum et HipHopVMurn:md5:60c9a698eb71ee1cbcfbff55390b213e2014-01-11T16:42:00+01:002014-01-12T20:41:43+01:00mageekguyPHPatoumHipHopVMZend Engine<p>Depuis quelque temps, on <a href="https://twitter.com/kenny_dee/status/418748352126521345">me demande régulièrement</a> si je vais rendre <a href="http://www.atoum.org/atoum">atoum</a> compatible avec <a href="https://github.com/facebook/hhvm">HipHopVM</a>, car il n’est actuellement pas compatible avec cette alternative au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Et ma réponse est que je n’ai aucune autre solution que celle consistant à faire les rapports de bugs nécessaires aux développeurs de <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p>
<p>Ce n’est en effet pas le code d’<a href="http://www.atoum.org/atoum">atoum</a> qui pose problème, puisqu’il fonctionne sans aucun soucis avec le moteur standard de <a href="http://www.php.net">PHP</a> (ce qui ne veut pas dire qu’il n’y a pas quelques bugs cachés en son sein malgré les quelque 1600 tests unitaires et les 24 000 assertions qui les traquent sans relâche).</p>
<p>Et si le problème ne vient pas du code d’<a href="http://www.atoum.org/atoum">atoum</a>, c’est donc qu’il vient d’un ou de plusieurs problèmes au sein de celui de <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p> <p>Je ne vois donc aucune raison pour que les contributeurs d’<a href="http://www.atoum.org/atoum">atoum</a> fassent l’effort nécessaire pour rendre <a href="http://www.atoum.org/atoum">atoum</a> compatible avec <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p>
<p>Et d’autant plus que <a href="https://github.com/facebook/hhvm">HipHopVM</a> est actuellement à mes yeux un outil certes intéressant, mais encore complètement inadapté à des développements en environnement professionnel ou utilisable en production.</p>
<p>Sa compatibilité avec le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> n’est en effet pas totale, et ses développeurs sont encore en pleine phase de recherche et développement pour y remédier.</p>
<p>Il n’y a d’ailleurs qu’à lire leur <a href="http://www.hhvm.com/blog/">blog</a>, par ailleurs très intéressant, pour s’en convaincre.</p>
<p>De plus, le fait de supporter <a href="https://github.com/facebook/hhvm">HipHopVM</a> dans son état actuel est à mon sens une très mauvaise stratégie pour obtenir à plus ou moins moyen terme une alternative au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> digne de la production.</p>
<p>En effet, elle favoriserait l’émergence d’un nouveau langage qui aurait la couleur du <a href="http://www.php.net">PHP</a>, l’odeur du <a href="http://www.php.net">PHP</a>, mais qui ne serait pas du <a href="http://www.php.net">PHP</a> puisque la compatibilité du code que pourra exécuter <a href="https://github.com/facebook/hhvm">HipHopVM</a> ne sera pas garantie avec le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, et non celle d’une alternative crédible et surtout fiable à ce dernier.</p>
<p><a href="http://www.php.net">PHP</a> se retrouvera alors dans la même situation que Java, avec du code qui ne sera pas forcément exécutable sur la totalité des machines virtuelles disponibles (ceux qui ont essayé de faire tourner du code Java sous <a href="http://fr.wikipedia.org/wiki/Openjdk">OpenJDK</a> et <a href="http://fr.wikipedia.org/wiki/Machine_virtuelle_Java#HotSpot.2C_la_machine_virtuelle_d.27Oracle">HotSpot</a> comprendront sans problème ce que je veux dire).</p>
<p>L’utilisation du code et l’administration de son environnement d’exécution deviendront alors beaucoup plus complexes qu’actuellement, et cela alors que paradoxalement, beaucoup d’efforts ont été faits ces dernières années avec le développement d’un outil tel que composer et divers travaux périphériques pour justement simplifier l’installation et le déploiement du code.</p>
<p>Dans le pire des cas, cela pourrait même aboutir à une scission du marché.</p>
<p>Donc, en résumé, si des développeurs <a href="http://www.php.net">PHP</a> font les efforts nécessaires pour rendre leur code compatible avec <a href="https://github.com/facebook/hhvm">HipHopVM</a>, ils se tirent une balle dans le pied.</p>
<p>Alors que forcer (entre guillemets) les développeurs de <a href="https://github.com/facebook/hhvm">HipHopVM</a> à faire les corrections nécessaires dans leur code pour rendre ce dernier compatible à 100 % avec le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> permettra de mettre ces deux machines virtuelles en concurrence, à la fois au niveau des performances et au niveau des fonctionnalités.</p>
<p>En effet, si <a href="https://github.com/facebook/hhvm">HipHopVM</a> est totalement compatible avec le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, mais qu’il offre de meilleures performances ou des fonctionnalités supplémentaires, par exemple (totalement au pif) le support d’Unicode, les développeurs du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> seront forcés de suivre le mouvement s’ils ne veulent pas voir leur bébé progressivement abandonné au profit de <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p>
<p>Ils seront alors obligés soit d’implémenter les fonctionnalités manquantes ou bien d’améliorer les performances du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, l’un n’excluant pas l’autre évidemment.</p>
<p>Et pour la même raison, toute évolution fonctionnelle du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> devra forcément être répercutée au niveau de <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p>
<p>Cela aura aussi comme effet de bord intéressant d'obliger les développeurs actuels de PHP à décrire le fonctionnement du langage, afin que tout le monde puisse à la fois suivre son évolution et éventuellement développer sa propre machine virtuelle en étant certain qu'elle est à 100% compatible avec l'ensemble du code existant.</p>
<p>Les utilisateurs de <a href="http://www.php.net">PHP</a> ont donc bien tout à gagner à tout faire pour disposer d’une alternative au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> qui soit totalement compatible avec ce dernier et comme je viens de l’expliquer, je pense que cela ne passe en aucun cas par une modification de leur code pour le rendre compatible avec <a href="https://github.com/facebook/hhvm">HipHopVM</a>.</p>
<p>En conséquence, le code d’<a href="http://www.atoum.org/atoum">atoum</a> ne sera pas modifié pour le rendre compatible.</p>
<p>Cependant, cela ne veut pas dire que les développeurs d’<a href="http://www.atoum.org/atoum">atoum</a> ne fourniront pas à ceux de <a href="https://github.com/facebook/hhvm">HipHopVM</a> toutes les informations à leur disposition afin qu’ils parviennent à rendre leur création à 100 % compatible avec le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, car cela ne pourra qu’être bénéfique à la communauté des utilisateurs de <a href="http://www.php.net">PHP</a>.</p>
<p>Et c’est la raison pour laquelle le <a href="http://blog.mageekbox.net/?post/2013/07/09/Merci-a-la-marmotte-et-au-rasta-blanc">rasta blanc</a> y <a href="https://github.com/atoum/atoum/pull/316">travaille</a> !</p>http://blog.mageekbox.net/?post/2014/01/11/Atoum-et-HipHopVM#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/467Poisson d'avril or not poisson d'avril ?urn:md5:02db1dce67a8a1b13bbdcc7995026cb42012-04-03T08:30:00+02:002012-04-03T13:04:02+02:00mageekguyPHPBiancaClever CloudPHPZendZend Engine<p>J'ai publié (à dessein) ce dimanche 1er avril <a href="http://blog.mageekbox.net/?post/2012/03/24/PHP-utilisera-dorenavant-la-JVM">ce billet</a> annonçant que le prochain Zend Engine serait basé sur la JVM suite à des travaux secrets de <a href="http://www.zend.com">Zend</a>, et il semble que beaucoup de gens s'interrogent sur sa véracité.</p>
<p>Le projet <a href="http://biancaproject.org/"><em>bianca</em></a> semble en effet très sérieux, avec <a href="https://github.com/CleverCloud/Bianca">un dépôt github</a> ayant un historique significatif et contenant du code correspondant au but du projet, un nom de domaine, un blog, ainsi qu'un <a href="http://www.clever-cloud.com/fr_FR/presse/clever-cloud-libere-moteur-php-open-source-bianca.html">communiqué officiel</a> le concernant de la société qui en est à l'origine, <a href="http://www.clever-cloud.com/">Clever Cloud</a>.</p>
<p>Cependant la date de parution qui correspond à un jour ou les canulars pullulent aussi bien virtuellement que réellement ajouté à l'absence du nom de <a href="http://www.zend.com">Zend</a> dans le communiqué de presse font que le doute subsiste au sujet de la réalité de <a href="http://biancaproject.org/"><em>bianca</em></a>.</p>
<p>Il faut dire que le billet amène la chose d'une manière somme toute logique, puisque rien n'empêcherait <a href="http://www.zend.com">Zend</a> de développer sa propre solution pour exécuter du code PHP et ainsi répondre à un impératif commercial.</p>
<p>D'ailleurs, le Zend Server en est l'illustration parfaite, puisqu'il met en œuvre une version sur mesure de <a href="http://www.php.net">PHP</a> afin de pouvoir répondre aux besoins des clients de <a href="http://www.zend.com">Zend</a>.</p>
<p>Au final, il est donc très difficile pour le lecteur de savoir à quoi s'en tenir réellement de manière certaine.</p>
<p>Alors, <a href="http://biancaproject.org/"><em>bianca</em></a>, poisson d'avril bien ficelé, ou véritable projet qui marche ?</p> <p>Et bien au risque de décevoir <a href="http://blog.mageekbox.net/?post/2012/03/24/PHP-utilisera-dorenavant-la-JVM#c3739">les allergiques</a> à Java, <a href="http://biancaproject.org/"><em>bianca</em></a> est une réalité.</p>
<p>Le projet a bien été initié il y a maintenant plusieurs mois par les fondateurs de <a href="http://www.clever-cloud.com/">Clever Cloud</a>, est bien basé sur <a href="http://quercus.caucho.com/">Quercus</a> et s'inscrit pleinement dans le projet de la société qui est de mettre à disposition de ses clients plusieurs langages de programmation en se basant exclusivement sur la JVM.</p>
<p><a href="http://biancaproject.org/"><em>Bianca</em></a> est même fonctionnelle (on va dire que c'est une fille) même si elle ne supporte pas encore PHP 5.4 et qu'il y a encore du travail pour qu'elle supporte l'intégralité de l'API de <a href="http://www.php.net">PHP</a> et <a href="http://www.biancaproject.org/">supporte</a> effectivement <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>.</p>
<p>À contrario, <a href="http://www.zend.com">Zend</a> n'a strictement rien à voir avec son développement, qui est mené (à ma connaissance) exclusivement depuis le début par <a href="http://www.clever-cloud.com/">Clever Cloud</a>, et j'ignore absolument tout de la politique commerciale de <a href="http://www.zend.com">Zend</a> et des éventuels travaux que cette société mène en recherche et développement autour de <a href="http://www.php.net">PHP</a> (et j'ajouterais que j'en ai absolument et strictement rien à cirer).</p>
<p>La partie concernant les performances de <a href="http://biancaproject.org/"><em>bianca</em></a> est également totalement inventée puisque je n'ai pas la moindre idée de ses performances par rapport au Zend Engine, et j'ignore même si les gens de <a href="http://www.clever-cloud.com/">Clever Cloud</a> se sont amusés à réaliser ce genre de comparatif.</p>
<p>Pour ce que j'en sais, <a href="http://biancaproject.org/"><em>bianca</em></a> pourrait très bien être plus lente, aussi rapide ou plus rapide que le Zend Engine à configuration matériel et code équivalent.</p>
<del><p>Et toujours à ma connaissance, <a href="http://biancaproject.org/"><em>bianca</em></a> ne supporte pas mieux <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> que <a href="http://www.php.net">PHP</a>.</p>
</del>
<p><a href="http://biancaproject.org/"><em>Bianca</em></a> est donc une réalité déguisé habilement (du moins je l'espère) en poisson d'avril.</p>
<p>Et tout cela est pour ainsi dire le fruit d'un heureux hasard de circonstance, car je n'avais pas imaginé que les choses iraient aussi loin.</p>
<p>J'ai eu l'idée mon <q>canular</q> il y a maintenant un peu plus d'une semaine.</p>
<p>La relation entre PHP et Java a toujours été sulfureuse et génératrice de trolls en tout genre, et le phénomène s'est encore amplifié ces derniers mois avec l'utilisation dans certain frameworks PHP de concepts utilisés abondamment dans le monde Java, au grand dam de certains.</p>
<p>J'entends en outre de plus en plus régulièrement que <a href="http://www.php.net">PHP</a> ressemble de plus en plus Java, ce qui est d'ailleurs assez comique pour celui qui suit <a href="http://news.php.net/php.internals">internals@</a>, la liste de diffusion des développeurs du langage dans laquelle la phrase <q>PHP is not Java</q> est un grand classique.</p>
<p>Il m'a semblé donc très intéressant de mettre tout cela dans le même pot et de voir ce qui allait en sortir.</p>
<p>Sauf que je pense que pour fonctionner un minimum, un bon canular doit contenir une part de vérité.</p>
<p><a href="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">L'année dernière</a>, l'actualité m'avait fourni tout ce dont j'avais eu besoin, mais pour cette fois, je n'avais absolument rien à me mettre sous la main qui soit un minimum véridique et sur lequel bâtir une histoire se tenant à peu près.</p>
<p>Ne pouvant contacter <a href="http://www.zend.com">Zend</a> à ce sujet (encore que…) j'ai donc eu l'idée de demander sa participation à <a href="http://twitter.com/#%21/waxzce">Quentin Adam</a>, le fondateur de <a href="http://www.clever-cloud.com/">Clever Cloud</a>, car il m'avait confié durant la <a href="http://blog.mageekbox.net/?post/2011/03/16/Il-y-a-la-ConFoo-pour-%C3%A7a-%21">Confoo 2011</a> qu'il développait une implémentation de <a href="http://www.php.net">PHP</a> basée sur la JVM, et je savais qu'il était assez barré pour accepter de me suivre dans mon délire.</p>
<p>Il est d'ailleurs tellement barré qu'il a même été beaucoup plus loin que ce que j'espérais, puisqu'au lieu de me fournir le simple communiqué de presse au nom de <a href="http://www.clever-cloud.com/">Clever Cloud</a> que je lui avais demandé, il a carrément décidé d'aller beaucoup plus loin et de rendre public la totalité des travaux que sa société avait réalisé sur <a href="http://biancaproject.org/"><em>bianca</em></a>.</p>
<p>J'ai donc préparé ma petite histoire avec le concours de <a href="http://twitter.com/#%21/kdecherf">Kevin Decherf</a>, le co-fondateur de <a href="http://www.clever-cloud.com/">Clever Cloud</a> et développeur principal de <a href="http://biancaproject.org/"><em>bianca</em></a>, histoire qui s'achève donc maintenant avec ce billet.</p>
<p>Je profite donc de l'occasion pour remercier Quentin et Kevin pour avoir accepté de me suivre dans ce petit délire et de m'avoir donné autant d'informations et de matière pour le faire, car sans eux, ça n'aurait pas été du tout la même chose !</p>http://blog.mageekbox.net/?post/2012/04/02/Poisson-d-avril-or-not-poisson-d-avril#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/341PHP utilisera dorénavant la JVMurn:md5:66c28e3b80b12b03b1366568a1d1d44a2012-04-01T08:30:00+02:002012-04-03T07:48:01+02:00mageekguyPHPBiancaClever CloudJVMPHPUnicodeZendZend Engine<p>Il y a maintenant deux ans, suite <a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">à l'arrêt du développement de PHP 6</a>, les développeurs de <a href="http://www.zend.com">Zend</a> ont immédiatement commencé à chercher une solution alternative pour intégrer à moyen terme le support d'<a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> dans <a href="http://www.php.net">PHP</a>.</p>
<p>Pour rappel, <a href="http://www.zend.com">Zend</a> est la société créée par <a href="http://twitter.com/#%21/zeevs">Zeev Suraski</a> et <a href="http://fr.wikipedia.org/wiki/Andi_Gutmans">Andi Gutman</a>, qui sont les concepteurs originels du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, le moteur le plus utilisé, et de loin, pour exécuter du code écrit en <a href="http://www.php.net">PHP</a>.</p>
<p>Cependant, malgré cela, <a href="http://www.zend.com">Zend</a>, a grand besoin que <a href="http://www.php.net">PHP</a> supporte <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> nativement, afin de pouvoir obtenir de nouveaux marchés, notamment en Asie et plus particulièrement en Chine.</p>
<p>En effet, le fait que le langage ne supporte pas nativement les différents alphabets et syllabaires de cette région du monde est un gros handicap pour le langage, et <a href="http://www.zend.com">Zend</a> a donc du mal à y gagner des parts de marché.</p>
<p>De plus, la société redoute que les chinois, fidèle à leurs habitudes, développent une version de <a href="http://www.php.net">PHP</a> ou pire un nouveau langage qui intégrera nativement le support <a href="http://fr.wikipedia.org/wiki/Unicode">d'Unicode</a>, ce qui leur fermerait à tout jamais les portes de ce juteux marché.</p>
<p>Il était donc absolument nécessaire pour <a href="http://www.zend.com">Zend</a> de trouver une solution efficace pour que PHP soit capable de manipuler nativement et efficacement des chaînes de caractères <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>.</p> <p>Évidemment, au départ, ils ont cherché à faire ce qui avait déjà été tenté avec PHP 6, à savoir faire supporter <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> par le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, mais cette fois-ci en y intégrant une gestion des caractères basé sur <a href="http://fr.wikipedia.org/wiki/Utf-8">UTF-8</a> et non <a href="http://fr.wikipedia.org/wiki/Utf-16">UTF-16</a> comme dans le cas de feu PHP 6.</p>
<p>En effet, le fait que l'<a href="http://fr.wikipedia.org/wiki/Utf-16">UTF-16</a> ait été utilisé dans PHP 6 a entrainé une forte dégradation des performance du langage et une augmentation de la consommation mémoire très significative.</p>
<p>De plus, cela a fortement compliqué le code, qui est devenu difficile à la fois à comprendre et à maintenir, car il était de la responsabilité du développeur de manipuler correctement les chaînes de caractères.</p>
<p>C'est d'ailleurs pour cette raison qu'il a fallu analyser, vérifier et modifier la totalité du code source de PHP lors de la conception de PHP 6, d'ou un temps de développement extrêmement long.</p>
<p>En utilisant <a href="http://fr.wikipedia.org/wiki/Utf-8">UTF-8</a> au lieu de <a href="http://fr.wikipedia.org/wiki/Utf-16">UTF-16</a>, les développeurs de chez Zend ont donc pensé qu'ils pourraient profiter des avantages <a href="http://fr.wikipedia.org/wiki/Unicode">d'Unicode</a> basé sur <a href="http://fr.wikipedia.org/wiki/Utf-16">UTF-16</a> sans en avoir les inconvénients.</p>
<p>L'encodage <a href="http://fr.wikipedia.org/wiki/Utf-8">UTF-8</a> présente en effet de nombreux avantages par rapport à l'<a href="http://fr.wikipedia.org/wiki/Utf-16">UTF-16</a>, à commencer par un besoin en mémoire significativement moins important et une compatibilité avec l'<a href="http://fr.wikipedia.org/wiki/US-ASCII">US-ASCII</a>.</p>
<p>De plus, il est fortement compatible avec la plupart des encodages non <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> relatifs au langue latine, comme le bien connu <a href="http://fr.wikipedia.org/wiki/ISO_8859-1">ISO 8859-1</a> supporté depuis toujours par <a href="http://www.php.net">PHP</a>.</p>
<p>Mais malgré tout leurs efforts, les développeurs de <a href="http://www.zend.com">Zend</a> n'ont malheureusement pas réussi à faire mieux que les développeurs de PHP 6, ou du moins, le résultat de leur travail n'a pas été à la hauteur de leurs attentes.</p>
<p>En effet, le véritable problème n'était pas tant l'encodage retenu pour représenter les chaîne de caractères au format <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> que le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> en lui-même, car ce dernier n'a tout simplement pas été conçu pour pouvoir intégrer facilement et surtout efficacement une telle fonctionnalité.</p>
<p>Suite à ce constat et bien aidé par le fait que les développeurs de PHP 5.4 ne cherchait pas à faire en sorte que ce dernier supporte <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>, <a href="http://www.zend.com">Zend</a> a alors pris, il y a un peu moins d'un an, une décision radicale : puisque le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> n'est pas capable, de part sa conception, de supporter Unicode, alors, il faut utiliser une autre machine virtuelle capable de le supporter pour propulser PHP !</p>
<p>Pendant un temps, les développeurs de <a href="http://www.zend.com">Zend</a> ont envisagé d'utiliser <a href="http://www.parrot.org/">Parrot</a>, la machine virtuelle qui est utilisée entre autre par <a href="http://rakudo.org/">Perl 6</a>, <abbr title="Also Known As">aka</abbr> <a href="http://rakudo.org/">Rakudo</a>, car elle avait l'avantage de déjà disposer d'un support partiel de <a href="http://www.php.net">PHP</a>.</p>
<p>Cependant, ils ont fini par décidé d'utiliser la <a href="http://fr.wikipedia.org/wiki/Machine_virtuelle_Java">Java Virtual Machine</a> <abbr title="Also Known As">aka</abbr> <abbr title="Java Virtual Machine">JVM</abbr>, notamment après avoir pris connaissance des travaux de la jeune société française <a href="http://www.clever-cloud.com/">Clever Cloud</a>.</p>
<p>Le co-fondateur de cette start-up, <a href="http://twitter.com/#%21/kdecherf">Kevin Decherf</a>, travaillait en effet à l'époque depuis de nombreux mois sur une solution permettant l'exécution de code PHP via la JVM.</p>
<p>Basée sur une branche autonome de <a href="http://quercus.caucho.com/">Quercus</a>, une implémentation en Java de PHP 5, la solution de <a href="http://www.clever-cloud.com/">Clever Cloud</a> avait l'avantage, aux yeux de <a href="http://www.zend.com" "="">Zend</a>, d'avoir à la fois déjà démontré sa fiabilité et de surtout d'être capable d'intégrer le support d'<a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> à court terme.</p>
<p>En outre, elle allait permettre à <a href="http://www.zend.com" "="">Zend</a> d'enfin pouvoir venir concurrencer <a href="http://fr.wikipedia.org/wiki/Java_%28langage%29">Java</a> sur son propre territoire, à l'heure ou les principaux frameworks PHP disponibles sur le marché font massivement appel à des concepts et à des philosophies de développement issus du monde <a href="http://fr.wikipedia.org/wiki/Java_%28langage%29">Java</a>.</p>
<p>Enfin, suite au rachat de <a href="http://www.mysql.com">MySQL</a> et de <a href="http://fr.wikipedia.org/wiki/Sun_Microsystems">Sun</a> par la société <a href="http://www.oracle.com">Oracle</a>, l'utilisation de la JVM par PHP permettrait de présenter le couple PHP/MySQL sous la bannière de cette dernière, ce qui représenterait un avantage commercial significatif et déterminant pour pousser à l'adoption de PHP à la place de Java.</p>
<p>En partenariat avec <a href="http://www.clever-cloud.com/">Clever Cloud</a>, <a href="http://www.zend.com" "="">Zend</a> a donc fait en sorte que <a href="http://www.php.net">PHP</a> soit supporté par la JVM tout en intégrant le support <a href="http://fr.wikipedia.org/wiki/Unicode">d'Unicode</a>, et après un peu plus de 6 mois de travail,le projet <a href="http://biancaproject.org/"><em>bianca</em></a>, puisque c'est son nom, était finalisé sous la forme d'un moteur PHP basé sur la JVM parfaitement à même de remplacer le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Et les performances de ce nouveaux moteur se sont révélées époustouflantes, puisque d'après les tests effectués par <a href="http://www.clever-cloud.com/">Clever Cloud</a>, PHP propulsé par <a href="http://biancaproject.org/"><em>bianca</em></a> est en moyenne 20% plus performant que <a href="http://fr.wikipedia.org/wiki/Java_%28langage%29">Java</a> à contexte équivalent, alors que les deux langages utilisent la même machine virtuelle.</p>
<p>Le Zend Engine a quand à lui des performances très en retrait, d'environs 30% en moyenne, et sur certaines opérations très spécifiques telles que celles mettant en œuvre des nombres en virgule flottante, il peut être jusqu'à 70% plus lent </p>
<p>C'est d'ailleurs ses performances très supérieures à celle du Zend Engine qui ont poussé <a href="http://www.clever-cloud.com/">Clever Cloud</a> à nommer leur moteur <a href="http://biancaproject.org/"><em>bianca</em></a>, puisqu'il s'agit du nom d'une souris d'un célèbre <a href="http://fr.wikipedia.org/wiki/Les_Aventures_de_Bernard_et_Bianca">dessin animé</a> et que comme chacun le sait, les <a href="http://fr.wikipedia.org/wiki/Fichier:Elephpant.png">élephpants</a> ont très peur des souris.</p>
<p><a href="http://www.zend.com">Zend</a> dispose donc aujourd'hui de l'arme absolue sous la forme d'une version de <a href="http://www.php.net">PHP</a> ultra-performante intégrant le support d'Unicode et dont le code vient d'être rendu public via <a href="https://github.com/CleverCloud/Bianca">github</a>.</p>
<p>Reste à savoir ce qu'en penseront les communautés gravitant autour de <a href="http://www.php.net">PHP</a>, à commencer par ses utilisateurs et ses développeurs, car <a href="http://www.zend.com">Zend</a> a travaillé jusqu'ici dans le plus grand secret et ce n'est que aujourd'hui que <a href="http://www.clever-cloud.com/">Clever Cloud</a> a annoncé l'existence de <em><a href="http://biancaproject.org/">bianca</a></em>, plusieurs mois après le début de son développement.</p>
<p>D'ailleurs, on peut remarquer que le nom de <a href="http://www.zend.com">Zend</a> ne figure absolument pas dans le <a href="http://www.clever-cloud.com/fr_FR/presse/clever-cloud-libere-moteur-php-open-source-bianca.html">communiqué officiel</a> de <a href="http://www.clever-cloud.com/">Clever Cloud</a>, et sans une indiscrétion de son fondateur <a href="http://twitter.com/#%21/waxzce">Quentin Adam</a> (désolé Quentin, le scoop était trop énorme pour ne pas que j'en parle), je pense que le lien entre <a href="http://www.clever-cloud.com/">Clever Cloud</a> et <a href="http://www.zend.com">Zend</a> aurait été gardé secret pendant encore longtemps.</p>http://blog.mageekbox.net/?post/2012/03/24/PHP-utilisera-dorenavant-la-JVM#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/339PHP : les nouvelles du front #430urn:md5:d9933e3a0d8f33642436927e342a96062011-06-08T22:00:00+02:002011-06-09T21:17:00+02:00mageekguyPHP XautoconfCallbackCurryingIlia AlshanetskyLinuxmbstringPECLPHP XPierre JoyeRFCZeev SuraskiZend Engine<p style="margin-top: 0; ">Une nouvelle fois, j'ai du retard dans la rédaction de ce billet.</p>
<p>Il faut dire que le développement de <a href="http://www.php.net">PHP</a> est actuellement dans une période très intense et que je dispose de moins en moins de temps à consacrer à son suivi.</p>
<p>La liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals/">internals@</a>, est la plus directement responsable de cette situation.</p>
<p>Elle était en effet déjà relativement active depuis une vingtaine de jours, mais depuis l'appel au vote de <a href="http://blog.thepimp.net">Pierre Joye</a> pour valider la <abbr title="Request For Comments">RFC</abbr> concernant le <a href="https://wiki.php.net/rfc/releaseprocess">futur processus de release</a> du langage, sa volumétrie a littéralement explosé, puisqu'un peu moins de 500 messages ont été postées sur les dix derniers jours.</p>
<p>De plus, si les discussions sur <a href="http://news.php.net/php.internals/">internals@</a> ont toujours été relativement difficiles à suivre de part le manque de modération, depuis quelques jours, c'est carrément l'anarchie.</p>
<p>En effet, il y a souvent plusieurs discussions en parallèle sur le même thème, suite à des dérives dans les débats ainsi que des digressions sans rapport qui génère d'autres fils de discussion, sans parler des échanges d'amabilités entre les contributeurs, les contestations, les trolls, j'en passe et des meilleures.</p>
<p>Je n'ai donc pas le temps d'éplucher tout cela dans le détail, et d'ailleurs, je ne suis même pas convaincu que cela en vaille la peine.</p>
<p>Je vais donc pour une fois être obligé de survoler les débats pour en retirer l'essentiel, en espérant ne pas passer à côté de choses importantes.</p> <p>Tout d'abord, <a href="http://news.php.net/php.internals/52482">il a été demandé</a> s'il était pertinent de porter des extensions <a href="http://pecl.php.net">PECL</a>, donc écrite en C, vers <a href="http://www.php.net">PHP</a> afin que leurs fonctionnalités soient disponibles même si l'extension correspondante ne peut pas être installée, et s'il y avait un moyen d'automatiser, au moins partiellement ce portage.</p>
<p>Il a été répondu que cela était possible pour certaines extensions, mais qu'il n'y avait pas de méthode générique pour le faire et qu'il y aurait évidemment une perte de performance significative et que cela était un énorme travail. La discussion est ensuite partie <a href="http://news.php.net/php.internals/52491">gentiment en vrille</a>, les participants ayant décidé de disserter sur la pertinence d'écrire ou non des extensions en C pour <a href="http://www.php.net">PHP</a>.</p>
<p>Il a été ensuite proposé de r<a href="http://news.php.net/php.internals/52554">emplacer l'implémentation actuelle de mbstring</a> au sein du langage, qui présente un certain nombre d'inconvénients décrits dans la <a href="https://wiki.php.net/rfc/altmbstring"><bbr title="Request For Comments">RFC correspondante</bbr></a>.</p>
<p>Cette proposition revient de loin, puisque le sujet avait été évoqué pour la première fois en 2009, mais pour autant, pour l'instant, rien n'a été décidé et il n'est donc pas dit que cette nouvelle implémentation soit disponible rapidement, que ce soit au sein de <a href="http://www.php.net">PHP</a> ou sous la forme d'une extension.</p>
<p>La discussion au sujet de l'utilisation d'un DCVS pour gérer le code source de PHP est également revenu sur le devant de la scène, mais tout comme dans le cas de l'implémentation alternative de mbstring, rien n'a avancé, même si une <abbr title="Request For Comments">RFC</abbr> devrait <a href="http://news.php.net/php.internals/52643">être rédigée rapidement</a>.</p>
<p>Une autre RFC a été exhumé du wiki, puisque <a href="http://ilia.ws/">Ilia Alshanetsky</a> a <a href="http://news.php.net/php.internals/52606">proposé</a> d'intégrer un patch datant de juillet 2008 a<a href="https://wiki.php.net/rfc/zendsignals">méliorant la gestion des signaux</a> au niveau du Zend Engine à PHP 5.4.</p>
<p>Sa suggestion a été accueillie favorablement, et le patch est actuellement <a href="http://news.php.net/php.internals/52907">en train d'être mis à jour</a> et corrigé en vu de son intégration à la prochaine version du langage.</p>
<p>La <abbr title="Request For Comments"><a href="http://news.php.net/php.internals/52834">RFC</a></abbr> concernant les <a href="http://en.wikipedia.org/wiki/Enumerated_type">énumérations</a> a elle aussi refait surface et devrait évoluer prochainement, mais comme d'habitude, il y a eu plus de questions soulevée que de réponses trouvées à son sujet.</p>
<p>Enfin, une <abbr title="Request For Comments">RFC</abbr> concernant <a href="https://wiki.php.net/rfc/session-oo">l'intégration d'une classe de gestion de sessions</a> a été soumise à l'avis des contributeurs, mais elle n'a pas pour l'instant suscité énormément d'intérêt parmi eux.</p>
<p>Plus exotique, il a été demandé de pouvoir <a href="http://news.php.net/php.internals/52523">désactiver le logo</a> de <a href="http://www.php.net">PHP</a> à la compilation, mais j'avoue ne pas en avoir compris la raison, ni avoir eu envie de la chercher.</p>
<p>Il y a également eu un débat <a href="http://news.php.net/php.internals/52513">au sujet de l'infini,</a> et plus précisément sur ce que devait donner comme résultat les expressions <code>INF == INF</code> et <code>INF === INF</code>, et pour l'instant, le résultat est indécidable.</p>
<p>En effet, certains veulent un comportement identique à celui de NULL, à savoir que <code>INF == INF</code> et <code>INF === INF</code> soient égaux à <code>TRUE</code>, tandis que d'autres désirent un comportement similaire à celui du SQL et que <code>INF == INF</code> retourne <code>FALSE</code> tandis que <code>INF === INF</code> retourne <code>TRUE</code>.</p>
<p>L'un des deux plus gros débat de ces <s>10</s> 12 derniers jours a été sans conteste celui portant sur la <abbr title="Request For Comments">RFC</abbr> relative au futur processus de release de <a href="http://www.php.net">PHP</a> et le vote qui en a découlé.</p>
<p>Il semble en effet que le consensus soit encore loin, au vu des réactions que la <a href="https://wiki.php.net/rfc/releaseprocess">proposition</a>, pourtant rédigé par les principaux développeurs actifs du langage, a suscité.</p>
<p>Les principaux points d'achoppement concerne assez paradoxalement le système de vote, à la fois celui mis en place pour entériner la <abbr title="Request For Comments">RFC</abbr> que celui décrit par la <abbr ttile="Request For Comments">RFC</abbr>, et la question du support des versions du langage sur le long terme.</p>
<p>Il y a donc clairement encore un gros travail d'évangélisation à réaliser avant que cette proposition soit adoptée, d'autant que le vote est <a href="https://wiki.php.net/rfc/releaseprocess/vote">actuellement suspendu</a>, apparemment au moins jusqu'à ce qu'un outil qui convienne à la majorité des contributeurs soit mis en place pour le réaliser.</p>
<p>Cependant, le plus gros débat a été sans contestation possible celui concernant la possibilité de définir des tableaux via<a href="http://news.php.net/php.internals/52566"> une notation plus courte</a>, c'est à dire sans passer par le mot-clef <code>array et</code> à l'aide de <code>[</code> et <code>]</code>.</p>
<p>Il a généré à lui seul pas loin de 150 messages, sans compter ceux qui ont été échangé dans le cadre des discussions annexes qu'il a provoqué.</p>
<p>Les choses avaient pourtant bien commencé, puisqu'un vote avait été lancé très rapidement pour la valider définitivement, mais les choses se sont gâtées très rapidement.</p>
<p>En (très) résumé, l'intérêt de la proposition a été remis en cause une nouvelle fois, ainsi que la syntaxe proposée, et des modifications substantielles et parfois formalisées, comme <a href="https://wiki.php.net/rfc/objectarrayliterals">cette <abbr ttile="Request For Comments">RFC</abbr></a> suggérant l'utilisation de la notation <abbr title="JavaScript Object Notation"><a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">JSON</a></abbr> ou l'utilisation de <code>:</code> au lieu de <code>=></code> pour la définition des paires clef/valeur dans un tableau.</p>
<p>De plus, la procédure de vote elle-même a été remise en cause, vu que le débat a été pollué par celui relatif au processus de release du langage.</p>
<p>Les contributeurs sont donc très loin d'être d'accord entre eux au sujet de cette fonctionnalité, et d'après mes dernières informations, suite <a href="http://news.php.net/php.internals/52963">aux</a> <a href="http://news.php.net/php.internals/52965">remarques</a> de <a href="http://fr.wikipedia.org/wiki/JavaScript_Object_Notation">Zeev Suraski</a>, tout comme dans le cas du processus de release, il semblerait qu'un nouveau vote sera effectué lorsque les choses auront été mises à plat à ce niveau. </p>
<p>Certain ont également <a href="http://news.php.net/php.internals/52812">tenté de faire avancer les choses</a> sur le front de la prochaine version <q>significative</q> du langage, la <s>mal</s> bien nommée 5.4.</p>
<p>Malheureusement, cette discussion, qui promettait pourtant d'être intéressante, a également été polluée par les problèmes posés par la procédure de vote et le processus de release, et n'a donc pas débouchées sur des choses significatives.</p>
<p><a href="http://fr.wikipedia.org/wiki/Andi_Gutmans">Andi Gutmans</a> a de son côté <a href="http://news.php.net/php.internals/52898">proposé</a> d'intégrer des extensions permettant d'apporter à <a href="http://www.php.net">PHP</a> nativement des technologies modernes, comme par exemple <a href="http://www.mongodb.org/">MongoDB</a>, un serveur de base de données utilisant les principes du <a href="http://en.wikipedia.org/wiki/Nosql">NoSQL</a>.</p>
<p>Les contributeurs ne parviennent cependant pas à se mettre d'accord <a href="http://news.php.net/php.internals/53041">sur l'intérêt de faire cela</a>, ni sur les critères qui permettrait de décider les extensions PECL qui seraient ainsi ajoutée au cœur du langage.</p>
<p>Et ce n'est pas la proposition d'intégrer une syntaxe <a href="https://wiki.php.net/rfc/currying">rappelant la programmation fonctionnelle</a> sous l'appellation de <a href="http://en.wikipedia.org/wiki/Currying">currying</a> qui a <a href="http://news.php.net/php.internals/53127">calmé les débats</a>, bien au contraire, et encore moins celle visant à <a href="http://news.php.net/php.internals/52940">pouvoir invoquer un </a><code><a href="http://news.php.net/php.internals/52940">callback</a></code>, le clivage entre les contributeurs progressistes et les ceux très traditionnalistes étant toujours présent.</p>
<p>Grâce au currying, il deviendrait possible d'écrire par exemple :</p>
<blockquote><pre><code><?php
// curry et ... sont des mots-clef !
func = curry str_replace(..., ..., "foobar");
$func('foo', 'bar'); // barbar
$func('foo', 'baz'); // bazbar
?></code></pre></blockquote>
<p>La possiblité d'invoquer un <code><a href="http://php.net/manual/fr/language.pseudo-types.php">callback</a></code> permettrait quand à elle de faire :</p>
<blockquote><pre><code><?php
class Hello { function print($who) { echo 'Hello ' . $who . PHP_EOL; } }
$callback = array('Hello', 'print');
$callback('world');
?></code></pre></blockquote>
<p><a href="http://patrickallaert.blogspot.com/">Patrick Allaert</a> a également proposé un patch qui a fait débat parmi les contributeurs et qui a pour but la génération d'une erreur de type <code>E_NOTICE</code> lors de la conversion d'un tableau en chaîne de caractères ayant la valeur <code>Array</code>.</p>
<p>Le patch a été bien accueilli, mais certain aurait voulu aller encore plus loin et générer une erreur d'un niveau plus élevé, mais la volonté de conserver une compatibilité avec le code existant rend cela impossible, et en conséquence, le code correspondant devrait donc être <a href="http://news.php.net/php.internals/52773">prochainement intégré</a> dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Pour continuer dans la lignée du déréférencement des tableaux et des constructeurs, il a également <a href="http://news.php.net/php.internals/53137">été proposé</a> de généraliser encore plus le principe des interfaces fluides en permettant d'appeler une instance de classe dès qu'elle a été clonée, et de rendre l'instruction <code>foreach</code> plus souple, de la manière suivante :</p>
<blockquote><pre><code><?php
$tomorrow = (clone $today)->add($one_day);
foreach ($arrays as list($e1, $e2, $e3)) {}
// Pour remplacer :
foreach ($arrays as $array) { list($e1, $e2, $e3) = $array; }
?>
</code></pre></blockquote>
<p>Ces deux propositions, dont l'une reprend un principe <a href="https://wiki.php.net/rfc/instance-method-call">déjà soumis</a> à la communauté par le passé, n'ont pour l'instant pas suscité de grosses réactions de la part des développeurs.</p>
<p>Enfin, une question par rapport à la pertinence de développer et d'utiliser <a href="http://www.caucho.com/resin-3.0/quercus/">Quercus</a>, un équivalent au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> et basé sur la <abbr title="Java Virtual Machine"><a href="http://fr.wikipedia.org/wiki/JVM_(informatique)">JVM</a>,</abbr> <a href="http://news.php.net/php.internals/52526">a été posée</a>, et les contributeurs ont répondu qu'ils ne voyaient pas énormément d'intérêt à investir du temps dans un projet de ce type.</p>
<p><a href="http://news.php.net/php.internals/">La liste de diffusion des contributeurs</a> est donc en pleine ébullition, et moi qui me plaignait de son calme il y a quelques temps, j'en viendrais presque à regretter cette époque tant j'ai du mal à suivre le rythme actuel, d'autant que l'activité sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> n'est pas en reste.</p>
<p>Ce dernier a en effet subit pas loin de 70 modifications, dont presque un tiers sont des corrections, puisque les bugs <a href="http://bugs.php.net?id=54934">#54934</a>,
<a href="http://bugs.php.net?id=54137">#54137</a>,
<a href="http://bugs.php.net?id=53848">#53848</a>,
<a href="http://bugs.php.net?id=54601">#54601</a>,
<a href="http://bugs.php.net?id=54946">#54946</a>,
<a href="http://bugs.php.net?id=52496">#52496</a>,
<a href="http://bugs.php.net?id=54957">#54957</a>,
<a href="http://bugs.php.net?id=54910">#54910</a>,
<a href="http://bugs.php.net?id=54484">#54484</a>,
<a href="http://bugs.php.net?id=52104">#52104</a>,
<a href="http://bugs.php.net?id=54970">#54970</a>,
<a href="http://bugs.php.net?id=54896">#54896</a>,
<a href="http://bugs.php.net?id=54918">#54918</a>,
<a href="http://bugs.php.net?id=54929">#54929</a>,
<a href="http://bugs.php.net?id=54609">#54609</a>,
<a href="http://bugs.php.net?id=51819">#51819</a>,
<a href="http://bugs.php.net?id=51997">#51997</a>,
<a href="http://bugs.php.net?id=47160">#47160</a>,
<a href="http://bugs.php.net?id=55007">#55007</a>,
<a href="http://bugs.php.net?id=54992">#54992</a> et
<a href="http://bugs.php.net?id=53540">#53540</a> ont été supprimés.</p>
<p>La plupart des autres modifications ne sont cependant que des optimisations, du nettoyage ou bien de l'ajout ou des mises à jours de tests unitaires, même si certaines d'entres elles visent à corriger des problèmes potentiellement sérieux tel que des crashs du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Pour finir, la version minimale d'<code>autoconf</code> supportée par <a href="http://www.php.net">PHP</a> est dorénavant la 2.59, car la version 2.60 n'est pas disponible nativement dans certaines distributions de <a href="http://fr.wikipedia.org/wiki/Linux">Linux</a>, telle que <a href="http://fr.wikipedia.org/wiki/CentOS">Centos</a>, <a href="http://fr.wikipedia.org/wiki/RHEL"><abbr title="Red Hat Enterprise Linux">RHEL</abbr></a> ou Oracle Linux 5.6.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2011/06/08/PHP-%3A-les-nouvelles-du-front-430#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/263À propos du bug 53632 de PHPurn:md5:534e50fa56ad966dc86cb8f45432896b2011-02-01T12:30:00+01:002011-02-01T15:42:13+01:00mageekguyPHPbugGCCPHPx87Zend Engine<p>Il y a maintenant quelques semaines, <a href="http://www.exploringbinary.com/about/">Rick Regan</a> a découvert un <a href="http://bugs.php.net/bug.php?id=53632">bug</a> assez méchant dans <a href="http://www.php.net">PHP</a>, qui a reçu l'identifiant <a href="http://bugs.php.net/bug.php?id=53632">#53632</a> et qui est également connu sous le nom de <a href="http://blog.andreas.org/display?id=9"><q>The PHP strtod() denial of service bug</q></a>.</p>
<p>En étudiant la façon dont le langage gère les nombres à virgule flottante, et plus particulièrement ceux aux alentours de zéro, il a réussi à faire partir le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, le moteur qui propulse PHP, dans une boucle infinie à l'aide d'une simple affectation de variable, de la manière suivante :</p>
<blockquote><pre><code><?php $d = 2.2250738585072011e-308; ?><br /></code></pre></blockquote>
<p>À l'époque, il était donc tout à fait possible de bloquer un serveur web qui utilise <a href="http://www.php.net/">PHP</a> en injectant, via par exemple <code>$_GET,</code> cette fameuse valeur.</p>
<p>Évidemment, suite au <a href="http://bugs.php.net/bug.php?id=53632">rapport de bug</a>, ce dernier été corrigé très rapidement, grâce aux versions <a href="http://www.php.net/archive/2011.php#id2011-01-06-1">5.2.17 et 5.3.5</a> du langage, que je ne peux que vous encourager à utiliser si vous n'avez pas encore fait la mise à jour.</p>
<p>Et encore plus évidemment, beaucoup de gens ont encore dit que, décidément, <a href="http://www.php.net/">PHP</a> était vraiment un langage de merde conçu par des abrutis et que tout les développeurs du monde devraient arrêter de l'utiliser au profit de vrais langages tel que <a href="http://www.python.org/">Python</a>, <a href="http://www.ruby-lang.org/fr/">Ruby</a> ou bien encore <a href="http://fr.wikipedia.org/wiki/Java_%28langage%29">Java</a>.</p>
<p>Sauf qu'en l'occurrence, ces gens auraient mieux fait de se taire...</p> <p>En effet, ce fameux <a href="http://bugs.php.net/bug.php?id=53632">bug</a> n'est nullement spécifique à <a href="http://www.php.net/">PHP</a> et peut impacter d'autres langages, voir même des programmes qui n'ont rien à voir avec un langage de programmation.</p>
<p>Il trouve en effet son origine au sein de l'unité de calcul en virgule flottante <a href="http://fr.wikipedia.org/wiki/Intel_8087">x87</a> des processeurs <a href="http://fr.wikipedia.org/wiki/X86">x86</a> 32 bits qui est, assez paradoxalement, trop précise, puisqu'elle utilise 80 bits pour effectuer ses calculs.</p>
<p>De ce fait, cette unité, encore présente dans les micro-processeurs d'aujourd'hui pour des raisons de compatibilité, se révèle incapable de gérer correctement le nombre en question, ce qui provoque la boucle infinie au sein du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Heureusement, elle a été remplacé au sein des processeurs <a href="http://fr.wikipedia.org/wiki/X86">x86</a> par le module <a href="http://fr.wikipedia.org/wiki/Streaming_SIMD_Extensions">SSE</a> il y a un peu plus de 10 ans, qui lui est moins précis puisqu'il gère les nombres à virgule flottante sur 64 bits, suivant en cela la norme <a href="http://fr.wikipedia.org/wiki/IEEE_754">IEE 754</a>.</p>
<p>Il devrait donc être utilisé, via les compilateurs, à la place de <a href="http://fr.wikipedia.org/wiki/Intel_8087">x87</a>.</p>
<p>Sauf que <a href="http://fr.wikipedia.org/wiki/GNU_Compiler_Collection"><abbr title="Gnu Compiler Collection">GCC</abbr></a>, le compilateur utilisé traditionnellement pour produire le binaire de <a href="http://www.php.net/">PHP</a>, n'est pas capable, par défaut, d'utiliser le module <a href="http://fr.wikipedia.org/wiki/Streaming_SIMD_Extensions">SSE</a> à la place de <a href="http://fr.wikipedia.org/wiki/Intel_8087">x87</a>, et cela malgré que le problème ait été rapporté en... <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323">juin 2000</a> !</p>
<p>Or, la gestion des nombres en virgule flottante est une chose complexe en informatique, puisque de part son fonctionnement binaire, un ordinateur ne peut manipuler que des approximations de ces nombres.</p>
<p>Les développeurs <a href="https://www.google.com/codesearch?as_q=%22dmg%40research.att.com%22&btnG=Search+Code&hl=de&as_package=&as_lang=&as_filename=&as_class=&as_function=&as_license=&as_case=">du monde entier</a> ont donc été très content, quand, en 1991, un certain <span class="pygments-cm">David M. Gay a publié un peu plus de 2500 lignes de code écrit en C permettant de les gérer efficacement, à tel point que son code a été repris et intégré dans énormément de programme informatique, <a href="http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_strtod.c?view=markup&pathrev=307095">dont PHP</a>.<br /></span></p>
<p>En résumé, tout programme manipulant des nombres en virgule flottante à la façon <span class="pygments-cm">de David M. Gay</span> et compilé à l'aide de <a href="http://fr.wikipedia.org/wiki/GNU_Compiler_Collection"><abbr title="Gnu Compiler Collection">GCC</abbr></a> ou d'un compilateur faisant appel à l'unité de calcul en virgule flottante <a href="http://fr.wikipedia.org/wiki/Intel_8087">x87</a> contient potentiellement le même style de bug .</p>
<p>C'est assez effrayant, non ?</p>
<p>J'en vois déjà me dire que ce n'est pas possible et que je fabule complètement.</p>
<p>Et pourtant, le même style de problème vient d'être découvert dans <a href="http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/">Java</a> !</p>
<p>Le problème a été rapporté à <a href="http://www.oracle.com/index.html">Oracle</a> il y a maintenant trois semaines, mais pour le moment, <a href="http://preisser.dynalias.org/preisser-it/">l'auteur</a> du rapport de bug n'a reçu aucune réponse et aucun correctif n'a été apporté.</p>
<p>Je suis assez curieux de voir combien de temps cela va prendre pour que le problème soit corrigé, sachant qu'il a fallu 8 jours aux développeurs de PHP pour trouver l'origine du problème et apporter une solution, qui tient <a href="http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_strtod.c?r1=304407&r2=307095&pathrev=307095">en un mot</a>.</p>http://blog.mageekbox.net/?post/2011/02/01/%C3%80-propos-du-bug-53632-de-PHP#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/234Mort de PHP6 + 250 joursurn:md5:64b481bb28fa02a3348363ddcb380a5a2010-11-21T14:30:00+01:002010-11-21T14:30:52+01:00mageekguyPHP XDerick RethansDTraceGuilherme BlancojsonPHP 5.4PHP XtraitstrunkZend Engine<p>Après une interruption induite par le <a href="http://blog.mageekbox.net/?post/2010/11/15/Compte-rendu-du-forum-PHP-2010-1">forum PHP 2010</a> et des <a href="http://blog.mageekbox.net/?post/2010/11/06/Le-forum-PHP-2010%2C-c-est-trois-deux-jours-%21">retrouvailles familiales</a>, ce cycle reprend son cours normal.</p>
<p>Ce billet retrace donc tout ce qu'il s'est passé au niveau du développement de la prochaine version de <a href="http://www.php.net">PHP</a> au court des vingts derniers jours.</p>
<p>En conséquence, j'ai un peu plus d'informations intéressantes à vous faire partager que d'habitude, d'autant que suivant la <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">loi de Murphy</a>, les développeurs de <a href="http://www.php.net">PHP</a> ont choisi justement cette période pour prendre <a href="http://blog.mageekbox.net/?post/2010/11/02/Petite-bombe-largue-a-de-22-h-30-%21">une décision importante</a>.</p>
<p>Je ne m'en plaint cependant pas, bien au contraire, car pour une fois, je n'aurais pas l'impression de faire un simple rapport sur des corrections de bugs.</p> <p>Donc pour ceux qui ne le saurait pas encore, <a href="http://derickrethans.nl/">Derick Rethans</a> a <ins>proposé</ins> sur <a href="http://news.php.net/php.internals">internals@</a>, la liste de diffusion des développeurs de <a href="http://www.php.net/">PHP</a>, qu'une version alpha de la prochaine version du langage soit disponible pour le 24 novembre 2010, et cela semble avoir été accepté par la communauté.</p>
<p><a href="http://derickrethans.nl/">Derick</a> ayant initié le mouvement, il semble qu'il soit devenu de fait le <q>release master</q> de la prochaine version de PHP.</p>
<p>Il sera donc chargé à l'avenir de gérer cette version du langage, autant au niveau technique que fonctionnel, en prenant les décisions qui s'imposent au niveau du code et en décidant des nouvelles fonctionnalités qui y seront intégrées.</p>
<p>Sur ce dernier point, il semble que l'ensemble des nouvelles fonctionnalités présentes dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la version de développement de PHP, fera parti de la prochaine version.</p>
<p>Elle disposera donc entre autre des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a>, du support de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, de l'interface <a href="http://wiki.php.net/rfc/jsonable"><code>jsonSerializable</code></a>, et il sera possible d'utiliser <code>$this</code> dans les fonctions anonymes ainsi que d'accéder directement à un élément d'un tableau renvoyé par une fonction ou une méthode.</p>
<p><a href="http://www.php.net/">PHP</a> autorisera de plus la définition d'<a href="http://wiki.php.net/rfc/typecheckingparseronly">un type numérique</a> pour les arguments des fonctions et des méthodes, mais il n'effectuera aucun contrôle à ce niveau, et ce sera donc au développeur d'en tenir compte s'il le désire via la <a href="http://fr2.php.net/manual/fr/book.reflection.php">réflection</a>.</p>
<p>La prochaine version profitera également des améliorations apportées sur les entrées/sorties et la gestion de la mémoire, ainsi que sur des points spécifiques, comme par exemple une optimisation d'<a href="http://fr2.php.net/unserialize"><code>unserialize()</code></a>.</p>
<p>Elle apportera donc une amélioration très significative des performances, confirmée par les tests que j'ai pu effectuer.</p>
<p>Quelques boulets historiques vont également disparaître, même s'il y a encore une discussion en cours sur le sujet pour définir si le code correspondant est supprimé totalement des sources du langage ou ces boulets sont simplement désactivés par défaut, comme vous le constaterez dans les lignes qui suivent.</p>
<p>Les principaux boulets concernées sont les <a href="http://php.net/manual/fr/security.magicquotes.php">guillemets magiques</a>, le <q><a href="http://php.net/manual/fr/features.safe-mode.php">safe mode</a></q>, les <a href="http://php.net/manual/fr/ini.core.php">directives</a> <code>register_globals</code>, <code>register_long_arrays</code> et <code>allow_call_time_pass_reference</code> ainsi que la fonction <a href="http://fr2.php.net/manual/en/function.import-request-variables.php"><code>import_request_variables()</code></a>.</p>
<p>D'autres modifications et évolutions plus ou moins intéressantes viennent compléter ce tableau, et une liste exhaustive est disponible dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> via le fichier <a href="http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup">NEWS</a>.</p>
<p>La prochaine version apportera donc un certain nombre de nouveautés et de changements dans le fonctionnement du langage.</p>
<p>Pour autant, les contributeurs la considère comme une version mineure car elle n'apporte aucune grosse nouveauté selon eux.</p>
<p>En conséquence, elle est pour le moment nommée PHP 5.4 en interne, et si cela est confirmé, nous devrions voir apparaître dans quelques temps une branche 5.4 dans <a href="http://svn.php.net/viewvc/">le dépôt subversion</a> de <a href="http://www.php.net/">PHP</a>.</p>
<p>La sortie de la version finale est pour le moment prévu avant la mi-2011, ce qui est très flou et laisse pas mal de temps à la communauté pour fignoler les derniers détails.</p>
<p>Évidemment, tout cela a donné lieu à quelques discussions sur <a href="http://news.php.net/php.internals">internals@</a>, notamment au sujet de <a href="http://news.php.net/php.internals/50301">la suppression des guillemets magiques</a>, notamment sur la façon d'informer l'utilisateur que cette fonctionnalité est <a href="http://news.php.net/php.internals/50401">dépréciée ou supprimée</a>.</p>
<p>Il y a également eu <a href="http://news.php.net/php.internals/50366">un bug</a> concernant la gestion des <a href="http://blog.mageekbox.net/?post/2010/05/17/Et-si-on-tirait-des-traits">traits</a> dans un cas particulier qui a été remonté et corrigé dans la foulée, signe qu'il y a encore un peu de travail à fournir avant d'avoir une intégration parfaite du concept dans le langage.</p>
<p>La même chose s'est produite pour <a href="http://news.php.net/php.internals/50311">le support</a> de <a href="http://blog.mageekbox.net/?post/2010/06/16/DTrace-un-peu-plus-dans-le-d%C3%A9tail">DTrace</a>, qui ne fonctionnait plus depuis un moment, et qui a également <a href="http://bugs.php.net/bug.php?id=53338">été corrigé</a>.</p>
<p>Il y a également eu un débat au sujet de l'utilisation de la notation <code><?=</code>, suite à cette <a href="http://bugs.php.net/bug.php?id=50662">demande</a>.</p>
<p>En effet, cette notation n'est plus utilisable depuis que la <a href="http://php.net/manual/fr/ini.core.php">directive</a> <code>short_open_tags</code> est dépréciée.</p>
<p>À l'issue de la discussion, il a été décidé que cette notation sera dorénavant disponible même si le support des <code>short_open_tags</code> n'est pas activé.</p>
<p>Par ailleurs, une nouvelle <abbr title="Request For Comment">RFC</abbr> a été <a href="http://wiki.php.net/rfc/binnotation4ints">proposée</a> afin que <a href="http://www.php.net">PHP</a> supporte la notation binaire pour les entiers, en complément de la notation décimale, octale et hexadécimale.</p>
<p>Elle a reçu un accueil très favorable et cette fonctionnalité devrait être ajoutée rapidement dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et sera peut être même disponible dans PHP 5.4.</p>
<p>Suite à la proposition de sortir une version alpha de la prochaine version du langage, la question des annotations est revenue <a href="http://news.php.net/php.internals/50206">sur le tapis</a>, à l'initiative de <a href="http://blog.bisna.com/">Guilherme Blanco</a>, l'un des deux créateurs de l'implémentation qui a fait <a href="http://blog.mageekbox.net/?post/2010/10/02/Un-petit-point-sur-les-annotations">polémique</a> il n'y pas si longtemps.</p>
<p>Cependant, malgré que <a href="http://blog.bisna.com/">Guilherme</a> ait pris des pincettes pour amener le sujet, il est maintenant avéré que les annotations ne seront <a href="http://news.php.net/php.internals/50345">pas disponibles dans PHP 5.4</a>, et pour l'instant, il n'est même pas possible de dire si elles seront un jour intégrées au langage, car certain développeurs historiques comme <a href="http://en.wikipedia.org/wiki/Zeev_Suraski">Zeev Suraski</a> y sont <a href="http://news.php.net/php.internals/50232">opposés</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Zeev_Suraski">Zeev</a> pense en effet que le le coût technique et fonctionnel des annotations est bien trop élevé par rapport à ce qu'elles apportent.</p>
<p>Au niveau du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la volonté de <a href="http://derickrethans.nl/">Derick Rethans</a> de sortir une version alpha de la prochaine version a été un électrochoc.</p>
<p>En effet, en vingts jours, il y a eu environs 130 modifications effectuées sur la version de développement.</p>
<p>Très logiquement, la majorité de ces modifications sont des corrections ou des optimisations afin de consolider le code et améliorer la fiabilité du langage.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=47168">#47168</a>,
<a href="http://bugs.php.net?id=47199">#47199</a>,
<a href="http://bugs.php.net?id=47643">#47643</a>,
<a href="http://bugs.php.net?id=50117">#50117</a>,
<a href="http://bugs.php.net?id=50579">#50579</a>,
<a href="http://bugs.php.net?id=50987">#50987</a>,
<a href="http://bugs.php.net?id=52045">#52045</a>,
<a href="http://bugs.php.net?id=52173">#52173</a>,
<a href="http://bugs.php.net?id=52410">#52410</a>,
<a href="http://bugs.php.net?id=52512">#52512</a>,
<a href="http://bugs.php.net?id=52660">#52660</a>,
<a href="http://bugs.php.net?id=52691">#52691</a>,
<a href="http://bugs.php.net?id=52692">#52692</a>,
<a href="http://bugs.php.net?id=52693">#52693</a>,
<a href="http://bugs.php.net?id=52732">#52732</a>,
<a href="http://bugs.php.net?id=52784">#52784</a>,
<a href="http://bugs.php.net?id=52820">#52820</a>,
<a href="http://bugs.php.net?id=53136">#53136</a>,
<a href="http://bugs.php.net?id=53141">#53141</a>,
<a href="http://bugs.php.net?id=53153">#53153</a>,
<a href="http://bugs.php.net?id=53226">#53226</a>,
<a href="http://bugs.php.net?id=53236">#53236</a>,
<a href="http://bugs.php.net?id=53241">#53241</a>,
<a href="http://bugs.php.net?id=53248">#53248</a>,
<a href="http://bugs.php.net?id=53260">#53260</a>,
<a href="http://bugs.php.net?id=53271">#53271</a>,
<a href="http://bugs.php.net?id=53273">#53273</a>,
<a href="http://bugs.php.net?id=53279">#53279</a>,
<a href="http://bugs.php.net?id=53284">#53284</a>,
<a href="http://bugs.php.net?id=53297">#53297</a>,
<a href="http://bugs.php.net?id=53305">#53305</a>,
<a href="http://bugs.php.net?id=53306">#53306</a>,
<a href="http://bugs.php.net?id=53310">#53310</a>,
<a href="http://bugs.php.net?id=53319">#53319</a>,
<a href="http://bugs.php.net?id=53323">#53323</a>,
<a href="http://bugs.php.net?id=53335">#53335</a>,
<a href="http://bugs.php.net?id=53338">#53338</a>,
<a href="http://bugs.php.net?id=53362">#53362</a> et
<a href="http://bugs.php.net?id=53366">#53366</a> ont été corrigés.</p>
<p>Il y a donc eu pas loin de quarante corrections au cours des vingts derniers jours.</p>
<p>Par ailleurs, les demandes de fonctionnalités <a href="http://bugs.php.net?id=53213">#53213</a>,
<a href="http://bugs.php.net?id=53238">#53238</a>,
<a href="http://bugs.php.net?id=53264">#53264</a> et
<a href="http://bugs.php.net?id=53271">#53271</a> ont été implémentées, la plus intéressante étant à mon sens le support de la méthode <code><a href="http://fr2.php.net/fputcsv">fputcsv()</a></code> par la classe <a href="http://fr2.php.net/manual/fr/class.splfileobject.php"><code>\splFileObject</code></a>.</p>
<p>Certain seront de plus intéressé d'apprendre que <code>$_SERVER['REQUEST_TIME']</code> est maintenant précis à la micro-seconde.</p>
<p><a href="http://php.net/manual/fr/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> a de plus été consolidé, via la correction de quelques problèmes plus ou moins mineurs et diverses optimisations et les <a href="http://php.net/manual/fr/ref.stream.php">flux</a> ont également subit le même traitement.</p>
<p>Le reste des modifications sont des optimisations et des corrections diverses en divers point du <a href="http://en.wikipedia.org/wiki/Zend_engine">Zend Engine</a> ou bien liées à la compilation des sources ou à suppression des boulets historiques du langage dans le cadre de la version alpha de PHP 5.4.</p>
<p>Le rythme a donc été élevé, surtout comparativement aux périodes précédentes.</p>
<p>Cependant, je pense qu'il va retomber quelques peu dans les semaines qui viennent car les développeurs vont devoir se concentrer sur les versions <a href="http://fr.wikipedia.org/wiki/Version_d%27un_logiciel#Version_admissible_ou_pre-release"><abbr title="Release Candidate">RC</abbr></a> de <a href="http://blog.mageekbox.net/?post/2010/11/18/PHP-5.2.15-RC1-et-PHP-5.3.4-RC1-sont-disponibles-au-t%C3%A9l%C3%A9chargement-%21">PHP 5.2.15 et de PHP 5.3.4</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/11/21/Mort-de-PHP6-250-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/212Mort de PHP6 + 220 joursurn:md5:0d5d928efadb9dfb8b44658742c4a0192010-10-21T23:00:00+02:002010-10-22T09:16:10+02:00mageekguyPHP Xinternals@PHP 6PHP XsqliteUnicodeZend Engine<p>Si <a href="http://blog.mageekbox.net/?post/2010/10/11/Mort-de-PHP6-210-jours">la période précédente</a> avait été relativement intéressante, il n'en est pas de même pour celle qui vient de se terminer.</p>
<p>En effet, le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient en tout ou partie la prochaine version majeure de <a href="http://www.php.net/">PHP</a>, n'a été modifié qu'une vingtaine de fois, alors qu'il avait reçu plus de 70 modifications il y a 10 jours.</p>
<p>Le ralentissement est d'ailleurs nettement visible sur <a href="http://blog.mageekbox.net/?post/2010/04/22/L-%C3%A9lectro-enc%C3%A9phalogramme-de-PHP-existe-%21">l'électroencéphalogramme</a> du langage.</p>
<p><img title="trunkPHP20101021.png, oct. 2010" style="margin: 0 auto; display: block;" alt="trunkPHP20101021.png" src="http://blog.mageekbox.net/public/svneeg.mageekbox.net.png" /></p>
<p>Et si le nombre de modifications est beaucoup moins important, l'intérêt de ces dernière l'est tout autant, puisqu'il s'agit quasiment exclusivement de corrections, de nettoyage et d'optimisation diverses.</p>
<p>Il est difficile de donner la cause de ce ralentissement, car il y a beaucoup d'explications possibles, la première étant qu'une énorme travail a déjà été réalisé et que la majorité sinon la totalité des nouvelles fonctionnalités envisagées pour la prochaine version majeure du langage sont maintenant implémenté.</p>
<p>Il ne faut donc pas à mon sens percevoir négativement ce ralentissement, mais plutôt comme un signe positif qui pourrait éventuellement laisser espérer prochainement une version alpha, d'autant que cela fait maintenant un moment que la consolidation du code est en cours.</p>
<p>Le sujet vient d'ailleurs <a href="http://news.php.net/php.internals/49943">d'être évoqué</a> sur la liste de diffusion des contributeurs, <a href="http://news.php.net/php.internals/">internals@</a>, elle-même relativement calme, puisqu'un membre de la liste a demandé si une date de diffusion avait été décidée pour cette fameuse version alpha.</p> <p>Il n'a cependant pas reçu la moindre réponse à sa demande au moment où j'écris ces lignes.</p>
<p>Et en attendant une réponse éventuelle au sujet d'un futur hypothétique, je me propose de vous parler du présent, même si je suis bien obligé d'avouer qu'il n'a rien de bien passionnant.</p>
<p>Le lot de correction de bugs est présent, comme d'habitude, mais contrairement aux périodes précédentes, il est beaucoup plus petit.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=49407">#49407</a>,
<a href="http://bugs.php.net?id=25927">#25927</a>,
<a href="http://bugs.php.net?id=52939">#52939</a>,
<a href="http://bugs.php.net?id=53070">#53070</a> et,
<a href="http://bugs.php.net?id=53089">#53089</a> ont été corrigés, tandis que le bug <a href="http://bugs.php.net?id=53006">#53006</a> est en cours de résolution.</p>
<p>Par ailleurs, la fonction <code><a href="http://fr.php.net/get_html_translation_table/">get_html_translation_table()</a></code> accepte maintenant un troisième paramètre permettant d'indiquer l'encodage devant être utilisé, comme dans le cas de <code><a href="http://fr.php.net/htmlentities">htmlentities()</a></code>.</p>
<p>Cela semble confirmer que la gestion des jeux de caractères en général et d'<a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> en particulier au sein de <a href="http://www.php.net">PHP</a> revient peu à peu au premier plan des préoccupations de certains développeurs, même si c'est par la très petite porte et qu'il s'agit de solutions très partielles qui n'ont rien à voir avec une gestion beaucoup plus globale.</p>
<p>Dans un registre différent, <a href="http://www.php.net/">PHP</a> est maintenant capable de détecter les éditions <q>Starter</q>, <q>Tablet PC</q> et <q>Media Center</q> de Windows, même si pour l'instant la version <q>Server 2008</q> n'est toujours pas reconnue correctement.</p>
<p>Le reste des modifications concerne diverses optimisations au sein du <a href="http://en.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, ainsi qu'une correction dans la classe <code><a href="http://fr2.php.net/manual/en/function.ziparchive-getarchivecomment.php">zipArchive::getArchiveComment()</a></code> et au niveau de la gestion des <a href="http://fr.php.net/stream">flux</a>.</p>
<p>Au passage, <a href="http://www.sqlite.org/">sqlite</a> a été mis à jour et <a href="http://www.php.net">PHP</a> embarque dorénavant la version <a href="http://www.sqlite.org/releaselog/3_7_3.html">3.7.3</a>.</p>
<p>La liste de diffusion des contributeurs a été également relativement calme, même si un membre de la liste a relevé un <q><a href="http://news.php.net/php.internals/49901">dysfonctionnement</a></q>, pour parler diplomatiquement, dans le processus de gestion des rapports de bugs.</p>
<p>Évidemment, aucun commentaire n'a été fait sur le dysfonctionnement signalé, et la suite de la discussion a été exclusivement réserver à l'aspect fonctionnel du problème soulevé par le rapport de bug mentionné.</p>
<p>Il y a également eu <a href="http://news.php.net/php.internals/49912">une tentative de relance</a> du débat relatif à la gestion de paramètres nommés par le langage.</p>
<p>Il s'agit d'un vieux serpent de mer qui revient régulièrement à la surface, même si les discussions à ce sujet sont considérées comme closes et qu'il a été décidé depuis 2005 que <a href="http://www.php.net/">PHP</a> <a href="http://www.php.net/%7Ederick/meeting-notes.html#named-parameters">n'implémentera jamais</a> ce type de fonctionnalité, car <a href="http://news.php.net/php.internals/49924">cela compliquerait inutilement</a> le langage.</p>
<p>Ce <q>détail</q> a d'ailleurs été signifié avec <a href="http://news.php.net/php.internals/49916">délicatesse</a> et <a href="http://news.php.net/php.internals/49923">gentillesse</a> à celui qui a relancé le débat, même si certain ont essayé de <a href="http://news.php.net/php.internals/49934"><q>tempérer</q></a> les choses en précisant que des fonctionnalités refusées maintes fois par le passé ont finalement été intégrées, comme par exemple les espaces de nommage et que les choses pouvaient, voir devaient, évoluer.</p>
<p>La rudesse de la réponse n'a cependant pas empêché qu'il soit relancé une nouvelle fois dans le cadre <a href="http://news.php.net/php.internals/49938">d'une discussion</a> visant à permettre de ne pas définir de valeur pour des arguments optionnels si cela n'est pas nécessaire, par exemple de cette façon :</p>
<blockquote><pre><code><?php<br /><br />function foo($var1, $var2 = 2, $var3 = 3)<br />{<br />echo "$var1, $var2, $var3\n";<br />}<br />foo(10,, 30);<br /><br />?></code></pre></blockquote>
<p>Cependant, cela n'est pas plus passé que la première fois, et encore une fois, <a href="http://news.php.net/php.internals/49952">toute discussion sur le sujet a été refusée</a>.</p>
<p>Enfin, <a href="http://derickrethans.nl/">Derick Rethans</a> a recommencé à travailler sur le contrôle du type des arguments, et les choses semblent aller <a href="http://news.php.net/php.internals/49925">relativement vite</a> et être conforme aux décisions prisent lors du dernier débat à ce sujet.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/10/21/Mort-de-PHP6-220-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/202Mort de PHP6 + 210 joursurn:md5:9875442d711e2f73fd1ef2accbac67e22010-10-11T15:15:00+02:002010-10-11T17:10:10+02:00mageekguyPHP X__invokecomparableICUinternals@intlPHP XtraitstransliteratorUnicodewebpZend Engine<p>Durant ces dix derniers jours, les développeurs de <a href="http://www.php.net">PHP</a> ont été particulièrement productifs.</p>
<p>En effet, il y a eu plus de 75 modifications de faites sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, et plus de 315 fichiers modifiés ou ajoutés.</p>
<p>Comme d'habitude, une grosse partie du travail effectué correspond à des corrections, du nettoyage et de l'optimisation, mais il y a également deux surprises.</p>
<p>De plus, il y a également eu des discussions intéressantes sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>La période qui vient de s'écouler a donc été plus riche que les précédentes.</p> <p>Et une fois n'est pas coutume, je ne vais pas ménager le suspense et je vais commencer par parler des surprises immédiatement.</p>
<p>La première est que le support du format d'image <a href="http://code.google.com/speed/webp/">webp</a> est déjà supporté par la version du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net/">PHP</a> via <a href="http://fr.php.net/manual/fr/book.image.php">GD</a>, grâce à <a href="http://blog.thepimp.net">Pierre Joye</a> qui en a réalisé l'intégration.</p>
<p>Pour ceux qui ne le saurait pas déjà, <a href="http://code.google.com/speed/webp/">webp</a> est un format de fichier présenté récemment par <a href="http://fr.wikipedia.org/wiki/Google">Google</a> permettant la compression d'image
avec une perte de qualité, ce qui le pose en concurrent direct du format
<a href="http://fr.wikipedia.org/wiki/JPEG"> jpeg</a>.</p>
<p>Et au passage, je souligne que <a href="http://blog.thepimp.net">Pierre</a> est un employé de <a href="http://fr.wikipedia.org/wiki/Microsoft">Microsoft</a> qui participe au développement de <a href="http://www.php.net/">PHP</a>, ce qui prouve son indépendance d'esprit.</p>
<p>La seconde surprise concerne <code><a href="http://fr.php.net/intl">intl</a></code>, l'extension d'internationalisation de <a href="http://www.php.net/">PHP</a>, qui supporte maintenant les transformations, via la classe <code>\transliterator</code>.</p>
<p>En très résumé, cette nouvelle fonctionnalité permet de <q>traduire</q> un alphabet dans un autre, et il sera donc possible à l'avenir de transformer un mot écrit en <a href="http://fr.wikipedia.org/wiki/Katakana">katakanas</a>, comme <q>キャンパス</q>, en son équivalent latin, par exemple, à savoir comme vous l'aviez bien sur deviné <q>kyanpasu</q>.</p>
<p>Attention, comme vous pouvez le constater avec l'exemple ci-dessus, il ne s'agit aucunement de traduction, et si vous en doutez encore, je vous invite à jouer avec la <a href="http://demo.icu-project.org/icu-bin/translit">démonstration technique</a> relative aux transformations de la bibliothèque <a href="http://fr.wikipedia.org/wiki/International_Components_for_Unicode"><abbr ttile="International Compontents for Unicode">ICU</abbr></a>, sur laquelle est basée <code><a href="http://fr.php.net/intl">intl</a></code>.</p>
<p><a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a> fait donc sa réapparition dans le développement du langage, même si c'est par la très petite porte et qu'il est difficile d'y voir un signe encourageant concernant une intégration plus poussée pour le moment.</p>
<p>Et je n'ai malheureusement pas encore de code <a href="http://www.php.net/">PHP</a> à vous présenter concernant ces deux nouveautés, mais j'espère pouvoir le faire rapidement.</p>
<p>Le reste des modifications effectuées sur le trunk sont pour l'essentiel des corrections.</p>
<p>Ainsi, il y a eu un gros travail d'effectuer pour supprimer des messages d'alertes qui survenaient notamment lors de la compilation d'extensions relatives à <a href="http://www.mysql.com">mysql</a>.</p>
<p>Il est également maintenant possible de compiler le langage avec la dernière version de <code><a href="http://fr.wikipedia.org/wiki/Analyse_syntaxique">bison</a></code>, ce qui n'est pas pour me déplaire.</p>
<p>Et il y a des corrections qui concerne <a href="http://www.php.net/">PHP</a> directement, avec par exemple le lot habituel de corrections de bug.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=52941">#52941</a>,
<a href="http://bugs.php.net?id=52906">#52906</a>,
<a href="http://bugs.php.net?id=52879">#52879</a>,
<a href="http://bugs.php.net?id=52940">#52940</a>,
<a href="http://bugs.php.net?id=50953">#50953</a>,
<a href="http://bugs.php.net?id=52971">#52971</a>,
<a href="http://bugs.php.net?id=50692">#50692</a>,
<a href="http://bugs.php.net?id=52773">#52773</a>,
<a href="http://bugs.php.net?id=52774">#52774</a>,
<a href="http://bugs.php.net?id=52908">#52908</a>,
<a href="http://bugs.php.net?id=51155">#51155</a>,
<a href="http://bugs.php.net?id=52981">#52981</a>,
<a href="http://bugs.php.net?id=51008">#51008</a>,
<a href="http://bugs.php.net?id=44248">#44248</a>,
<a href="http://bugs.php.net?id=50345">#50345</a>,
<a href="http://bugs.php.net?id=52686">#52686</a> et
<a href="http://bugs.php.net?id=53021">#53021</a> ont été corrigés.</p>
<p>Outre ces corrections de bugs, il y a également eu quelques optimisations, par exemple au niveau du <del>collecteur d'ordure</del> ramasse-miettes qui devrait être plus fiable ou au niveau du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> qui devrait être encore (un poil) plus rapide, car des appels inutiles à des fonctions lourdes en terme de performance ont été supprimé.</p>
<p>Le code des fonctions <code><a href="http://fr.php.net/manual/fr/function.html-entity-decode.php">html_entity_decode()</a></code> et <code><a href="http://fr.php.net/manual/fr/function.htmlspecialchars-decode.php">htmlspecialchars_decode()</a> </code>, avec à la clef, et je cite, un <q>dramatic improvements on the performance</q>.</p>
<p>Les nouvelles versions de ces fonctions semblent en effet se révéler 20 à 25 fois plus rapide que les précédentes, et de plus, elles font maintenant plus de choses puisqu'elles sont maintenant capable de gérer les entités telles que <code>&#34;</code>, <code>&apos;</code>, <code>&#0039;</code> et <code>&#x27;</code> et qu'en plus, elles sont prêtes à supporter l'<a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>.</p>
<p>La fonction dns_get_record() a également été modifiée, puisqu'elle supporte maintenant un cinquième paramètre qui permet de récupérer les données brutes renvoyées par un serveur <abbr title="Domain Name Server">DNS</abbr>.</p>
<p>Enfin, les fonctions <code><a href="http://fr.php.net/manual/fr/function.getrandmax.php">getrandmax()</a></code> et <code><a href="http://fr.php.net/manual/fr/function.mt-getrandmax.php">mt_getrandmax()</a></code> sont désormais obsolètes et remplacées par les constantes <code>PHP_RAND_MAX</code> et <code>PHP_MT_RAND_MAX</code>.</p>
<p>Et comme je l'ai indiqué en introduction, les discussions sur la liste des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, ont également été intéressantes.</p>
<p>Une nouvelle <abbr title="Request For Comments">RFC</abbr> a en effet été <a href="http://news.php.net/php.internals/49807">proposée</a>.</p>
<p>Elle présente une nouvelle interface nommée <a href="http://wiki.php.net/rfc/comparable">\comparable</a> qui a pour but de permettre au développeur de définir une méthode de trie pour ses objets en rendant obligatoire au niveau des classes qui l'implémente la définition de la méthode <code>\comparable::compareTo()</code>.</p>
<p>Cette proposition n'a pas été refusée d'emblée, mais elle est encore à l'étude car elle pose un certain nombre de problèmes, notamment sur ce qui doit se passer <a href="http://news.php.net/php.internals/49820">lorsqu'un objet est comparé à un scalaire</a>, et sur <a href="http://news.php.net/php.internals/49867">la signification du trie</a> sur des objets.</p>
<p>Par ailleurs, des développeurs du langage y voit également <a href="http://news.php.net/php.internals/49816">une surcharge des opérateurs de comparaison</a>, et ils y sont <a href="http://news.php.net/php.internals/49848">plutôt hostiles</a>.</p>
<p>Bref, comme d'habitude, ça discute sévère, dans le plus grand respect et l'amabilité la plus totale évidement, et qui plus est avec des arguments <a href="http://news.php.net/php.internals/49878">tout ce qu'il y a de pertinents</a>.</p>
<p>Ce débat a de plus généré une <a href="http://news.php.net/php.internals/49815">discussion parallèle</a> sur la pertinence d'ajouter une fonction <q>par défaut</q> à PHP permettant aux développeurs de faire des comparaisons entre variable.</p>
<p>Cette proposition a reçu un accueil plutôt favorable, même si <a href="http://news.php.net/php.internals/49839">certain</a> ne sont pas convaincu.</p>
<p>Il y a également eu un autre débat, au sujet <a href="http://news.php.net/php.internals/49840">des formats de date</a> actuellement supporté par <a href="http://news.php.net/php.internals/49840">PHP</a>, qui a donné lieu à quelques échanges <a href="http://news.php.net/php.internals/49860">d'amabilités</a>.</p>
<p>Enfin, j'ai adoré la discussion <a href="http://news.php.net/php.internals/49801">au sujet de la gestion de la méthode magique </a><code><a href="http://news.php.net/php.internals/49801">__invoke()</a></code> par le langage et son <a href="http://blog.mageekbox.net/?post/2010/08/18/PHP-manque-de-plus-en-plus-de-coh%C3%A9rence">manque de cohérence</a>, surtout la partie ou il est dit que <a href="http://news.php.net/php.internals/49827">les traits</a> ont été ajouté au langage pour résoudre ce genre de problème.</p>
<p>Bien évidement, je dit cela sans la moindre ironie...</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/10/11/Mort-de-PHP6-210-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/198Mort de PHP6 + 200 joursurn:md5:7e7f8d56318239b7905cd34d931bc1002010-09-30T11:00:00+02:002010-09-30T16:21:55+02:00mageekguyPHP Xannotationsinternals@PHP XZend Engine<p>Le menu de cette vingtième période de 10 jours est relativement riche puisqu'il y eu un peu plus d'une quarantaine de modifications sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net">PHP</a> au cours de cet intervalle.</p>
<p>Cependant, il s'agit pour l'essentielle de corrections de bugs et d'optimisations, comme depuis quelques temps maintenant.</p>
<p>Le menu est donc riche, mais peu varié, et il ne faut rien en attendre d'extraordinaire.</p>
<p>La situation est identique en ce qui concerne la liste de diffusion des développeurs du langage, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p>
<p>Après une activité très intense il y a dix jours suite aux débats <a href="http://blog.mageekbox.net/?post/2010/09/20/Mort-de-PHP6-190-jours">suscités par les annotations</a>, le calme est revenu, et même si quelques discussions intéressantes sont en cours, il n'y a rien de bien passionnant à se mettre sous la dent.</p> <p>Donc comme je l'ai déjà dis, la plupart des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> sont des consolidations.</p>
<p>Il y a tout d'abord le lot habituel de corrections de bug.</p>
<p>Les bugs <a href="http://bugs.php.net?id=52926">#52926</a> et <a href="http://bugs.php.net?id=52944">#52944</a> de l'extension <code><a href="http://fr.php.net/manual/fr/book.zlib.php">zlib</a></code>, le bug <a href="http://bugs.php.net?id=52947">#52947</a> de l'extension <code><a href="http://fr.php.net/manual/fr/book.openssl.php">openssl</a></code>, les bugs <a href="http://bugs.php.net?id=52891">#52891</a> et <a href="http://bugs.php.net?id=45921">#45921</a> de <code><a href="http://fr.php.net/manual/fr/book.mysqli.php">mysqli</a></code>, les bugs <a href="http://bugs.php.net?id=52891">#52891</a> (oui, le même, ce n'est pas une erreur) et <a href="http://bugs.php.net?id=48082">#48082</a> de <code><a href="http://fr.php.net/manual/fr/book.mysqlnd.php">mysqlnd</a></code>, les bugs <a href="http://bugs.php.net?id=52929">#52929</a> et <a href="http://bugs.php.net?id=52944">#52944</a> des <code><a href="http://fr.php.net/manual/fr/book.filter.php">filtres</a></code> ainsi que le bug <a href="http://bugs.php.net?id=52909">#52909</a> des archives <code><a href="http://fr.php.net/phar">phar</a></code> sont maintenant soit partiellement, soit totalement corrigés.</p>
<p>Je dis partiellement car le bug <a href="http://bugs.php.net/?id=52909">#52909</a> n'est en fait pas du tout corrigé, et je suis bien placé pour le savoir.</p>
<p>En effet, c'est moi qui l'ai découvert, et j'ai donc suivi son évolution de très prés.</p>
<p>Le problème est le suivant.</p>
<p>Au niveau du code source C du langage, les objets <code><a href="http://fr.php.net/manual/fr/class.Phar.php">\phar</a></code> et <code><a href="http://fr.php.net/manual/fr/class.PharData.php">\pharData</a></code> se partage le même constructeur, ce qui fait que la méthode <code><a href="http://fr.php.net/manual/fr/reflectionfunctionabstract.getparameters.php">\reflectionMethod::getParameters()</a></code> de <a href="http://www.php.net">PHP</a> ne sait pas renvoyer les arguments de <code><a href="http://fr.php.net/manual/fr/phar.construct.php">\phar::__construct()</a></code> puisqu'elle retourne la liste des arguments de <code><a href="http://fr.php.net/manual/fr/phardata.construct.php">\pharData::__construct()</a></code>.</p>
<p>En effet, <code><a href="http://fr.php.net/manual/fr/reflectionfunctionabstract.getparameters.php">\reflectionMethod::getParameters()</a></code> se base sur une structure spécifique insérés dans le code C de <a href="http://www.php.net/">PHP</a> pour fonctionner, et le cas où une même fonction C est partagée par deux fonctions <a href="http://www.php.net">PHP</a> différentes n'est pas gérable par ce système.</p>
<p>Dans un premier temps, le rapport de bug a été fermé, même si le problème était bien reconnu comme tel, car il n'était sois-disant pas possible techniquement de le résoudre.</p>
<p>
Évidemment, je n'ai pas été d'accord avec cette décision, et je suis donc allé discuté du problème sur le canal <abbr title="Internet Relay Chat">IRC</abbr> des contributeurs.
</p>
<p>Après quelques minutes de discussion, et avec l'appui de <a href="http://blog.thepimp.net">Pierre Joye</a> et de quelques autres, je suis parvenu à faire ré-ouvrir le rapport de bug.</p>
<p>Le code C concerné sera donc réécrit afin de résoudre proprement le problème.</p>
<p>Et si j'insiste sur ce point particulier, c'est que c'est la première fois que j'obtiens un tel résultat de cette manière, surtout dans le cadre d'un rapport de bug, et je dois dire que j'ai été très agréablement surpris, puisqu'il n'y a pas si longtemps, je me serais fais proprement jeter.</p>
<p>Il semblerait donc que les contributeurs soient plus ouvert à la discussion, et je ne peux que m'en féliciter et les remercier, surtout s'il ne s'agit pas d'un cas isolé, ce qui reste à confirmer.</p>
<p>Pour en revenir à notre sujet de départ, le reste des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> sont des optimisations internes au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, la résolution de problèmes rencontrés à la compilation des sources, et également des optimisations au niveau des tests unitaires afin de les rendre plus génériques et indépendants de la plate-forme sur laquelle ils sont exécutés.</p>
<p>Enfin, le fichier <a href="http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup">NEWS</a> a fait son arrivé dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.</p>
<p>Ce fichier récapitule sous une forme synthétique l'ensemble des modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> depuis la mort de PHP 6 et le moins que l'on puisse dire est que les contributeurs n'ont pas chômés.</p>
<p>Au niveau de la liste de diffusion des contributeurs <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, justement, comme je l'ai déjà indiqué précédemment, le calme est revenu après les <a href="http://blog.mageekbox.net/?post/2010/09/30/../?post/2010/09/20/Mort-de-PHP6-190-jours">débats virulents</a> qui se sont déroulés au sujet de l'implémentation des annotations.</p>
<p>Comme d'habitude dans ce genre de cas,
les discussions se sont éteintes d'elles-mêmes sans qu'aucune décision claire ne soit prise, mais je pense qu'elles reprendront dès qu'une
évolution technique sera diffusée, soit dans le sens de <a href="http://wiki.php.net/rfc/docblockparser">la notation docblock</a>, soit dans le sens de la <a href="http://wiki.php.net/rfc/annotations"><abbr title="Request For Comment">RFC</abbr> d'origine des annotations</a>.</p>
<p>Cela a d'ailleurs été le cas pour un tout autre sujet, puisqu'il <a href="http://news.php.net/php.internals/49778">concerne</a> l'utilisation de <code>{}</code> et <code>[]</code> pour accéder à un caractère d'une chaîne.</p>
<p>Au final, il semblerait que les deux notations <a href="http://news.php.net/php.internals/49800">restent possibles à l'avenir</a>, mais que le traitement de la syntaxe utilisant <code>{}</code> sera optimisé.</p>
<p>Il devrait donc toujours être possible avec la prochaine version majeure de PHP d'écrire <code>$str[42]</code> et <code>$str{42}</code>, ce qui ne manquera pas de ravir les fans de la cohérence au sein du langage, cela dit bien évidement sans la moindre ironie.</p>
<p>D'ailleurs, en parlant de cohérence, le <a href="http://news.php.net/php.internals/49801">problème</a> de la méthode magique <code><a href="http://www.php.net/manual/fr/language.oop5.magic.php#language.oop5.magic.invoke">__invoke()</a></code>, que j'ai <a href="http://blog.mageekbox.net/?post/2010/08/18/PHP-manque-de-plus-en-plus-de-coh%C3%A9rence">déjà évoqué sur ce blog</a>, a fait une apparition fugitive, et il a reçu <a href="http://news.php.net/php.internals/49802">la réponse habituelle</a>.</p>
<p>Enfin, <a href="http://news.php.net/php.internals/49773">un patch a été proposé</a> pour simplifier l'utilisation de l'extension <code><a href="http://fr2.php.net/snmp">snmp</a></code> en permettant de passer un tableau d'<a href="http://fr.wikipedia.org/wiki/OID"><abbr title="Object Identifier">OID</abbr></a> en argument des fonctions <code><a href="http://fr2.php.net/manual/fr/function.snmpget.php">snmpget()</a></code> et <a href="http://fr2.php.net/manual/fr/function.snmpgetnext.php"><code>snmpgetnext()</code></a>, et il semble en bonne voie pour être accepté.</p>
<p>Cette récapitulation est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/09/30/Mort-de-PHP6-200-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/193Mort de PHP6 + 180 joursurn:md5:1f978bcab6a75ba3392939f1e01333c52010-09-10T13:50:00+02:002010-09-10T13:50:00+02:00mageekguyPHP Xinternals@PHPPHP XPHP-FPMPHP6Rasmus LerdorfZend Engine<p>Encore une fois, dix jours viennent de s'écouler, et l'air de rien, cela fait maintenant 6 mois que <a href="http://blog.mageekbox.net/?post/2010/03/17/Repose-en-paix%2C-PHP-6">PHP 6 est décédé</a>.</p>
<p>J'avoue que, pour une fois, je n'ai pas pris le temps de suivre le développement de <a href="http://www.php.net">PHP</a> dans le détail sur cette dernière période, car je me suis concentré sur le développement d'Atoum ainsi que sur les interviews des <a href="http://blog.mageekbox.net/?post/2010/09/02/Et-apr%C3%A8s"><q>switchers</q></a> qui vont paraître prochainement, et que de plus, je dois organiser un certain nombre de choses en prévision d'un gros changement dans ma vie dans les mois qui viennent.</p>
<p>Malgré tout, j'ai tenu à faire ce billet, d'autant que l'actualité du développement de <a href="http://www.php.net/">PHP</a> n'est pas très trépidante actuellement et qu'en conséquence, il n'y a pas grand chose à dire.</p> <p>En effet, il y a eu 41 modifications d'effectuées sur le trunk sur la période qui vient de s'écouler, et il s'agit encore une fois pour l'essentiel de consolidations.</p>
<p>Tout d'abord, il y a eu le lot habituel de corrections de bugs et les bugs <a href="http://bugs.php.net?id=45357">#45357</a>,
<a href="http://bugs.php.net?id=52725">#52725</a>,
<a href="http://bugs.php.net?id=50590">#50590</a>,
<a href="http://bugs.php.net?id=52260">#52260</a>,
<a href="http://bugs.php.net?id=46723">#46723</a>,
<a href="http://bugs.php.net?id=50953">#50953</a>,
<a href="http://bugs.php.net?id=52498">#52498</a>,
<a href="http://bugs.php.net?id=50524">#50524</a>,
<a href="http://bugs.php.net?id=52323">#52323</a> et
<a href="http://bugs.php.net?id=52786">#52786</a> en ont fait les frais.</p>
<p>Ensuite, <a href="http://php.net/manual/fr/install.fpm.php"><abbr title="FastCGI Process Manager">FPM</abbr></a> a encore été optimisé, à la fois par les corrections de bugs effectuées ainsi que via des modifications spécifiques, afin de gagner encore en performance.</p>
<p>La version pour Windows de <a href="http://www.php.net/">PHP</a> a également subit des améliorations spécifiques, puisqu'elle supporte maintenant notamment <a href="http://en.wikipedia.org/wiki/Stat_%28Unix%29#lstat.28.29"><code>lstat</code></a> et qu'il est maintenant possible de compiler sans erreur <a href="http://fr2.php.net/manual/fr/book.mysqlnd.php"><code>mysqlnd</code></a> sur cette plate-forme, qui a lui même été amélioré.</p>
<p>Le ramasse-miettes, <abbr title="Also Known As">aka</abbr> <a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29">garbage collector</a>, a également été amélioré puisqu'un bug qui n'avait pas encore été identifié a été corrigé.</p>
<p>Le support de <a href="http://fr2.php.net/manual/fr/book.soap.php"><abbr title="Simple Object Access Protocol">SOAP</abbr></a> a également été <ironie><a href="http://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_encoding.c?r1=303034&r2=303033&pathrev=303034">amélioré</a></ironie> par <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> lui-même, qui a d'ailleurs fait un commentaire assez original au sujet de sa correction :</p>
<blockquote><pre>This incorrect contraction started to get on my eyes after I saw it for the<br />87th time while struggling with an annoying SOAP service.</pre>
</blockquote>
<p>Le moteur de <a href="http://www.php.net/">PHP</a><abbr title="Also Known As">, aka</abbr> <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>, a également été encore optimisé, notamment au niveau de la gestion de la mémoire.</p>
<p>L'ensemble de ces modifications a induit l'ajout, la correction ou la modification de plusieurs tests unitaires afin de prévenir toute régressions à l'avenir.</p>
<p>Il est a noté que le commentaire correspondant à la révision <a href="http://svn.php.net/viewvc?view=revision&revision=302923">302923</a> du trunk m'a fait froid dans le dos sur le moment :</p>
<blockquote><pre>PHP has changed (undefined) behaviour from 5.3.2 to 5.3.3: ->{} = , which seems to have been never an officially supported syntax and have never been a valid property name, is no longer allowed and PHP bails.</pre>
</blockquote>
<p>Il laisse en effet entendre que la syntaxe <code>->{}</code> ne sera plus supportée à l'avenir par <a href="http://www.php.net">PHP</a>.</p>
<p>Or, j'utilise personnellement cette syntaxe pour plusieurs projets, et je sais que je ne suis pas le seul.</p>
<p>Cependant, <a href="http://news.php.net/php.internals/49591">renseignement pris</a>, il ne s'agissait pas du tout de cela, puisqu'il ne fallait pas prendre la notation <code>->{}</code> au sens large, mais au sens littéral.</p>
<p>En effet, jusqu'à maintenant, le langage permettait d'écrire exactement ce qui figure dans le commentaire, à savoir -<code>>{} =</code>, ce qui n'a pas de sens et ne sera plus permis à l'avenir.</p>
<p>La syntaxe <code>->{.+} =</code> continuera donc bien à être supportée.</p>
<p>Au niveau de la liste de diffusion des contributeurs, l'activité n'a pas été énorme, et je n'ai donc pas de scoop à vous faire partager.</p>
<p>La discussion au sujet des <a href="http://wiki.php.net/rfc/annotations">annotations</a> continue tranquillement et semble <a href="http://news.php.net/php.internals/49589">constructive</a>.</p>
<p>Personnellement, je ne suis toujours pas fan de la syntaxe retenue ni de la mise en œuvre, mais apparemment, la solution technique proposée semble tenir la route.</p>
<p>Le débat autour du contrôle du type des arguments est également toujours en cours, mais cette fois dans une ambiance apaisée et des <a href="http://news.php.net/php.internals/49573">compromis</a> semblent devenu acceptables entre ceux qui veulent un contrôle strict et ceux qui réclame un contrôle correspondant à l'esprit de <a href="http://www.php.net/">PHP</a> au niveau de la gestion des types.</p>
<p>Il faut également noter une <a href="http://news.php.net/php.internals/49555">initiative intéressante</a> de <a href="http://blog.thepimp.net/">Pierre Joye</a> qui a créé un fichier dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> qui décrit les modifications importantes subit par le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/09/09/Mort-de-PHP6-180-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/184Mort de PHP6 + 170 joursurn:md5:16343736e7f2fa276fb874c1311564a72010-08-30T22:00:00+02:002010-08-30T22:00:00+02:00mageekguyPHP Xannotationinternals@PHP XPHP6threadingtrunkZend Engine<p>C'est à nouveau une trentaine de modifications effectuées sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net/">PHP</a> au cours des dix derniers jours.</p>
<p>Et à nouveau, il n'y a pas grand choses à se mettre sous la dent en terme de nouvelles fonctionnalités.</p>
<p>Il s'agit en effet encore une fois de corrections et d'optimisations visant à rendre le langage plus efficace et robuste.</p>
<p>Pour autant, les contributeurs sont encore capables d'innover, puisque plusieurs nouveautés ont été proposées sur leur liste de diffusion.</p> <p>Cependant, avant de rentrer dans le détail de ces propositions, je vais, comme d'habitude, vous présenter les principales modifications subies par le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> au cours de la période qui vient de s'écouler.</p>
<p>Tout d'abord, les bugs <a href="http://bugs.php.net?id=52609">#52609</a>,
<a href="http://bugs.php.net?id=52654">#52654</a>,
<a href="http://bugs.php.net?id=52407">#52407</a>,
<a href="http://bugs.php.net?id=52655">#52655</a>,
<a href="http://bugs.php.net?id=52655">#52655</a>,
<a href="http://bugs.php.net?id=52674">#52674</a>,
<a href="http://bugs.php.net?id=52681">#52681</a>,
<a href="http://bugs.php.net?id=52614">#52614</a> et
<a href="http://bugs.php.net?id=52699">#52699</a> ont été corrigés.</p>
<p>De plus, le comportement de la fonction <code>array_combine()</code> a été modifié, conformément à la demande <a href="http://bugs.php.net/?id=34857">#34857</a>.</p>
<p>Cette dernière renverra donc dorénavant avec la prochaine version majeure du langage un tableau vide lorsqu'elle recevra deux tableaux vides en argument, au lieu de renvoyer le booléen <code>false</code> et de générer une erreur de type <code>E_WARNING</code>.</p>
<p>Le reste des modifications concerne notamment le module <a href="http://fr.php.net/manual/en/install.fpm.php">FastCGI</a>, <abbr title="Also Known As">aka</abbr> <abbr title="FastCGI Process Manager">FPM</abbr>, qui a été quelque peu optimisé et qui supporte maintenant les fonctions <code><a href="http://fr.php.net/manual/en/function.apache-child-terminate.php">apache_child_terminate()</a></code>, <code><a href="http://fr.php.net/manual/en/function.getallheaders.php">getallheaders()</a></code>, <code><a href="http://fr.php.net/manual/en/function.apache-request-headers.php">apache_request_headers()</a></code> et <code><a href="http://fr.php.net/manual/en/function.apache-response-headers.php">apache_response_headers()</a></code>.</p>
<p>Et bien évidement, il y a eu le lot habituel de corrections visant à nettoyer le code et à faciliter la compilation.</p>
<p>C'est donc clairement sur la liste des contributeurs, <a href="http://news.php.net/php.internals">internals@</a>, qu'il faut aller chercher les informations <q>croustillantes</q>.</p>
<p>Et il y en a eu, mais pas forcément croustillante dans le bon sens du terme.</p>
<p>Tout d'abord, il y a eu un <a href="http://news.php.net/php.internals/49447">énorme débat</a> autour des contrôles effectués par <a href="http://www.php.net">PHP</a> lors d'un héritage de classe.</p>
<p>En effet, ce dernier, conformément au <a href="http://fr.wikipedia.org/wiki/Principe_de_substitution_de_Liskov">principe de substitution de
Liskov</a>, refuse, si le niveau d'erreur <code>E_STRICT</code> est activé, qu'une méthode d'une classe fille surchargeant une méthode d'une classe parente dispose d'un nombre d'arguments inférieur.</p>
<p>Dans ce cas de figure, le langage génère alors une erreur <code>E_STRICT</code>, ce qui ne semblait pas du goût de tout le monde.</p>
<p>Il y a donc eu une discussion assez longue sur le sujet expliquant ce fameux principe et finalement, il semble que la situation soit maintenant claire et acceptée.</p>
<p>Il y a également eu une proposition visant à ajouter deux constantes à <a href="http://www.php.net/">PHP</a>, <code><a href="http://news.php.net/php.internals/49488">E_NONE</a></code> et <a href="http://news.php.net/php.internals/49488"><code>E_EVERYTHING</code></a>.</p>
<p><code>E_NONE</code>, comme son nom l'indique, a pour but de désactiver complètement la gestion des erreurs, et correspondrait donc à error_reporting(0).</p>
<p><code>E_EVERYTHING</code> permettrait quand à elle l'activation de la gestion d'erreur à son niveau le plus élevé.</p>
<p>Autant le dire immédiatement, cette proposition n'a pas suscité un débat très intéressant.</p>
<p>En effet, si quelques réponses ont été <a href="http://news.php.net/php.internals/49489">intéressantes</a>, comme celle visant a ajouter en plus <code>E_DEVELPEMENT</code> et <code>E_PRODUCTION</code>, à la manière de ce que fait Apache, la plupart ont été pour le moins ironiques, puisque certain ont proposé <code><a href="http://news.php.net/php.internals/49537">E_ALL_AND_I_REALLY_REALLY_REALLY_DO_MEAN_ALL</a></code> et <a href="http://news.php.net/php.internals/49544"><code>E_CHUCK_NORRIS</code></a>.</p>
<p>En conséquence, il y a peu de chances de voir arriver ces constantes dans la prochaine version du langage, du moins pour le moment.</p>
<p>Enfin, il y a également un débat autour des annotations, suite à la proposition d'une solution technique par <a href="http://ca.linkedin.com/in/pierrickcharron">Pierrick Charron</a> faisant suite à la <a href="http://wiki.php.net/rfc/annotations">RFC correspondante</a>.</p>
<p>Pour simplifier, les <a href="http://fr.wikipedia.org/wiki/Annotation_%28Java%29">annotations</a> sont des méta-données, qui peuvent être utiliser afin de documenter ou manipuler le code.</p>
<p>La prochaine version majeure de <a href="http://www.php.net/">PHP</a> est donc susceptible de les supporter, de la manière suivante :</p>
<blockquote><pre><code><?php<br /><br />class TODO extends ReflectionAnnotation<br />{<br /> const SEVERITY_CRITICAL = 1;<br /> const SEVERITY_IMPORTANT = 2;<br /> const SEVERITY_TRIVIAL = 3;<br /> public $value;<br /> public $severity = self::SEVERITY_IMPORTANT;<br />}<br /><br />[TODO("I need to implement this class", severity=CustomAnnotation::SEVERITY_CRITICAL)]<br />class Test {}<br /><br />[TODO("Review this one")]<br />class Test2 {}<br /><br />?><br /></code></pre></blockquote>
<p>Il est ensuite possible de récupérer les informations véhiculées par les annotations à l'aide des classes de <a href="http://fr.php.net/manual/fr/book.reflection.php">reflexion</a> :</p>
<blockquote><pre><code><?php<br /><br />$class = new reflectionClass('Test');<br />var_dump($class->getAnnotations());<br />/*<br />array(2) {<br /> ["TODO"]=><br /> object(TODO)#%d (1) {<br /> ["value"]=>"I need to implement this class"},<br /> ["severity" => 1<br /> }<br />}*/<br /><br />?><br /></code></pre></blockquote>
<p>Les contributeurs sont donc en train d'étudier cette solution afin de la valider et les choses semblent avancer rapidement.</p>
<p>En effet, il y a bien quelques remarques, notamment sur le fait de recourir à un objet pour définir les annotations, mais rien de bien sérieux, et de plus, cette solution ne pose aucun problème de compatibilité avec l'existant.</p>
<p>Pour terminer, il y a eu également <a href="http://news.php.net/php.internals/49486">un message courageux</a> signalant que le portage du <a href="http://fr.wikipedia.org/wiki/Thread_%28informatique%29">threading</a> sous <a href="http://fr.wikipedia.org/wiki/Windows">Windows</a> au sein de <a href="http://www.php.net">PHP</a> avait été réalisé, pour faire suite à son implémentation sous <a href="http://fr.wikipedia.org/wiki/UNIX">UNIX</a>.</p>
<p>Cependant, ce message n'a suscité aucune réaction au niveau des contributeurs.</p>
<p>Il faut dire que <del>Dieu</del> <a href="http://fr.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> clame haut et fort depuis des années que le <a href="http://fr.wikipedia.org/wiki/Thread_%28informatique%29">threading</a> ne présente <a href="http://news.php.net/php.internals/48727">aucun intérêt</a> au niveau de <a href="http://www.php.net/">PHP</a>, et que la communauté des contributeurs soutient mordicus que c'est impossible à réaliser techniquement au niveau du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>...</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/08/30/Mort-de-PHP6-170-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/178Mort de PHP6 + 110 joursurn:md5:45a21a2b827bc79d26ef578437a849ad2010-06-30T07:00:00+02:002010-06-30T07:00:00+02:00mageekguyPHP Xforum PHP 2010internals@PHP XPHP6RCtrunkZend Engine<p>Est-ce la période de l'année qui veut cela ?</p>
<p>Est-ce parce que le plus gros du travail a été fait ?</p>
<p>Est-ce parce que les <a href="http://blog.mageekbox.net/?post/2010/06/24/RC-pour-PHP-5.2-et-5.3">deux prochaines versions de PHP 5.2 et PHP 5.3</a> sont <abbr titlte="Release Candidate">RC</abbr> actuellement ?</p>
<p>Il y a plusieurs explications possibles au fait que le rythme d'évolution du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net">PHP</a> s'est considérablement ralenti sur les vingts derniers jours.</p>
<p>C'est très nettement visible sur l'electro-encéphalogramme de <a href="http://www.php.net">PHP</a>, réalisé à l'aide de <code><a href="http://blog.mageekbox.net/?post/2010/04/22/L-%C3%A9lectro-enc%C3%A9phalogramme-de-PHP-existe-%21">svneeg</a></code> :</p>
<p><img title="trunkPHP20100630.png, juin 2010" style="margin: 0 auto; display: block;" alt="" src="http://blog.mageekbox.net/public/trunkPHP20100630.png" /></p>
<p>Au total, les dix derniers jours n'ont vu passé qu'une petite trentaine de modifications.</p> <p>Et pour la plupart, il ne s'agit que de corrections de bugs et d'optimisation et de nettoyage du code.</p>
<p>Ainsi, les bugs <a href="http://bugs.php.net?id=52134">#52134</a>,
<a href="http://bugs.php.net?id=52137">#52137</a>,
<a href="http://bugs.php.net?id=47588">#47588</a>,
<a href="http://bugs.php.net?id=52162">#52162</a>,
<a href="http://bugs.php.net?id=52138">#52138</a>,
<a href="http://bugs.php.net?id=52186">#52186</a>,
<a href="http://bugs.php.net?id=52183">#52183</a>,
<a href="http://bugs.php.net?id=52193">#52193</a>,
<a href="http://bugs.php.net?id=52160">#52160</a>,
<a href="http://bugs.php.net?id=51421">#51421</a>,
<a href="http://bugs.php.net?id=48930">#48930</a> et
<a href="http://bugs.php.net?id=49276">#49276</a> ont été corrigés.</p>
<p>Parmi les changements quelque peu significatifs, l'intégration de <a href="http://www.sqlite.org/">sqlite</a> dans sa version 3 est maintenant effective.</p>
<p>De même, le code source de l'extension <a href="http://fr.php.net/manual/fr/book.oci8.php">OCI8</a> a été préparé pour supporter <a href="http://www.oracle.com/technology/tech/oci/htdocs/oci_faq.html#A2326"><abbr title="Oracle Call Interface">OCI</abbr></a> dans sa version 1.4.2.</p>
<p>Au final donc, rien de bien croustillant à se mettre sous la dent, d'autant que la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, a été calme également.</p>
<p>Il y a bien eu le <a href="http://news.php.net/php.internals/48840">commencement d'un débat</a> concernant l'utilisation de <a href="http://www.opengroup.org/onlinepubs/009695399/functions/lstat.html"><code>lstat</code></a> dans le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> et son impact sur les performances de PHP, mais il n'aura été finalement qu'un <a href="http://news.php.net/php.internals/48952">pétard mouillé</a>.</p>
<p>Pour rappel, le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> utilise massivement cette fonction, pratiquement à chaque fois qu'un fichier est manipulé.</p>
<p>Or, il s'agit d'un appel système très gourmand en ressource, et si votre code inclus et/ou manipule un grand nombre de fichiers, vous pouvez constater une dégradation importante des performances.</p>
<p>C'est pourquoi <a href="http://www.php.net/">PHP</a> dispose d'un système de cache qui permet de limiter l'utilisation de <a href="http://www.opengroup.org/onlinepubs/009695399/functions/lstat.html"><code>lstat</code></a>.</p>
<p>Cependant, la taille par défaut de ce cache est sous-dimensionné, et il est donc parfois nécessaire de la modifier dans votre <a href="http://php.net/manual/fr/ini.core.php">fichier de configuration de PHP</a> à l'aide de la directive <code>realpath_cache_size</code>, disponible depuis PHP 5.1, afin d'obtenir <a href="http://tag1consulting.com/blog/nfs-drupal-and-realpath-cache">des performances optimales</a>.</p>
<p>Et si cela n'est pas suffisant, des outils tel qu'<a href="http://php.net/manual/fr/book.apc.php">APC</a> dispose d'un mécanisme encore plus puissant afin de faire sauter ce goulot d'étranglement.</p>
<p>En parlant d'<a href="http://php.net/manual/fr/book.apc.php">APC</a> justement, il est toujours question de l'intégrer dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> de <a href="http://www.php.net/">PHP</a>, mais pour l'instant, la décision n'a pas été prise.</p>
<p>Les <a href="http://news.php.net/php.internals/48970">derniers échanges</a> sur le sujet indiquait qu'<a href="http://php.net/manual/fr/book.apc.php">APC</a> est actuellement en train d'évoluer et qu'en conséquence, il représente une inconnue trop importante pour le moment pour pouvoir être intégré.</p>
<p>Le développement de <a href="http://www.php.net/">PHP</a> semble donc être dans une phase de stabilisation.</p>
<p>Il y a bien encore des discussions en cours, mais dans les faits, le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> n'évolue plus de manière significative depuis une vingtaine de jours.</p>
<p>Je vais donc prendre un risque en sortant pour une fois de la réserve que je m'impose en ce qui concerne ce type de billet, puisque je vais me lancer dans une prédiction.</p>
<p>Au vu du travail qui a été déjà accomplit au cours des <a href="http://blog.mageekbox.net/?post/2010/05/15/Mort-de-PHP6-60-jours">110</a> <a href="http://blog.mageekbox.net/?post/2010/05/25/Mort-de-PHP6-70-jours">et</a> <a href="http://blog.mageekbox.net/?post/2010/06/03/Mort-de-PHP6-80-jours">quelques</a> <a href="http://blog.mageekbox.net/?post/2010/06/11/Mort-de-PHP6-90-jours">jours</a> <a href="http://blog.mageekbox.net/?post/2010/06/21/Mort-de-PHP6-100-jours">précédents</a>, et du rythme actuel du développement, je pense qu'il est raisonnable de penser qu'une version <abbr title="Release Candidate">RC</abbr> du langage soit rendue publique début novembre, pourquoi pas au moment du <a href="http://www.afup.org/pages/forumphp2010/">prochain forum PHP</a> organisé par l'<a href="http://www.afup.org">AFUP</a>, et je pencherais pour une sortie de la version finale début janvier.</p>
<p>Évidement, je n'ai aucune information officielle, ni même officieuse, pour étayer cette <q>intuition</q>, <a href="http://news.php.net/php.internals/48974">bien au contraire</a>, et personnellement, au vu du passé du langage, je ne parierais pas un centime dessus, mais... tout de même, elle me semble raisonnable.</p>
<p>Et puis, elle ferait un si beau cadeau de noël et cela tomberais si bien pour ma conférence <q><a href="http://blog.mageekbox.net/?post/2010/06/15/Merci-twitter-%21">PHP : Retour vers le futur !</a></q> que j'ai proposé pour le <a href="http://www.afup.org/pages/forumphp2010/">forum PHP 2010</a> !</p>http://blog.mageekbox.net/?post/2010/06/30/Mort-de-PHP6-110-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/150Mort de PHP6 + 30 joursurn:md5:82fa76f857439907063f6f08c89b3db62010-04-15T08:00:00+02:002011-02-25T16:39:22+01:00mageekguyPHP Xclosureinternals@PHP XPHP6RFCZend Engine<p>Elle est vivante.</p>
<p>Tel <a href="http://blog.mageekbox.net/?post/2010/04/10/">le monstre de Frankenstein</a>, la prochaine version majeure de <a href="http://blog.mageekbox.net/?post/2010/04/10/http;//www.php.net">PHP</a> est vivante.</p>
<p>Mais pourquoi cette référence à <a href="http://blog.mageekbox.net/?post/2010/04/10/../">Frankenstein</a> ?</p>
<p>Parce que, comme <a href="http://fr.wikipedia.org/wiki/Victor_Frankenstein" title="Victor Frankenstein">Victor Frankenstein</a>,
le PHP Group prend des morceaux de ce qui devait être PHP 6 et la
prochaine version de la branche 5.x pour créer la version suivante du
langage, qui, tout comme le monstre du roman, n'a pas (encore) de nom.</p> <p>Cependant, ce n'est pas parce qu'il y a de la vie que tout va bien.</p>
<p>Le pouls est encore faible, les choses avancent lentement et tout n'est pas encore clair au sein du groupe des développeurs de <a href="http://blog.mageekbox.net/?post/2010/04/10/http;//www.php.net">PHP</a>, et cela même si de <a href="http://news.php.net/php.internals/47806">bonnes</a> <a href="http://news.php.net/php.internals/47688">âmes</a> proposent leur aide et <a href="http://blog.mageekbox.net/?post/2010/04/07/Vous-souhaitez-participer-ou-vous-participez-d%C3%A9j%C3%A0-au-d%C3%A9veloppement-de-PHP">qu'un appel a été lancé</a> pour documenter le fonctionnement et le développement du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p>Les choses se mettent tout de même en place, puisqu'un nettoyage de la documentation de feu PHP6 a débuté.</p>
<p>Les fonctionnalités qui sont déjà intégrées au langage via la branche 5.3 en sont supprimées, et peut être que d'autres viendront s'ajouter dans les <del>années mois</del> jours qui viennent, une fois que les diverses <a href="http://wiki.php.net/rfc"><abbr title="Request For Comment">RFC</abbr></a> auront été commentées et approuvées.</p>
<p>La liste des fonctionnalités actuellement supportées par PHP pour des raisons de compatibilité avec les versions antérieures est également <a href="http://news.php.net/php.internals/47839">en cours d'actualisation</a>.</p>
<p>Ainsi, il est pratiquement certain que le support des directives suivantes sera abandonné, et personnellement je ne pleurerais pas dessus.</p>
<ul><li><code>safe_mode</code></li>
<li><code>register_globals</code></li>
<li><code>register_long_arrays</code></li>
<li><code>magic_quotes_*</code></li>
<li><code>allow_call_time_pass_reference</code></li>
<li><code>sql_safe_mode</code></li>
</ul>
<p>L'abandon de la directive <code>register_globals</code> cause des dommages collatéraux puisque le support des fonctions <code>session_register()</code>, <code>session_is_registered()</code>, <code>session_register()</code> ne feront plus parties du langage à l'avenir, puisqu'elles dépendent de cette directive.</p>
<p>Par ailleurs, les balises d'ouverture et de fermeture de script à la sauce <code>asp</code>
sont également sur le départ, même s'il y a des discussion à leur sujet
car certain pensent qu'elles sont très utilisées et que cela pourrait
être pénalisant de ne plus les supporter.</p>
<p>il en va de même pour la fonction <code><a href="http://fr2.php.net/dl">dl()</a></code> qui pourrait totalement disparaître, et pour le coup, je n'étais déjà pas d'accord lorsqu'elle a disparu des <a href="http://php.net/manual/en/function.php-sapi-name.php"><code><abbr title="Server API">SAPI</abbr></code></a> autre que <code><abbr title="Command Line Interface">CLI</abbr></code>, et donc je ne suis toujours pas d'accord avec cette décision.</p>
<p>Le support de <code>Freetype</code> et de <code>GD</code> dans sa première version sera également abandonnée.</p>
<p>Évidement, si vous désirez plus de détails, vous pouvez vous référer à <a href="http://wiki.php.net/rfc/removal-of-deprecated-features">la <abbr title="Request for Comments">RFC</abbr></a> dédiée à ce sujet.</p>
<p>Si ce qui précéde est encore en cours de discussion, il y a des choses dont la suppression est acquise.</p>
<p>Ainsi, la directive <code>y2k_compliance</code>, qui n'a plus lieu d'être en 2010 et sera donc activée par défaut à la compilation.</p>
<p>
Dans un autre registre, la modification qui ne laisse que <code>__construct()</code> comme constructeur valide <a href="http://svn.php.net/viewvc?view=revision&sortby=date&revision=297482">a été commitée</a> dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>.
</p>
<p>Autre modification faite sur le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, la constante <a href="http://fr.php.net/manual/en/function.php-uname.php">PHP_OS</a> retournera dorénavant la valeur <code>WINNT</code> lorsque <a href="http://www.php.net">PHP</a> sera compilé sous Windows et la nouvelle version de <a href="http://wiki.php.net/rfc/fpm">FPM</a> a également était ajoutée.</p>
<p>Par ailleurs, <a href="http://news.php.net/php.internals/46066">certain</a>, dont <a href="http://news.php.net/php.internals/47833">moi</a>, se sont également inquiété de savoir si la future version améliorera le support des closures, qui souffre de certaines limitations dommageable, pour le moins.</p>
<p>Apparemment, il y a une discussion à leur sujet autour de la <a href="http://wiki.php.net/rfc/closures/object-extension"><abbr title="Request for Comments">RFC</abbr> correspondante</a>, mais je n'ai pas pour le moment réussi à avoir d'informations plus précises.</p>
<p>De plus, une implémentation du <a href="http://fr.wikipedia.org/wiki/Multithreading">multithreading</a> <a href="http://news.php.net/php.internals/47786">a été réalisée et présentée</a>, mais pour l'instant, il n'y a malheureusement pas eu de retour au sujet d'une éventuelle intégration.</p>
<p>Et pour ceux qui se posent encore la question, les discussions à propos d'un support éventuel d'Unicode n'ont toujours pas débutées, même si <a href="http://news.php.net/php.internals/47854">une tentative de formalisation et d'état des lieux</a> est en cours.</p>http://blog.mageekbox.net/?post/2010/04/10/Mort-de-PHP6-30-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/109Facebook fork PHP !urn:md5:6b1c087b8830415238c46cc7db40a3c32010-04-01T00:01:00+02:002010-06-09T18:32:04+02:00mageekguyPHP XFacebookHipHopPHPZend Engine<p>Il y a peu, <a href="http://www.facebook.com/">Facebook</a> avait montré tout l'intérêt qu'il portait à <a href="http://www.php.net/">PHP</a> en dévoilant <a href="http://developers.facebook.com/news.php?story=358&blog=1Y">HipHop</a>, un transformateur de code <a href="http://www.php.net/">PHP</a> en code <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a> compilable.</p>
<p>Développé en deux ans par une équipe interne à <a href="http://www.facebook.com/">Facebook</a>, <a href="http://developers.facebook.com/news.php?story=358&blog=1Y">HipHop</a> a pour but de transformer un script <a href="http://www.php.net">PHP</a> en code binaire exécutable en le convertissant tout d'abord en code source <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a> puis en compilant ensuite le code obtenu à l'aide de <code><a href="http://fr.wikipedia.org/wiki/GNU_Compiler_Collection">gcc</a></code>.</p>
<p>L'éxécutable obtenu étant beaucoup plus efficace en terme de ressources techniques que son équivalent écrit en <a href="http://www.php.net/">PHP</a>, <a href="http://developers.facebook.com/news.php?story=358&blog=1Y">HipHop</a> permet donc d'augmenter de manière très significative les performances d'un serveur http tout en conservant le code existant et les avantages de <a href="http://www.php.net/">PHP</a> par rapport au <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a>, à savoir sa syntaxe claire et sa facilité de développement.</p>
<p>Mais pourquoi est ce que je vous parle de <a href="http://developers.facebook.com/news.php?story=358&blog=1Y">HipHop</a> ? Et bien car lors du développement de <a href="http://developers.facebook.com/news.php?story=358&blog=1Y">HipHop</a>, ses développeurs ont découvert en analysant le code du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> qu'ils pouvaient très fortement améliorer les performances de ce dernier à l'aide d'un code plus optimisé et d'algorithmes plus efficaces.</p>
<p>C'est le résultat de ce travail d'optimisation et d'amélioration que <a href="http://www.facebook.com/">Facebook</a> va diffuser dans quelques jours.</p> <p>Ce concurrent direct du <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> porte le nom de PHP++, car il est écrit en grande partie en <a href="http://fr.wikipedia.org/wiki/C%2B%2B">C++</a>. </p>
<p>Il est, au vu des différents tests que j'ai pu effectuer, de 30 à 50% plus efficace que celui mis au point par <a href="http://www.zend.com">Zend</a> et qui propulse la plupart des sites mettant en œuvre <a href="http://www.php.net/">PHP</a> aujourd'hui, sans parler de son empreinte mémoire qui n'est tout simplement pas comparable à mon sens.</p>
<blockquote><pre><code>fch@diablo: time /usr/local/bin/php phpunit.php AssertTest<br />PHPUnit by Sebastian Bergmann.<br />............................................................ 60 / 289<br />............................................................ 120 / 289<br />............................................................ 180 / 289<br />............................................................ 240 / 289<br />.................................................<br />Time: 1 second, Memory: 4.75Mb<br />OK (289 tests, 807 assertions)<br />1.11s user 0.07s system 99% cpu 1.181 total<br /><br />fch@diablo: time /usr/local/bin/php++ phpunit.php AssertTest<br />PHPUnit by Sebastian Bergmann.<br />............................................................ 60 / 289<br />............................................................ 120 / 289<br />............................................................ 180 / 289<br />............................................................ 240 / 289<br />.................................................<br />Time: 0.6 second, Memory: 1.80Mb<br />OK (289 tests, 807 assertions)<br />0.6s user 0.03s system 99% cpu 0.64 total<br /></code></pre></blockquote>
<p>C'est l'arrêt du développement de <a href="http://svn.php.net/viewvc/php/php-src/trunk/">la branche PHP6</a> annoncé il y a maintenant plus de deux semaines qui a motivé <a href="http://www.facebook.com">Facebook</a> pour dévoiler ce <a href="http://fr.wikipedia.org/wiki/Fork#Embranchement_d.27un_projet_informatique">fork</a>, car c'est bien de cela qu'il s'agit, puisque les développeurs à l'origine de PHP++ sont partis de <a href="http://svn.php.net/viewvc/php/php-src/trunk/">cette branche</a> pour débuter leur développement.</p>
<p><a href="http://www.facebook.com/">Facebook</a> espère en effet que ce sera PHP++ qui servira de support pour les prochaines versions du langage, et non le <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a>.</p>
<p><a href="http://www.facebook.com">Facebook</a> justifie de plus sa décision par le fait que le développement de la prochaine version de <a href="http://www.php.net">PHP</a> ne s'annonce pas sous les meilleurs auspices au vu <a href="http://blog.mageekbox.net/?post/2010/03/25/Mort-de-PHP6-10-jours">des discussions</a> qui ont lieu actuellement à ce sujet et par le fait qu'ils attendent énormément du langage, qu'ils ont besoin d'avancer très rapidement dans leur développement et que pour cela ils ont besoin de fonctionnalités telle que les <a href="http://news.php.net/php.internals/47556"><code>traits</code></a> dans les meilleurs délais, ainsi qu'évidement de bien meilleures performances que celle offerte par le moteur actuel.</p>
<p>La communauté <a href="http://www.php.net/">PHP</a> va donc devoir choisir dans les jours ou mois qui viennent non seulement les prochaines fonctionnalités du langage mais également le moteur qui le propulsera.</p>
<p>Cependant, au vu des performances annoncées et de la compatibilité de PHP++ avec l'existant, proche des 100%, avancée par son équipe de développement, le choix ne devrait pas être trop difficile.</p>
<p>En effet, seules quelques extensions, telle qu'<a href="http://pecl.php.net/package/APC"><abbr title="Alternative PHP Cache">APC</abbr></a>, dont le fonctionnement dépend étroitement du moteur de <a href="http://www.zend.com">Zend</a>, ne sont pas compatibles avec PHP++.</p>
<p>Cependant, ce dernier semble être tellement efficace que je doute de l'intérêt d'<a href="http://pecl.php.net/package/APC"><abbr title="Alternative PHP Cache">APC</abbr></a> dans le cadre d'un site propulsé par la dernière création de <a href="http://www.facebook.com">Facebook</a>.</p>
<p><a href="http://blog.mageekbox.net/?post/2010/03/30/../public/php__.jpg"><img title="Logo de PHP++" style="margin: 0 auto; display: block;" alt="" src="http://blog.mageekbox.net/?post/2010/03/30/../public/php__.jpg" /></a></p>
<p>De plus, cerise sur le gâteau, PHP++ supporte <a href="http://fr.wikipedia.org/wiki/Unicode">Unicode</a>, mais ce n'est pas la seule fonctionnalité qu'il offre en plus par rapport au <a href="http://fr.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> tel que nous le connaissons actuellement.</p>
<p>PHP++ inclus en effet la plupart, sinon la totalité, des corrections et des fonctionnalités qui devaient être intégrées à <a href="http://svn.php.net/viewvc/php/php-src/trunk/">PHP6</a> et qui attendent d'être intégrées dans la version 5 depuis fort longtemps, ainsi que quelques autres loin dêtre inintéressantes, tel que le <code><a href="http://fr.wikipedia.org/wiki/Thread_%28informatique%29">threading</a></code>.</p>
<p>Je prédis donc un succès énorme à PHP++, d'autant que <a href="http://www.facebook.com">Facebook</a> a annoncé vouloir profiter des fonctionnalités de son réseau social pour fédérer très rapidement une communauté de développeurs motivés très active et efficace grâce aux outils qu'ils auront à leur disposition pour gérer au mieux le développement et le suivi du projet.</p>
<p>La liste exhaustive des fonctionnalités de PHP++ ainsi que d'autres informations à son sujet et sur sa communauté en cours de construction sont disponibles sur <a href="http://www.facebook.com/pages/PHP/113168612028244">la page facebook qui lui est dédiée</a>.</p>http://blog.mageekbox.net/?post/2010/03/30/Facebook-fork-PHP-%21#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/102