Perché Facebook converte codice PHP in C ++? [chiuso]

41

Ho letto che Facebook è iniziato in PHP, e quindi per guadagnare velocità, ora compilano PHP come codice C ++. Se è così, perché non lo fanno:

  1. Basta programmare in c ++? Sicuramente ci devono essere alcuni errori / bug quando si colpisce un pulsante del compilatore magico che porta PHP in codice c ++, giusto?

  2. Se questo impressionante convertitore funziona così bene, perché attenersi a PHP? Perché non usare qualcosa come Ruby o Python? Nota: li ho scelti a caso, ma soprattutto perché quasi tutti tutti dicono che codificare in quelle lingue è una "gioia". Quindi, perché non sviluppare un linguaggio superbo e poi premere il magico pulsante di compilazione c ++?

posta user72245 19.11.2012 - 19:44
fonte

6 risposte

65

Non lo fanno. Non più, almeno. Risulta che farlo in questo modo causa troppi problemi, tra cui mal di testa di distribuzione e annullando uno dei vantaggi principali dell'uso di un linguaggio di scripting in primo luogo - essere in grado di cambiare gli script senza doverli ricompilare - quindi hanno rinnovato il sistema HipHop in un'architettura VM con una fase JIT trasparente, e hanno deprecato il compilatore C ++.

È interessante notare che apparentemente farlo in questo modo è anche due volte più veloce (come in performant) dell'approccio trans-compilation C ++ originale.

    
risposta data 19.11.2012 - 23:10
fonte
34

Haiping Zhao, Senior Engineer di Facebook probabilmente risponde alle tue domande migliore.

  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.

Il resto del post del blog è una buona lettura e lo raccomando. Fornisce alcune informazioni sulle sfide di programmazione che Facebook affronta e su come stanno cercando di risolvere questi problemi.

    
risposta data 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?

Giusto, ma la programmazione in C ++ comporterebbe la sostituzione dell'intera base di codice esistente, un'idea famosa in tutto il mondo per essere completamente stupida e devastante.

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?

Perché ciò comporterebbe ancora una volta la sostituzione della base di codice PHP esistente.

In un mondo ideale, inseriscono semplicemente codice in C ++ da zero. Sfortunatamente, dato che hanno uno shitload di codice esistente in PHP, non è possibile. Così, invece, hanno risolto il problema. È molto più economico.

    
risposta data 19.11.2012 - 19:55
fonte
8

"In effetti, perché non lavorare direttamente in assembly, dal momento che il codice C ++ viene tradotto in istruzioni di codice macchina?"

- Questo, nella sua essenza, è ciò a cui l'argomento si riduce. E, si spera, questo rende ovvio il motivo per cui non è stato fatto:

  • È necessario un set di abilità (enormemente!) diverso per programmare in assembly (C ++) rispetto a C ++ (PHP).
  • È potenzialmente molto più difficile da programmare, per una serie di motivi
  • Il codice prodotto da un assemblatore / compilatore potrebbe non essere leggibile dall'uomo (parlo: mantenibile), anche se può , da zero, scrivere programmi leggibili in assembly (C ++).
risposta data 21.11.2012 - 00:58
fonte
5

Non sono su Facebook, ma la mia ipotesi migliore per i motivi sarebbe "evitare rischi significativi". A questo punto, passare a una lingua diversa non è più una decisione tecnologica: soprattutto, è una decisione aziendale.

Quando sei una grande azienda che cresce organicamente alle dimensioni di FB, attrai lentamente le persone che acquisiscono esperienza nella tua piattaforma di programmazione (nel caso di FB, è PHP). Uno per uno, si ottengono poche migliaia di dipendenti con grande esperienza in PHP. A questo punto, il passaggio a qualsiasi altra lingua diventa molto pericoloso: i tuoi ingegneri non saranno al passo con il nuovo ecosistema e potrebbero aver bisogno di molto tempo per raggiungere il livello di esperienza richiesto dai loro attuali posti di lavoro, per non parlare del miglioramento delle loro competenze.

Lasciando da parte i meriti relativi di PHP e dei linguaggi alternativi, con la quantità di investimenti fatti dalla FB nella tecnologia PHP, sarebbe troppo arrogante pensare che un cambiamento sarebbe indolore e troppo sciocco per provarlo. Negli affari, la tecnologia è un mezzo per la fine, quindi la "gioia" della programmazione non entra nemmeno nelle discussioni.

    
risposta data 19.11.2012 - 19:56
fonte
4

Posso pensare a un solo sito Web principale che è stato implementato in C ++. H2G2

Anche in questo caso l'attuale strumento di implementazione è in realtà un interprete con un gran numero di funzioni di manipolazione di testo e database incorporate (non sembra un po 'come PHP e all'inizio :-)).

Facebook è abbastanza soddisfatto della funzionalità del loro sito web. Sono appena cresciuti al punto in cui vanilla PHP non può supportare i volumi che elaborano. Da qui la compilazione del codice PHP in C ++ thence. Avrebbe potuto scrivere un compilatore completo per PHP, ma si sarebbero persi i 20 anni di ottimizzazione sottile introdotti nello stack del compilatore gcc. Il punto è che il codice "C ++" non è inteso per essere leggibile o manutenibile, è solo un passaggio intermedio sulla strada per il codice macchina.

Come molti programmatori di questo sito, ritengo che tu sottovaluti la quantità di lavoro investito nella logica di business e nelle funzionalità incorporate in applicazioni esistenti e, codice di valore fine a se stesso.

    
risposta data 20.11.2012 - 03:20
fonte

Leggi altre domande sui tag