web-dev-qa-db-fra.com

Pourquoi Facebook convertit-il le code PHP en C ++?

J'ai lu que Facebook a commencé en PHP, puis pour gagner en vitesse, ils compilent maintenant PHP en code C++. Si c'est le cas, pourquoi ne pas:

  1. Il suffit de programmer en c ++? Il doit sûrement y avoir QUELQUES erreurs/bogues lors de la frappe d'un bouton du compilateur magique qui porte PHP en code c ++, non?

  2. Si cet impressionnant convertisseur fonctionne si bien, pourquoi s'en tenir à PHP du tout? Pourquoi ne pas utiliser quelque chose comme Ruby ou Python? Remarque - J'ai choisi ces deux à aléatoire, mais surtout parce que presque tout le monde dit que le codage dans ces langages est une "joie". Alors pourquoi ne pas développer dans un super langage et ensuite appuyer sur le bouton magique de compilation c ++?

42
user72245

Ils ne le font pas. Plus du moins. Il s'avère que cela entraîne trop de problèmes, y compris des maux de tête de déploiement et annule l'un des principaux avantages de l'utilisation d'un langage de script en premier lieu - pouvoir modifier des scripts sans avoir à recompiler - alors ils ont réorganisé le système HipHop dans une architecture VM avec une phase JIT transparente et a déconseillé le compilateur C++.

Chose intéressante, le faire apparemment de cette façon est également environ deux fois plus rapide (comme dans performant) que l'approche de trans-compilation C++ originale.

65
Mason Wheeler

L'ingénieur principal de Facebook Haiping Zhao est probablement répond à vos questions mieux.

  1. HipHop transforme par programmation votre code source PHP en C++ hautement optimisé, puis utilise g ++ pour le compiler. HipHop exécute le code source de manière sémantiquement équivalente et sacrifie certaines fonctionnalités rarement utilisées - telles que eval () - en échange de meilleures performances.

  2. Une façon courante de remédier à ces inefficacités consiste à réécrire les parties les plus complexes de votre application PHP directement en C++ sous la forme PHP Extensions. Cela transforme largement PHP dans un langage de collage entre votre HTML frontal et la logique d'application en C++. D'un point de vue technique, cela fonctionne bien, mais réduit considérablement le nombre d'ingénieurs capables de travailler sur l'ensemble de votre application.

Le reste de l'article de blog est une bonne lecture, et je le recommande. Cela donne un aperçu des défis de programmation auxquels Facebook fait face et de la façon dont ils essaient de résoudre ces problèmes.

34
user53019

Il suffit de programmer en c ++? Il doit sûrement y avoir QUELQUES erreurs/bogues lors de la frappe d'un bouton du compilateur magique qui porte PHP en code c ++, non?

C'est vrai, mais la programmation en C++ impliquerait de remplacer la totalité de leur base de code existante - une idée mondialement connue pour être complètement stupide et dévastatrice.

Si cet impressionnant convertisseur fonctionne si bien, pourquoi s'en tenir à PHP du tout? Pourquoi ne pas utiliser quelque chose comme Ruby ou Python? Remarque - J'ai choisi ces deux à au hasard, mais surtout parce que presque tout le monde dit que le codage dans ces langues est une "joie". Alors pourquoi ne pas développer dans un super langage et ensuite appuyer sur le bouton magique de compilation c ++?

Parce que cela impliquerait, encore une fois, de remplacer leur PHP base de code existante.

Dans un monde idéal, ils coderaient simplement en C++ à partir de zéro. Malheureusement, parce qu'ils ont une merde de code existant en PHP, ce n'est pas possible. Au lieu de cela, ils piratent le problème. C'est tellement moins cher.

19
DeadMG

"En effet, pourquoi ne pas travailler directement dans Assembly, puisque le code C++ est finalement traduit en instructions de code machine?"

- C'est, dans son essence, ce à quoi l'argument se réduit. Et j'espère que cela rend évident pourquoi cela n'est pas fait:

  • Un ensemble de compétences (énormément!) Différent est requis pour programmer dans Assembly (C++) qu'en C++ (PHP).
  • Il est potentiellement beaucoup plus difficile à programmer, pour diverses raisons
  • Le code produit par un assembleur/compilateur peut ne pas être lisible par l'homme (parler: maintenable), même si vous pouvez, à partir de zéro, écrire des programmes lisibles dans Assembly (C++).
8
Konrad Rudolph

Je ne suis pas sur Facebook, mais ma meilleure estimation des motifs serait "d'éviter des risques importants". À ce stade, le passage à une autre langue n'est plus une décision technologique: c'est avant tout une décision commerciale.

Lorsque vous êtes une grande entreprise qui a grandi de manière organique à la taille de FB, vous attirez lentement des personnes qui acquièrent ensuite une expertise dans votre plate-forme de programmation (dans le cas de FB, c'est PHP). Un à un, vous obtenez quelques milliers d'employés possédant une grande expertise en PHP. À ce stade, le passage à une autre langue devient très dangereux: vos ingénieurs ne seront pas au courant du nouvel écosystème et peuvent nécessiter un temps considérable pour atteindre le niveau d'expertise exigé par leurs emplois actuels, sans parler d'améliorer leurs compétences.

Laissant de côté les mérites relatifs de PHP et les langages alternatifs, avec le montant d'investissement que le FB a fait dans la technologie PHP, il serait trop arrogant de penser qu'un changer serait indolore, et trop insensé pour l'essayer. En affaires, la technologie est un moyen pour une fin, donc la "joie" de la programmation n'entre même pas dans les discussions.

5
dasblinkenlight

Je ne peux penser qu'à un seul site Web majeur qui a été implémenté en C++. H2G2

Même alors, l'ion d'implémentation actuel est en fait un interpréteur avec un grand nombre de fonctions de manipulation de texte et de base de données intégrées (cela ne ressemble-t-il pas un peu au début PHP :-)).

Facebook est très satisfait de la fonctionnalité de son site Web. Ils viennent de croître au point où Vanilla PHP ne peut pas supporter les volumes qu'ils traitent. D'où la compilation de là PHP dans le code machine C++ de là. Le pourrait avoir écrit un compilateur complet pour PHP, mais ils auraient raté les 20 années d'optimisation subtile qui sont entrées dans la pile du compilateur gcc. Le fait est que le code "C++" n'est pas destiné à être lisible par l'homme ou maintenable, c'est juste un intermédiaire étape sur le chemin du code machine.

Comme de nombreux programmeurs sur ce site, je pense que vous sous-estimez la quantité de travail investie dans la logique et les fonctionnalités métier intégrées dans les applications existantes, et valorisez le code pour lui-même.

4
James Anderson