Facebook transforme PHP en C++
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.
- Les meilleures configurations de février
- ASRock ambitieux pour l’année 2010
- Intel livre enfin ses Itanium Tukwila
- Nouveau clavier pour gamer de Microsoft
- Premier écran AMOLED tactile monocouche
- Une surface tactile de 3 mètres
- Corsair : une Flash Voyager GTR de 128 Go
- NEC MultiSync PA241W : pour la photo ?
- Des EcoGreen de 1,5 To et 2 To chez Samsung
- 10 raisons de ne pas acheter d'iPad
- NEC : un 17’’ économe en énergie
- Un SSD de 512 Go dans les cartons de Corsair
- Sharkoon lance 4 boîtiers rebelles
- Un graveur Blu-ray externe 8x chez I-O Data
- AMD officialise la Radeon HD 5450
- TDJ : souris SpeedLink Kudos
- Deux portables « Classic » chez MSI
- La Radeon HD 5450 chez MSI et Sapphire






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
(Apparemment pour eux ça le vaut : occupation CPU réduite de 50% en moyenne sur leurs serveurs web.)
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
il y a plusieurs limites cela dit, ça n'est pas pour tout le monde, elles sont toutes listées ici
Merci pour le lien.
Dans le chapitre sur les limitations, un passage m'a interloqué:
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.
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é.
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.
P.S. Evidemment, la méthode s'appelle tructruc dans ce cas-là en Objective-C.
LVM, ouvre les yeux : PERSONNE ne code en Objective-C à part les mecs qui font du dév Macs/iPhone(/iPad).
Certes.
Ceci dit...
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.
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
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).
"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..
"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.
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).
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.
pour le lien avec Cocoa aussi.
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...
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.
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
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.
C'était un exemple, Batchy.
) à moins de pas savoir lire, alors que c'est fréquent d'inverser les paramètres de même type en C/C++.
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 ?
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)