Por que o Facebook converte código PHP em C ++? [fechadas]

41

Eu li que o Facebook começou em PHP e, em seguida, para ganhar velocidade, eles agora compilaram o PHP como código C ++. Se for esse o caso, por que não:

  1. Apenas programa em c ++? Certamente deve haver ALGUNS erros / bugs ao acertar um botão do compilador mágico que faz o PHP codificar em c ++, certo?

  2. Se este conversor impressionante funciona tão bem, por que usar o PHP? Por que não usar algo como Ruby ou Python? Nota - Eu escolhi estes dois aleatoriamente, mas principalmente porque quase todos diz que a codificação nesses idiomas é uma "alegria". Então, por que não desenvolver uma linguagem super bacana e clicar no botão de compilação magic c ++?

por user72245 19.11.2012 / 19:44
fonte

6 respostas

65

Eles não. Não mais, pelo menos. Acontece que fazê-lo dessa maneira causa muitos problemas, incluindo dores de cabeça de implantação e anulando uma das principais vantagens de usar uma linguagem de script em primeiro lugar - ser capaz de alterar scripts sem precisar recompilar - então eles reformularam o sistema HipHop em uma arquitetura VM com uma fase JIT transparente, e preteriram o compilador C ++.

Curiosamente, aparentemente, fazer isso dessa maneira também é duas vezes mais rápido (como no desempenho) que a abordagem original de trans-compilação do C ++.

    
por 19.11.2012 / 23:10
fonte
34

O engenheiro sênior do Facebook, Haiping Zhao, provavelmente responde às suas perguntas melhor.

  1. HipHop programmatically transforms your PHP source code into highly optimized C++ and then uses g++ to compile it. HipHop executes the source code in a semantically equivalent manner and sacrifices some rarely used features — such as eval() — in exchange for improved performance.

  2. One common way to address these inefficiencies is to rewrite the more complex parts of your PHP application directly in C++ as PHP Extensions. This largely transforms PHP into a glue language between your front end HTML and application logic in C++. From a technical perspective this works well, but drastically reduces the number of engineers who are able to work on your entire application.

O resto do post do blog é uma boa leitura, e eu recomendo. Ele dá algumas dicas sobre os desafios de programação com os quais o Facebook lida e como eles estão tentando resolver esses problemas.

    
por 19.11.2012 / 19:59
fonte
19

Just program in c++? Surely there must be SOME errors/bugs when hitting a magic compiler button that ports PHP to c++ code , right?

Certo, mas programar em C ++ implicaria a substituição de toda a base de código existente - uma idéia mundialmente conhecida por ser completamente estúpida e devastadora.

If this impressive converter works so nicely, why stick to PHP at all? Why not use something like Ruby or Python? Note -- I picked these two at random, but mostly because nearly everyone says coding in those languages is a "joy". So why not develop in a super great language and then hit the magic c++ compile button?

Porque isso implicaria, novamente, a substituição de sua base de código PHP existente.

Em um mundo ideal, eles simplesmente codificam em C ++ a partir do zero. Infelizmente, porque eles têm um shitload de código existente no PHP, isso não é possível. Então, ao invés disso, eles discutem o problema. É muito mais barato.

    
por 19.11.2012 / 19:55
fonte
8

“De fato, por que não trabalhar diretamente na montagem, já que o código C ++ é traduzido em instruções de código de máquina?”

- Que, em sua essência, é o que o argumento reduz a. E espero que isso torne óbvio o porquê disso:

  • Um conjunto de habilidades (vastamente!) diferente é necessário para programar em assembly (C ++) do que em C ++ (PHP).
  • É potencialmente muito mais difícil programar, por diversos motivos
  • O código produzido por um assembler / compilador pode não ser legível (speak: maintainable), mesmo que você possa , do zero, escrever programas legíveis em assembly (C ++).
por 21.11.2012 / 00:58
fonte
5

Não estou no Facebook, mas meu melhor palpite sobre os motivos seria "evitar riscos significativos". Nesse ponto, mudar para um idioma diferente não é mais uma decisão de tecnologia: acima de tudo, é uma decisão comercial.

Quando você é uma grande empresa que cresceu organicamente ao tamanho de FB, você lentamente atrai pessoas que ganham experiência em sua plataforma de programação (no caso do FB, isso é PHP). Um por um, você obtém alguns milhares de funcionários com grande conhecimento em PHP. Neste ponto, a mudança para qualquer outro idioma se torna muito perigosa: seus engenheiros não estarão preparados para o novo ecossistema e poderão exigir um tempo significativo para atingir o nível de especialização exigido por seus trabalhos atuais, quanto mais melhorar suas habilidades.

Deixando de lado os méritos relativos do PHP e das linguagens alternativas, com a quantidade de investimento que o FB fez na tecnologia PHP, seria arrogante demais pensar que um switch seria indolor e muito tolo para tentar. Nos negócios, a tecnologia é um meio para um fim, então a "alegria" da programação nem entra em discussões.

    
por 19.11.2012 / 19:56
fonte
4

Eu posso pensar em apenas um site importante que foi implementado em C ++. H2G2

Mesmo assim, a implementação atual é, na verdade, um interpretador com um grande número de funções de manipulação de texto e banco de dados embutidas (isso não soa nem um pouco como o início do PHP :-)).

O Facebook está satisfeito com a funcionalidade do site. Eles cresceram até o ponto em que o PHP não pode suportar os volumes que processam. Daí a compilação de lá PHP em C ++ daí código de máquina. O poderia ter escrito um compilador completo para o PHP, mas eles teriam perdido os 20 anos de otimização sutil que foram para a pilha do compilador gcc. O ponto é que o código "C ++" não deve ser legível ou manejável por humanos, é apenas um passo intermediário no caminho para o código de máquina.

Como muitos programadores neste site, sinto que você subestima a quantidade de trabalho investido na lógica e na funcionalidade de negócios incorporada em aplicativos existentes e o código de valor para seu próprio benefício.

    
por 20.11.2012 / 03:20
fonte