Évidemment, au départ, ils ont cherché à faire ce qui avait déjà été tenté avec PHP 6, à savoir faire supporter Unicode par le Zend Engine, mais cette fois-ci en y intégrant une gestion des caractères basé sur UTF-8 et non UTF-16 comme dans le cas de feu PHP 6.
En effet, le fait que l'UTF-16 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.
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.
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.
En utilisant UTF-8 au lieu de UTF-16, les développeurs de chez Zend ont donc pensé qu'ils pourraient profiter des avantages d'Unicode basé sur UTF-16 sans en avoir les inconvénients.
L'encodage UTF-8 présente en effet de nombreux avantages par rapport à l'UTF-16, à commencer par un besoin en mémoire significativement moins important et une compatibilité avec l'US-ASCII.
De plus, il est fortement compatible avec la plupart des encodages non Unicode relatifs au langue latine, comme le bien connu ISO 8859-1 supporté depuis toujours par PHP.
Mais malgré tout leurs efforts, les développeurs de Zend 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.
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 Unicode que le Zend Engine 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é.
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 Unicode, Zend a alors pris, il y a un peu moins d'un an, une décision radicale : puisque le Zend Engine 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 !
Pendant un temps, les développeurs de Zend ont envisagé d'utiliser Parrot, la machine virtuelle qui est utilisée entre autre par Perl 6, aka Rakudo, car elle avait l'avantage de déjà disposer d'un support partiel de PHP.
Cependant, ils ont fini par décidé d'utiliser la Java Virtual Machine aka JVM, notamment après avoir pris connaissance des travaux de la jeune société française Clever Cloud.
Le co-fondateur de cette start-up, Kevin Decherf, travaillait en effet à l'époque depuis de nombreux mois sur une solution permettant l'exécution de code PHP via la JVM.
Basée sur une branche autonome de Quercus, une implémentation en Java de PHP 5, la solution de Clever Cloud avait l'avantage, aux yeux de Zend, d'avoir à la fois déjà démontré sa fiabilité et de surtout d'être capable d'intégrer le support d'Unicode à court terme.
En outre, elle allait permettre à Zend d'enfin pouvoir venir concurrencer Java 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 Java.
Enfin, suite au rachat de MySQL et de Sun par la société Oracle, 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.
En partenariat avec Clever Cloud, Zend a donc fait en sorte que PHP soit supporté par la JVM tout en intégrant le support d'Unicode, et après un peu plus de 6 mois de travail,le projet bianca, puisque c'est son nom, était finalisé sous la forme d'un moteur PHP basé sur la JVM parfaitement à même de remplacer le Zend Engine.
Et les performances de ce nouveaux moteur se sont révélées époustouflantes, puisque d'après les tests effectués par Clever Cloud, PHP propulsé par bianca est en moyenne 20% plus performant que Java à contexte équivalent, alors que les deux langages utilisent la même machine virtuelle.
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
C'est d'ailleurs ses performances très supérieures à celle du Zend Engine qui ont poussé Clever Cloud à nommer leur moteur bianca, puisqu'il s'agit du nom d'une souris d'un célèbre dessin animé et que comme chacun le sait, les élephpants ont très peur des souris.
Zend dispose donc aujourd'hui de l'arme absolue sous la forme d'une version de PHP ultra-performante intégrant le support d'Unicode et dont le code vient d'être rendu public via github.
Reste à savoir ce qu'en penseront les communautés gravitant autour de PHP, à commencer par ses utilisateurs et ses développeurs, car Zend a travaillé jusqu'ici dans le plus grand secret et ce n'est que aujourd'hui que Clever Cloud a annoncé l'existence de bianca, plusieurs mois après le début de son développement.
D'ailleurs, on peut remarquer que le nom de Zend ne figure absolument pas dans le communiqué officiel de Clever Cloud, et sans une indiscrétion de son fondateur Quentin Adam (désolé Quentin, le scoop était trop énorme pour ne pas que j'en parle), je pense que le lien entre Clever Cloud et Zend aurait été gardé secret pendant encore longtemps.
29 réactions
1 De Hello - 01/04/2012, 10:20
bien joué pour l'exclusivité
2 De MathRobin - 01/04/2012, 11:09
Eh eh elle est pas mal celle là :p
3 De Stef666 - 01/04/2012, 11:14
Ca part fort le 1er avril
4 De Julien Breux - 01/04/2012, 11:18
Impressionnant O_o
5 De Denis - 01/04/2012, 11:20
Je me suis écrié : oh, non ! Puis, j'ai réalisé que nous étions le 1er avril. Bien joué.
6 De Renaud - 01/04/2012, 11:24
Bianca ? Moi je l'aurai plutôt appelé Némo
7 De Jc - 01/04/2012, 12:49
Poisssonnnnnnn
8 De Stopher - 01/04/2012, 12:57
Sympa le premier avril :p
9 De Ivan Enderlin - 01/04/2012, 14:10
Hey :),
Bon, déjà, on est le 1er avril alors il faut faire attention. On avait déjà parlé avec Frédéric de ce projet, donc rien de très surprenant pour moi.
Le dépôt de Bianca montre bien un interpréteur : lexer + parser en OCaml, puis un interpréteur en Java. Et encore, la partie OCaml n'a pas l'air très au point (à lire l'historique des sources, je pense même qu'il y manque des fichiers mais je n'ai pas encore tenté une compil'). Passons sur ce détail. Je ne vois nul part de support de l'API de PHP qui est, n'ayons pas peur des mots, gigantesque ! Alors que l'interpréteur tourne, c'est tout à fait envisageable, mais prendre un programme PHP (sans trop de dépendances aux extensions) ne pourrait pas tourner dans l'immédiat avec Bianca. Du coup, je me demande d'où sorte les chiffres de performances ? Car PHP est fort quand il commence à parler avec beaucoup de monde et pas tout seul. Voilà quelques petites questions en vrac un jour de 1er avril … :-).
10 De desfrenes - 01/04/2012, 14:39
mdr... pourquoi j'ai déjà l'impression d'avoir vu cette blague l'année dernière ?
Cela dit ça pourrait être intéressant... on a bien des implémentations de python/ruby sur la jvm ou la clr...
11 De Gugelhupf - 01/04/2012, 15:13
Poisson d'avril n'est-ce pas mageekguy ? :°)
12 De dgoujard - 01/04/2012, 16:29
C'est surtout un poisson d'avril
13 De Cyrano - 01/04/2012, 16:41
Tss tss, je me suis fait avoir aussi en lisant ça ce matin, il a fallu une partie de la journée pour réaliser quelle était la date du jour....
14 De Tof - 01/04/2012, 18:34
Ça va être par défaut avec php bientôt? Mais va falloir installé java en installant PHP? Relou ça... Pis bon vla du java beurk. C'est naze en fait.
15 De rami - 01/04/2012, 20:18
Joli poisson, j'ai failli y croire
16 De Lol - 01/04/2012, 23:08
C'est le poisson d'avril ?
17 De Séb - 02/04/2012, 00:01
Haha, j'ai été supris par cette dépêche... Puis, me suis souvenu qu'on était le premier avril !
18 De Mathieu - 02/04/2012, 01:30
Cette nouvelle mouture de PHP se sentira comme un poisson dans l'eau avec le dauphin de MySQL !
D'ailleurs, pourquoi ne pas avoir nommé cette bête Wanda au lieu de Bianca ?
19 De Mickael - 02/04/2012, 09:22
Ah ah ah! Recherché ce poisson d'avril, bravo! J'ai bien rigolé, merci!
20 De niahoo - 02/04/2012, 09:29
On va tous mourir !
21 De lanfisis - 02/04/2012, 09:56
La date de cette article me laisse septique... :p
22 De Julien - 02/04/2012, 10:12
Un tel scoop un dimanche 1er avril. Quelle aubaine...
23 De waxzce - 02/04/2012, 11:23
@<a href="http://blog.mageekbox.net/?post/2012/03/24/PHP-utilisera-dorenavant-la-JVM#c3739>Tof</a> : pourquoi java beurk ?
24 De unkn - 02/04/2012, 11:43
Pas mal le pichon d'avril
25 De hidden - 02/04/2012, 12:11
c'est un poisson d'avril ? car publication le 01 avril 2012
26 De Trent - 02/04/2012, 12:12
J’ai d’abord cru à un poisson d’avril, toutefois le github assez bien fournis en commit depuis plusieurs mois commence à me faire douter… C’est vraiment sérieux ? O_o
27 De waxzce - 03/04/2012, 09:27
Juste pour info :
le site du projet http://www.biancaproject.org/ tourne sur ... un bianca et c'est un wordpress dernière génération.
Le projet est bien sérieux.
28 De Kdecherf - 03/04/2012, 11:44
@Ivan Enderlin :
Le parseur OCaml est une expérimentation indépendante du projet.
Concernant l'implémentation même, on a une compatibilité générale avec PHP 5.3 (Wordpress fonctionne) et il nous reste du boulot à faire sur la SPL.
Pour le reste ça sera surtout des modules indépendants à porter.
29 De Amaury Bouchard - 10/04/2012, 16:29
Très bien documenté, ton poisson d'avril.
Au passage, j'avais pensé à l'époque de PHP 6 qu'il n'y avait aucune bonne raison d'utiliser l'UTF-16 et non pas l'UTF-8 (sauf pour imiter ce qui est fait en Java).
Et l'un des buts de Parrot était effectivement de pouvoir supporter un maximum de langages interprétés (comprendre : ils espéraient que les autres langages utiliseraient aussi Parrot comme machine virtuelle). Ce à quoi Guido Van Rossum (créateur de Python) avait dit que c'était un but honorable mais qui a peu de chance d'être concrétisé vu les différences structurelles entre les langages...