mageekblog - Mot-clé - multibyteLe 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:26874ca5b8cd4cac8d08b0e68e64f63aDotclearMort de PHP6 + 260 joursurn:md5:87949630356593ae0f81f65ceb75c8e82010-12-01T08:30:00+01:002010-12-01T10:36:54+01:00mageekguyPHP XGitmultibytePHP XPierre JoyeRFCUnicode<p>Le développement de <a href="http://www.php.net">PHP</a> vit depuis <a href="http://blog.mageekbox.net/?post/2010/11/21/Mort-de-PHP6-250-jours">la dernière rétrospective</a> une période mouvementée.</p>
<p>En effet, il y a actuellement <a href="http://blog.mageekbox.net/?post/2010/11/18/PHP-5.2.15-RC1-et-PHP-5.3.4-RC1-sont-disponibles-au-t%C3%A9l%C3%A9chargement-%21">deux nouvelles versions du langage en préparation</a>, et une troisième, qui correspond à la version de développement et devrait en théorie s'appeler PHP 5.4, est en cours de préparation.</p>
<p>De plus, il souffle sur la liste de diffusion des contributeurs, <a href="http://news.php.net/group.php?group=php.internals">internals@</a>, comme un léger vent de révolution.</p>
<p>En effet, si vous ne le saviez pas encore, en caricaturant quelque peu, il y a actuellement trois camps au sein de la communauté des contributeurs au langage, qui se livre quasiment quotidiennement un combat acharné pour parvenir à leurs fins.</p>
<p>L'un, que j'appellerai le camp traditionaliste, fait tout pour que le développement de PHP se poursuive de la même façon que depuis toujours, à savoir avec peu, voir aucun, formalisme, un pragmatisme forcené qui frise parfois le ridicule, une mauvaise fois récurrente et un nombrilisme relativement prononcé qui lui fait perdre de vue, voir même totalement ignorer, les désirs des utilisateurs.</p>
<p>L'autre, que j'appelais le camp progressiste, fait au contraire tout ce qu'il peut pour faire évoluer le développement du langage vers plus de formalisme tout en l'ouvrant plus largement vers les utilisateurs, en écoutant ce qui vient de l'extérieur en essayant d'en tirer le meilleur.</p>
<p>Et entre les deux, il y a les éternels indécis qui font parti de ce que j'appellerais le camp centriste et dont l'opinion varie au grès des courants et des pressions appliquées par l'un ou l'autre camp.</p>
<p>Et depuis quelques jours, le camp progressiste a lancé une grande offensive sur plusieurs points, en proposant plusieurs <abbr title="Request For Comments">RFC</abbr> qui vont pour la plupart à l'encontre des idées du camp traditionaliste.</p>
<p>En conséquence, si le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a>, qui contient la version en cours de développement de <a href="http://www.php.net/">PHP</a>, a évolué et que quelques modifications significatives ont été effectuées ces dix derniers jours, les choses les plus intéressantes se sont produites sur <a href="http://news.php.net/group.php?group=php.internals">internals@</a>.</p> <p>Et pour ménager un peu le suspense, je vais donc commencer par vous parler très logiquement des modifications faites sur <a href="http://svn.php.net/viewvc/php/php-src/trunk/">la version de développement</a>, et que l'on pourra appelé peut être dans quelques mois PHP 5.4.</p>
<p>La modification plus importante concerne le paramètre de compilation<code>--enable-zend-multibyte</code>, qui permettait à <a href="http://www.php.net/">PHP</a> de détecter les scripts au format <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> et qui devait être explicitement activé lors de la compilation du langage.</p>
<p>Il a maintenant disparu et il est remplacé par la directive de configuration <code>zend.multibyte</code>, accessible via le fichier <code>php.ini</code>, et la détection des scripts encodés à l'aide d'<a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> est dorénavant activée par défaut.</p>
<p>J'avoue que cette modification m'effraye un peu, car j'ai déjà rencontré des problèmes, notamment au niveau des archives <a href="http://fr.php.net/phar">PHAR</a>, lorsque ce paramètre de compilation était activé, sans avoir jamais pu en connaître ou en découvrir la raison.</p>
<p>J'espère donc que le fait que le mécanisme de détection automatique de l'encodage soit maintenant activé par défaut ne posera pas de problèmes.</p>
<p>Autre modification intéressante, effectuée suite à la requête <a href="http://bugs.php.net?id=53427">#53427</a>, les clefs associatives d'un tableau passé en premier argument de <code><a href="http://fr2.php.net/stream_select">stream_select()</a></code> sont maintenant conservées.</p>
<p>Il faut cependant noter que cette modification ne pourra être effectuée dans PHP 5.3, pour des raisons techniques.</p>
<p>Par ailleurs, dans un registre plus modeste, les bugs <a href="http://bugs.php.net?id=52854">#52854</a>,
<a href="http://bugs.php.net?id=51901">#51901</a>,
<a href="http://bugs.php.net?id=51003">#51003</a>,
<a href="http://bugs.php.net?id=35547">#35547</a>,
<a href="http://bugs.php.net?id=53377">#53377</a>,
<a href="http://bugs.php.net?id=46587">#46587</a>,
<a href="http://bugs.php.net?id=53352">#53352</a>,
<a href="http://bugs.php.net?id=53403">#53403</a>,
<a href="http://bugs.php.net?id=46587">#46587</a>,
<a href="http://bugs.php.net?id=53304">#53304</a>,
<a href="http://bugs.php.net?id=53407">#53407</a>,
<a href="http://bugs.php.net?id=52501">#52501</a>,
<a href="http://bugs.php.net?id=53409">#53409</a>,
<a href="http://bugs.php.net?id=52327">#52327</a>,
<a href="http://bugs.php.net?id=53420">#53420</a>,
<a href="http://bugs.php.net?id=52828">#52828</a>,
<a href="http://bugs.php.net?id=52656">#52656</a> et enfin
<a href="http://bugs.php.net?id=52202">#52202</a> ont été résolus.</p>
<p>Un bug a de plus été corrigé dans la révision <a href="http://svn.php.net/viewvc?view=revision&revision=305754">305754</a> sur la correction du bug <a href="http://bugs.php.net?id=46587">#46587</a>, et comme d'habitude, je n'ai pu m'empêcher de sourire à la lecture du commentaire associé :</p>
<blockquote><pre><code>Fixes the fix for bug #46587.<br /></code></pre></blockquote>
<p>Et comme d'habitude, il y a le lot de petites optimisations diverses qui ne correspondent pas à un rapport de bug, sans oublier évidement les nettoyages effectués sur le code pour supprimer des alertes à la compilation ou bien pour respecter les conventions de codage.</p>
<p>Les affaires courantes étant maintenant expédiées, nous allons pouvoir maintenant rentrer dans le vif du sujet, à savoir ce qu'il se passe actuellement sur <a href="http://news.php.net/group.php?group=php.internals">la liste de diffusion des contributeurs</a>.</p>
<p>Plusieurs discussions, plus ou moins importantes, sont en cours et concerne à la fois le développement du langage et ses fonctionnalités.</p>
<p>Tout d'abord, une <abbr title="Request For Comments">RFC</abbr> visant à formaliser <a href="http://wiki.php.net/rfc/releaseprocess">le processus de création d'une nouvelle version du langage</a> a été proposée par un groupe de huit développeurs relativement influant au sein de la communauté des contributeurs.</p>
<p>Fraîchement accueilli dans un premier temps par les traditionalistes, il semble que la discussion évolue dans le bon sens et soit <a href="http://news.php.net/php.internals/50532">constructive</a>, d'autant que cette <abbr title="Request For Comments">RFC</abbr> a reçu le <a href="http://news.php.net/php.internals/50495">soutient</a> d'<a href="http://en.wikipedia.org/wiki/Andi_Gutmans">Andi Gutmans</a>, l'un des deux créateurs du <a href="http://en.wikipedia.org/wiki/Zend_Engine">Zend Engine</a> ainsi que celui de <a href="http://pooteeweet.org/blog/0/1854#m1854">Lukas Kahwe Smith</a>, l'ex monsieur formalisme de <a href="http://www.php.net/">PHP</a> puisqu'il a quitté le projet il y a maintenant <a href="http://blog.mageekbox.net/?post/2010/05/06/Un-coup-dur-pour-PHP">quelques mois</a>.</p>
<p>Il faut dire que les contributeurs peinent à sortir une version alpha de PHP 5.4 et que cette <abbr title="Request For Comments">RFC</abbr> arrive donc à point nommé.</p>
<p>Initialement prévue pour le 24 novembre, cette version alpha n'est toujours pas disponible, du fait <a href="http://news.php.net/php.internals/50416">d'un manque de consensus</a> sur certaines fonctionnalités emblématiques de la prochaine version, comme le contrôle du type des arguments numériques lors d'un appel de fonction ou de méthode, la suppression des <q><a href="http://php.net/manual/en/security.magicquotes.php">magic quotes</a></q>, la cassure de la compatibilité avec les versions antérieures ou bien encore sur une chose aussi basique que <a href="http://news.php.net/php.internals/50522">le numéro de la version</a>.</p>
<p>De plus, les traits ne semblent pas encore être totalement opérationnels, car certain cas exotiques ne sont pas correctement gérés, et si la dernière version d'<a href="http://fr2.php.net/apc">APC</a> compile lorsqu'il est intégré dans le code de <a href="http://www.php.net">PHP</a>, il n'est pas fonctionnel.</p>
<p>Bref, les contributeurs ne sont pas près de voir le bout du tunnel en ce qui concerne PHP 5.4, et cela d'autant plus que l'outil de gestion de version qui est utilisé par la communauté des développeurs, à savoir subversion, ne permet pas d'extraire facilement du <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> les fonctionnalités indésirables afin de générer cette fameuse version alpha.</p>
<p><a href="http://blog.thepimp.net/">Pierre Joye</a>, également parmi les auteurs de la <abbr title="Request For Comments">RFC</abbr> relative <a href="http://wiki.php.net/rfc/releaseprocess">au processus de création d'une nouvelle version du langage</a>, a donc <a href="http://news.php.net/php.internals/50486">proposé</a> de migrer de subversion vers un système de gestion plus adapté au processus de développement de <a href="http://www.php.net/">PHP</a>, j'ai nommé <a href="http://git-scm.com/">Git</a>.</p>
<p>Là encore, la proposition a reçu un accueil mitigé, d'autant qu'il y a parmi les contributeurs des fans d'autres systèmes de gestion de version décentralisé similaire à <a href="http://git-scm.com/">Git</a>, comme <a href="http://mercurial.selenic.com/">Mercurial</a>.</p>
<p>Et contrairement à la précédente, cette proposition n'a pas reçu le soutien d'<a href="http://en.wikipedia.org/wiki/Andi_Gutmans">Andi</a>, qui pense qu'il y a <a href="http://news.php.net/php.internals/50496">mieux à faire</a> sur le projet actuellement.</p>
<p>Il est donc difficile de dire ce que tout cela va donner, mais les choses bougent, et de mon point de vue, plutôt dans le bon sens.</p>
<p>Parallèlement à ces discussions relatives au processus de développement, il y a également eu des débats au sujet des fonctionnalités du langage.</p>
<p>Ainsi, <a href="http://pecl.php.net/user/felipe">Felipe Pena</a>, également partie prenante dans les <abbr title="Request For Comments">RFC</abbr> précédemment citées, <a href="http://news.php.net/php.internals/50592">a proposé</a> de permettre l’accès aux propriétés et aux méthodes d'une instance de classe directement après son sa création, de la manière suivante :</p>
<blockquote><pre><code><?php var_dump(new foo()->bar()->x); ?></code></pre></blockquote>
<p>À contrario des précédentes, <a href="http://wiki.php.net/rfc/instance-method-call">la <abbr title="Request For Comments">RFC</abbr> correspondante</a> a reçu un accueil chaleureux d'emblée de la plupart des contributeurs, et elle semble bien partie pour être intégrée prochainement dans le <a href="http://svn.php.net/viewvc/php/php-src/trunk/">trunk</a> une fois que quelques <a href="http://news.php.net/php.internals/50625">détails syntaxiques</a> auront été réglés.</p>
<p>Une <abbr title="Request For Comments">RFC</abbr> proposant de <a href="http://wiki.php.net/rfc/optional-t-function">supprimer le mot-clef <code>function</code></a> au niveau des déclarations de méthodes dans une classe a également été rédigée.</p>
<p>Une déclaration de méthode pourrait alors prendre la forme suivante :</p>
<blockquote><pre><code><?php<br /><br /> class Foo<br /> {<br /> public bar()<br /> {<br /> echo "Hello World";<br /> }<br /> }<br /><br />?><br /></code></pre></blockquote>
<p>Si elle a été plébiscitée dans un premier temps, elle est maintenant <a href="http://news.php.net/php.internals/50674">contestée</a>, notamment par les traditionalistes, car si elle était acceptée, cela compliquerait la maintenance du code, puisqu'il serait beaucoup moins facile de détecter une déclaration de méthode au sein d'un projet, sans parler des problèmes que cela poseraient aux outils de développement.</p>
<p>Enfin, une <abbr title="Request For Comments">RFC</abbr> proposant l'implémentation <a href="http://wiki.php.net/rfc/propertygetsetsyntax">d'accesseurs à la manière de C#</a> a été <a href="http://news.php.net/php.internals/50675">proposée</a> :</p>
<blockquote><pre><code><?php<br /><br />class TimePeriod<br />{<br /> private $seconds;<br /> <br /> public $Hours<br /> {<br /> get { return $this->seconds / 3600; }<br /> set { $this->seconds = $value * 3600; }<br /> };<br />}<br /><br />?><br /></code></pre></blockquote>
<p>Pour le moment, les avis sont mitigés à son sujet, et même si elle était finalement acceptée, la fonctionnalité correspondante ne serait pas intégrée dans la prochaine version du langage.</p>
<p>La communauté des développeurs de PHP est donc en pleine ébullition suite à une série d'offensives du parti progressiste, ce qui est bien la preuve que le langage est bien vivant et dispose des ressources nécessaires pour évoluer dans le bon sens, n'en déplaise à ses détracteurs.</p>
<p>Cette rétrospective est maintenant terminée, vous pouvez reprendre une activité normale.</p>http://blog.mageekbox.net/?post/2010/12/01/Mort-de-PHP6-260-jours#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/214