¿Por qué Facebook convierte el código PHP a C ++? [cerrado]

41

Leí que Facebook comenzó en PHP y luego, para ganar velocidad, ahora compilan PHP como código C ++. Si ese es el caso, ¿por qué no?

  1. ¿Solo programa en c ++? Seguramente debe haber ALGUNOS errores / errores al presionar un botón del compilador mágico que transfiere código PHP a c ++, ¿verdad?

  2. Si este impresionante convertidor funciona tan bien, ¿por qué seguir con PHP? ¿Por qué no usar algo como Ruby o Python? Nota: elegí estos dos al azar, pero sobre todo porque casi todos dicen que la codificación en esos idiomas es una "alegría". Entonces, ¿por qué no desarrollarse en un excelente lenguaje y luego presionar el botón mágico de compilación c ++?

pregunta user72245 19.11.2012 - 19:44

6 respuestas

65

No lo hacen. Ya no más, al menos. Resulta que hacerlo de esta manera causa demasiados problemas, incluidos los dolores de cabeza en la implementación y la anulación de una de las ventajas principales de usar un lenguaje de scripting en primer lugar: poder cambiar los scripts sin necesidad de recompilarlos, por lo que renovaron el sistema HipHop en una arquitectura de VM con una fase JIT transparente, y desaprobaron el compilador de C ++.

Es bastante interesante que, al parecer, hacerlo de esta manera también es aproximadamente el doble de rápido (como en el de performant) que el enfoque original de compilación de C ++.

    
respondido por el Mason Wheeler 19.11.2012 - 23:10
34

El ingeniero sénior de Facebook, Haiping Zhao, probablemente responde tus preguntas mejor.

  
  1. HipHop transforma mediante programación el código fuente de PHP en C ++ altamente optimizado y luego usa g ++ para compilarlo. HipHop ejecuta el código fuente de una manera semánticamente equivalente y sacrifica algunas características que rara vez se usan, como eval (), a cambio de un mejor rendimiento.

  2.   
  3. Una manera común de abordar estas ineficiencias es reescribir las partes más complejas de su aplicación PHP directamente en C ++ como extensiones PHP. Esto transforma en gran medida PHP en un lenguaje de cola entre el HTML de la interfaz y la lógica de la aplicación en C ++. Desde una perspectiva técnica, esto funciona bien, pero reduce drásticamente el número de ingenieros que pueden trabajar en toda su aplicación.

  4.   

El resto de la publicación del blog es una buena lectura, y la recomiendo. Ofrece información sobre los desafíos de programación con los que se enfrenta Facebook y cómo están tratando de abordar esos problemas.

    
respondido por el GlenH7 19.11.2012 - 19:59
19
  

¿Solo programa en c ++? Seguramente debe haber ALGUNOS errores / errores cuando   presionando un botón mágico del compilador que transfiere código PHP a c ++, ¿verdad?

Correcto, pero la programación en C ++ implicaría reemplazar toda su base de código existente, una idea mundialmente famosa por ser completamente estúpida y devastadora.

  

Si este impresionante convertidor funciona tan bien, ¿por qué seguir con PHP?   ¿Por qué no usar algo como Ruby o Python? Nota - Elegí estos dos   al azar, pero sobre todo porque casi todo el mundo dice que la codificación en los   Los idiomas son una "alegría". Entonces, ¿por qué no desarrollarse en un lenguaje super grande y   luego presiona el botón de compilación c ++ mágico?

Porque de nuevo, eso implicaría reemplazar su base de código PHP existente.

En un mundo ideal, simplemente codificarían en C ++ desde cero. Desafortunadamente, debido a que tienen un montón de código existente en PHP, eso no es posible. Así que en lugar de eso, ellos resuelven el problema. Es mucho más barato.

    
respondido por el DeadMG 19.11.2012 - 19:55
8

"De hecho, ¿por qué no trabajar en ensamblaje directamente, ya que el código C ++ se traduce finalmente en instrucciones de código de máquina?"

- Eso, en su esencia, es a lo que se reduce el argumento. Y con suerte, esto hace que sea obvio por qué no se hace:

  • Se requiere un conjunto de habilidades (¡enormemente!) para programar en ensamblaje (C ++) que en C ++ (PHP).
  • Es potencialmente mucho más difícil de programar, por una variedad de razones
  • El código producido por un ensamblador / compilador puede no ser legible para las personas (hablar: mantenible), aunque pueda , desde cero, escriba programas legibles en ensamblador (C ++). >
respondido por el Konrad Rudolph 21.11.2012 - 00:58
5

No estoy en Facebook, pero mi mejor estimación de los motivos sería "evitar riesgos significativos". En este punto, cambiar a un idioma diferente ya no es una decisión tecnológica: sobre todo, es una decisión empresarial.

Cuando eres una gran empresa que creció orgánicamente al tamaño de FB, lentamente atraes a personas que luego adquieren experiencia en tu plataforma de programación (en el caso de FB, eso es PHP). Uno por uno, obtiene unos pocos miles de empleados con gran experiencia en PHP. En este punto, el cambio a cualquier otro idioma se vuelve muy peligroso: sus ingenieros no estarán al tanto del nuevo ecosistema y pueden requerir un tiempo significativo para alcanzar el nivel de experiencia exigido por sus trabajos actuales, y mucho menos mejorar sus habilidades.

Dejando de lado los méritos relativos de PHP y los lenguajes alternativos, con la cantidad de inversión que FB realizó en la tecnología PHP sería demasiado arrogante pensar que un cambio sería indoloro y demasiado tonto como para intentarlo. En los negocios, la tecnología es un medio para un fin, por lo que la "alegría" de la programación ni siquiera entra en las discusiones.

    
respondido por el dasblinkenlight 19.11.2012 - 19:56
4

Puedo pensar en un solo sitio web importante que se implementó en C ++. H2G2

Incluso entonces, la implementación actual es en realidad un intérprete con una gran cantidad de funciones de manipulación de texto y base de datos incorporadas (no suena un poco como PHP y, al principio,)).

Facebook está bastante contento con la funcionalidad de su sitio web. Acaban de crecer hasta el punto en que PHP vainilla no puede admitir los volúmenes que procesan. Por lo tanto, la compilación de PHP allí en código de máquina de C ++. Podrían haber escrito un compilador completo para PHP, pero se habrían perdido los 20 años de optimización sutil que han pasado en la pila de compiladores de gcc. El punto es que el código "C ++" no pretende ser legible para el ser humano, sino que es un paso intermedio en el camino hacia el código de máquina.

Como muchos programadores en este sitio, siento que subestima la cantidad de trabajo invertido en su lógica de negocios y funcionalidad incorporada en las aplicaciones existentes, y, código de valor por su propio bien.

    
respondido por el James Anderson 20.11.2012 - 03:20

Lea otras preguntas en las etiquetas