Téléchargez l'application
Tom's Hardware sur l'App Store
Toute l'actu informatique de référence sur votre iPhone
Oui Non

Facebook transforme PHP en C++

par - source: Tom's Hardware FR

Facebook est un gros site. Enorme, même. Et la société utilise essentiellement le langage PHP pour la génération des pages, ce qui — pour un site qui dispose d'un grand nombre de pages différentes — peut poser des problèmes de performances, PHP étant un langage interprété. La société travaille donc depuis plusieurs mois sur un projet, HipHop for PHP, qui va permettre d'accélérer le traitement des pages et — selon Facebook — de diviser la charge processeur des serveurs par deux. L'idée est simple : au lieu d'interpréter le code PHP directement (ou de le compiler, comme certains projets existant), le code PHP est transformé en code C++ et ensuite compilé, ce qui permet de proposer un code globalement plus rapide. Pour le moment, le système est disponible avec son propore serveur Web (une version adaptée à Apache est prévue dans le futur), l'outil est en open source et il a quelques petits défauts, une partie des commandes PHP n'étant pas prises en charge (notamment eval()). Dans l'absolu, le projet est intéressant, mais il n'est réellement utile que quand le langage PHP est l'élément bloquant, ce qui est rarement le cas : la majorité des sites sont plus limités par l'accès à la base de données ou par l'optimisation du code en lui-même que par la langage dans son ensemble.

Partager:
12
Commentaires
X
Valider

Commentaires
Ajouter un commentaire
pluies 03/02/2010 12:25
Masquer
-3+

Citation :Dans l'absolu, le projet est intéressant, mais il n'est réellement utile que quand le langage PHP est l'élément bloquant, ce qui est rarement le cas : la majorité des sites sont plus limités par l'accès à la base de données ou par l'optimisation du code en lui-même que par la langage dans son ensemble.

Amen.

Surtout en utilisant des caches ou de la compilation.

Après, lorsqu'on a 30000 serveurs comme chez Facebook, ça vaut peut-être le coup :D

(Apparemment pour eux ça le vaut : occupation CPU réduite de 50% en moyenne sur leurs serveurs web.)

jpvincent_79 03/02/2010 12:43
Masquer
-1+

il y a plusieurs limites cela dit, ça n'est pas pour tout le monde, elles sont toutes listées ici :
http://jpv.typepad.com/blog/2010/0 [...] mites.html

d'abord, il faut se passer d'apache, avoir la bonne version de PHP et oublier 2-3 trucs de languages rarement utilisées comme eval(). Mais comme certaines librairies comme PEAR et Zend les utilisent, ça peut bloquer le projet

et oui, ce qui fait qu'un serveur ne tient pas la charge c moins le CPU que les I/O disque et réseau

LVM 03/02/2010 12:54
Masquer
--1+

jpvincent_79 :
il y a plusieurs limites cela dit, ça n'est pas pour tout le monde, elles sont toutes listées ici :http://jpv.typepad.com/blog/2010/0 [...] mites.htmld'abord, il faut se passer d'apache, avoir la bonne version de PHP et oublier 2-3 trucs de languages rarement utilisées comme eval(). Mais comme certaines librairies comme PEAR et Zend les utilisent, ça peut bloquer le projetet oui, ce qui fait qu'un serveur ne tient pas la charge c moins le CPU que les I/O disque et réseau



Merci pour le lien.

Dans le chapitre sur les limitations, un passage m'a interloqué:
Citation :Plus vicieux car moins facile à trouver : certaines portions de code qui font des tests sur la définition d'une classe ou d'une fonction ne marcheront plus car on passe d'un language interprété à un language compilé, où partout dans le code toutes les classes/fonctions sont censé déjà exister.


C'est là tout le problème de C++: il n'est pas un langage dynamique. Pour un usage de ce genre Objective C aurait peut-être mieux convenu.

Mictateur 03/02/2010 13:33
Masquer
-4+

Citation :

C'est là tout le problème de C++: il n'est pas un langage dynamique. Pour un usage de ce genre Objective C aurait peut-être mieux convenu.



LVM, ouvre les yeux : PERSONNE ne code en Objective-C à part les mecs qui font du dév Macs/iPhone(/iPad).
Et ça représente pas une majorité des développeurs. Tout le monde apprend à coder du C, C++, Java, voir .NET à l'école, et quand tu mates la syntaxe de l'Objective-C, la seule chose que t'as envie de faire au début, c'est de te tirer une balle tellement c'est horrible.

Je vois même pas pourquoi quelqu'un aurait dit "chic on va transformer tout ça en Objective-C". C'est évident que personne ne sait coder dans ce langage, et que son support en dehors de Mac OS est super limité. [:spamafote]


Rappel pour les n00bs : j'ai une instance de class chose, et j'appelle sa méthode truc(int a, int b).
[*] C++ : chose->truc(a, b);
[*] Java : chose.truc(a, b);
[*] C# : chose.Truc(a, b);
[*] Objective-C : [chose truc: a truc: b];

Tout est dit. :o



P.S. Evidemment, la méthode s'appelle tructruc dans ce cas-là en Objective-C.

pluies 03/02/2010 13:54
Masquer
-5+

Citation :

