web-dev-qa-db-ja.com

FacebookがPHPコードをC ++に変換するのはなぜですか?

私はFacebookがPHPで始まったことを読んだ後、速度を上げるために、PHPをC++コードとしてコンパイルしています。

  1. C++でプログラムするだけですか?確かに、PHPをc ++コードに移植する魔法のコンパイラボタンを押すと、いくつかのエラー/バグがあるはずですよね?

  2. この印象的なコンバーターが上手く機能するのであれば、なぜPHP=に固執するのですか?RubyまたはPythonのようなものを使用しないのですか?注-これら2つをランダムですが、ほとんどの場合everyoneは、これらの言語でのコーディングは「喜び」であると述べています。

42
user72245

彼らはしません。少なくとも、少なくとも。そのようにすると、デプロイメントの頭痛や、スクリプト言語を最初に使用することの主な利点の1つを無効にするなど、多くの問題が発生します-再コンパイルする必要なくスクリプトを変更できるため- 彼らはHipHopシステムをVM透過的なJITフェーズを備えたアーキテクチャに改造し、 )、C++コンパイラを非推奨にしました。

興味深いことに、この方法で行うことは、元のC++トランスコンパイルアプローチの約2倍の速度(パフォーマンスの場合と同様)でもあります。

65
Mason Wheeler

FacebookのシニアエンジニアHaiping Zhaoがおそらく 質問に答えます 最高です。

  1. HipHopは、プログラムでPHPソースコードを高度に最適化されたC++に変換し、g ++を使用してそれをコンパイルします。HipHopは、意味的に同等の方法でソースコードを実行し、eval()などのほとんど使用されない機能を犠牲にします。 —パフォーマンスの向上と引き換えに。

  2. これらの非効率性に対処する1つの一般的な方法は、PHPアプリケーションをC++で直接PHP Extensions。として書き換えることです。これにより、主にPHPフロントエンドHTMLとC++のアプリケーションロジックの間のグルー言語に変換します。技術的な観点からはこれはうまく機能しますが、アプリケーション全体で作業できるエンジニアの数を大幅に減らします。

ブログ記事の残りの部分はよく読んでおり、私はそれをお勧めします。 Facebookが対処するプログラミングの課題と、それらの問題への取り組み方についての洞察が得られます。

34
user53019

C++でプログラムするだけですか?確かに、PHPをc ++コードに移植する魔法のコンパイラボタンを押すと、いくつかのエラー/バグがあるはずですよね?

そうですが、C++でのプログラミングでは、既存のコードベース全体を置き換える必要があります。これは、まったく愚かで破壊的なことで世界的に有名なアイデアです。

この印象的なコンバーターが上手く機能するのであれば、なぜPHP=に固執するのですか?RubyまたはPythonのようなものを使用しないのですか?注-これら2つをランダムですが、ほとんどの場合、ほとんどの人がこれらの言語でのコーディングは「喜び」だと言っているので、超すばらしい言語で開発してから、魔法のc ++コンパイルボタンをクリックしてみませんか?

これも、既存のPHPコードベースを置き換える必要があるためです。

理想的な世界では、C++で最初からコーディングするだけです。残念ながら、PHPには既存のコードのシットロードがあるため、それは不可能です。代わりに、彼らは問題をハッキングします。それだけではるかに安いです。

19
DeadMG

「確かに、C++コードは最終的に機械語命令に変換されるので、なぜ直接アセンブリで動作しないのですか?」

–それは、本質的に、議論が減少するものです。そしてうまくいけば、これがなぜそれが行われないのかを明らかにします:

  • アセンブリ(C++)でプログラミングするには、C++(PHP)と(実質的に)異なるスキルセットが必要です。
  • さまざまな理由により、プログラミングが非常に困難になる可能性があります
  • canを最初からアセンブリ(C++)で読み取り可能なプログラムに書き込んだとしても、アセンブラ/コンパイラによって生成されたコードは人間が読み取れない(話す:保守可能)可能性があります。
8
Konrad Rudolph

私はFacebookにはいませんが、動機については、「重大なリスクを回避すること」が私の推測です。この時点で、別の言語に切り替えることはもはや技術的な決定ではなく、とりわけビジネス上の決定です。

あなたがFBの規模まで有機的に成長した大企業である場合、あなたはゆっくりとあなたのプログラミングプラットフォーム(FBの場合、それはPHP)の専門知識を得る人々を引き付けます。 PHPの優れた専門知識を持つ数千人の従業員を1人ずつ獲得します。この時点で、他の言語への切り替えは非常に危険になります。エンジニアは新しいエコシステムに追いつくことができず、スキルの向上はもちろん、現在の仕事で要求される専門知識のレベルを達成するためにかなりの時間が必要になる場合があります。

PHPと代替言語の相対的なメリットは別として、FBがPHPテクノロジー)に投入した投資額を考えると、切り替えは苦痛がなく、愚かすぎて試してみることができません。ビジネスでは、テクノロジーは終わりを意味するものであるため、プログラミングの「喜び」さえも議論に加わることはありません。

5
dasblinkenlight

C++で実装された主要なWebサイトは1つしか考えられません。 H2G2

それでも、現在の実装は、実際には多数のテキストおよびデータベース操作関数が組み込まれたインタープリターです(これは少し初期のPHP :-)のように聞こえません)。

Facebookは彼らのウェブサイトの機能に非常に満足しています。それらは、Vanilla PHPが処理するボリュームをサポートできないポイントまで成長しました。したがって、そこにコンパイルするPHP C++からマシンコードに変換します。 PHP用の完全なコンパイラを記述しましたが、gccコンパイラスタックに組み込まれた20年間の微妙な最適化を見逃していたでしょう。要点は、「C++」コードは人間が読み取り可能または保守可能であることを意図しておらず、単なる中間的なものですコードを機械加工する方法に進みます。

このサイトの多くのプログラマーと同じように、既存のアプリケーションに組み込まれているビジネスロジックと機能に費やされた作業の量、そしてそれ自体のためにコードを重視していると感じます。

4
James Anderson