LVM, ouvre les yeux : PERSONNE ne code en Objective-C à part les mecs qui font du dév Macs/iPhone(/iPad).



Certes. ;) Et je pense que c'est notamment lié au fait qu'Objective-C est fondamentalement lié à l'API Cocoa, sans laquelle le langage n'est pas particulièrement attractif.

Ceci dit...
Citation :

Rappel pour les n00bs : j'ai une instance de class chose, et j'appelle sa méthode truc(int a, int b).
[*] C++ : chose->truc(a, b);
[*] Java : chose.truc(a, b);
[*] C# : chose.Truc(a, b);
[*] Objective-C : [chose truc: a truc: b];

Tout est dit. :o



Je suis pas d'accord.

Prenons l'exemple de fwrite en C :
fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);

E.g :
fwrite(toto, 10, 15, file);

Et bonjour pour te souvenir quel int représente la taille, quel int représente le nombre d'items (et si t'es un peu rouillé, dans quel sens se fait la copie :p)...

En Objective-C, on aurait un truc du genre :
[classe fwriteFrom:toto items:15 ofSize:10 inStream:file];

C'est plus verbeux, mais infiniment plus lisible. Beaucoup de devs Obj-C apprécient cet aspect du langage (hérité de Smalltalk).

nystep 03/02/2010 14:58
Masquer
-3+

"C'est plus verbeux, mais infiniment plus lisible. Beaucoup de devs Obj-C apprécient cet aspect du langage (hérité de Smalltalk). "

Mais tu sais, avec une IDE moderne (visual c++), tu as le type quand tu mets le curseur de la sourie sur une variable et sous vc++ 2010 pro tu as même la fenêtre de définition qui te met dans quel contexte une fonction ou variable ou classe est définie... un bonheur en multiscreen.. :) ;)

pluies 03/02/2010 15:23
Masquer
-0+

nystep :
"C'est plus verbeux, mais infiniment plus lisible. Beaucoup de devs Obj-C apprécient cet aspect du langage (hérité de Smalltalk). "Mais tu sais, avec une IDE moderne (visual c++), tu as le type quand tu mets le curseur de la sourie sur une variable et sous vc++ 2010 pro tu as même la fenêtre de définition qui te met dans quel contexte une fonction ou variable ou classe est définie... un bonheur en multiscreen..


Oui, tu pallies aux faiblesses du langage par l'IDE. :p

Le problème reste entier quand tu lis ton code depuis n'importe où ailleurs, que ça soit sur un forum/site web ou à l'arrache avec un more (ou notepad ou quicklook, c'est selon).

Mictateur 03/02/2010 15:42
Masquer
-2+

Tout à fait d'accord sur le découpage des paramètres en Objective-C, c'est pratique pour comprendre ce qu'il se passe. Mais si tu veux des défauts, fastoche : "Mais oui tu sais, la méthode fwriteFromitemsofSizeinStream !"... Bon OK je chipote. :o

Et puis les [[[[[[[[[[fdsfdsqfdsf] fdsf] fdsfdsf] fdsfds] fdsfds] fdsfds] fdsfds] fdsfds]... à la place des fanstastiques dfdsfds.fdsfdsfds.dfgfdsgdf.gfdgfdgfd.gfdgfdg.gfdgfdfgd() qui sont à mes yeux 50 fois plus lisibles... ;)

:jap: pour le lien avec Cocoa aussi.

zorro3364 03/02/2010 19:29
Masquer
-1+

ben y'a qu'a coder les sites web directement en c++....

nan j'déconne, mais vouloir en même temps la souplesse de php et la performance de c/c++ est très difficile, sinon on aurait déjà créé le langage universel.

batchy 03/02/2010 20:30
Masquer
-0+

Citation :

Prenons l'exemple de fwrite en C :
fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);

E.g :
fwrite(toto, 10, 15, file);

Et bonjour pour te souvenir quel int représente la taille, quel int représente le nombre d'items (et si t'es un peu rouillé, dans quel sens se fait la copie :p)...



En même temps, le mec qui écrit fwrite(toto, 10, 15, file); c'est un gros boulet. Elle viens d'ou la taille de 10 ? et le nombre d'item ? même si ça ne changera jamais, les valeurs sorties de mon *** ça §*%$§ tout le monde. Peut être que le même idiot à utilisé 10 autre part pour autre chose, et pour le changer en 20, faut analyser chaque ligne de code pour transformer que les bons 10 en 20, et une erreur est vite arrivée ...
et ce problème n'est pas spécifique au C.

Mictateur 03/02/2010 22:11
Masquer
-1+

C'était un exemple, Batchy. ;)

Ce qu'il veut dire c'est qu'avec l'Objective-C, on ne peut pas inverser le 10 et 15 (qu'on ne code pas en dur hein ? :o ) à moins de pas savoir lire, alors que c'est fréquent d'inverser les paramètres de même type en C/C++. :sweat:

MEI 04/02/2010 09:44
Masquer
-2+

C'est fréquent chez les boulays incompétent surtout je crois...

Perso ça m'arrive pour ainsi dire jamais, même en PHP (alors que y'a peut de vérification de type)

Publicité

Les offres du moment

Newsletters


OK