DropboxではPythonが大好きで、Pythonでできることは何でもやろうとしています。しかし、規模が大きくなり、対処すべき問題が増えるにつれて、Pythonを使い続けてパフォーマンス目標を達成することが非常に困難な場合があることに気づき始めました。他の言語に書き換えてもあまり役に立たないこともありました。私は個人的にPythonが大好きで、何かを書き直そうと決めるたびに傷つくので、何とかしたいと思いました。静的コンパイルに関する無駄な作業をした後、周りを見渡して、JIT技術がJavascriptで大きな成功を収めていることに気づきました。特にChromeのV8エンジンはJavascriptのパフォーマンスを大幅に向上させました。特にChromeのV8エンジンはJavascriptのパフォーマンスを大幅に改善しました。
Pystonはまだ初期段階にあり、使用できる状態ではありません。しかし、願わくば、PythonやJITのコミュニティと協力して開発できるように、ライフサイクルの初期に、早く発表されることを願っています。このブログには詳細が多すぎますが、なぜ新しいPython実装が必要なのか、そしてPystonがどのように動作するのかについて少し述べたいと思います。
新しいPythonインタプリタの実装を選んだ理由
トレースJITを使ってパフォーマンスを向上させたり、JythonやIronPythonはどちらもJITをサポートした仮想マシン上で作られています。では、なぜ新しい実装を作る価値があるのでしょうか?
簡単に言えば、ほとんどの有望な技術は既存の実装と互換性がないと考えられているからです。例えば、JavascriptのコミュニティがトレースJITからメソッドアットアタイムJITに切り替えたのは、強力なパフォーマンス上の利点があったからです。同じ性能上の利点がPythonにも当てはまるかどうかは議論の余地がありますが、これらのパスはどちらも根本的に既存の実装と互換性がないので、答えは新しいメソッドアットアタイムJITを構築することです。
もう一つの違いは、正しいかどうかです。繰り返しになりますが、これがより良いアプローチかどうかを現時点で知る術はありませんが、既存の実装ではテストが難しいJITにとって、この判断は不可欠です。
ゼロから始めることの欠点は、新しい言語実装を作るのは間違いなく大仕事だということです。幸いなことに、このプロセスを支援するツールがいくつか登場し始めています。特にPystonはPythonの上に構築されているため、細かい部分を自分で処理することなく、上位レイヤーの高品質なコードを生成することが可能です。それでも、新しいPythonの実装は巨大な仕事なので、Pysonはすぐには利用できません。
仕組み
トップレベルでは、PystonはパースされたPythonコードをLLVMの中間コードに変換します。中間コードはLLVMによって最適化され、実行可能なマシンコードを生成するためにLLVMのJITエンジンに渡されます。LLVMには、非常に高速なコードを生成することを可能にする多くの最適化ステップとメカニズムが含まれています。
しかし問題は、LLVMがPythonのコードをプッシュ出力できないことです。なぜなら動的言語は、その基本的な振る舞いをすべて型割り当ての後ろに隠さなければならないからです。この問題を解決するために、Pystonは型推論を採用しています。変数が特定の型になることを証明することはしばしば不可能ですが、Pystonはあるオブジェクトがどの型になるかを、いくつかの明確な事実に基づいて予測することができます。予測が行われると、Pystonは実行時にその予測を検出し、予測が行われた場合は高速分岐を、予測が失敗した場合は低速分岐を選択します。
Pystonには他にも、隠しクラスや、プロパティの高速検索やメソッドの高速呼び出しのために設計されたインラインキャッシュなど、多くの最新のテクニックが含まれています。これらのテクニックの詳細については、別の記事で紹介しています。
ステータス
Pystonはまだ発展途上で、Python言語の最小限のサブセットしかサポートしていません。1)Pystonは十分な規模のベンチマークをサポートしていないので、これは代表的なものではありません、2)Pystonはすべてのランタイム機能をサポートしているわけではないので、これは同程度の比較ではありません。 これら2つの注意点を考慮すると、Pystonは通常CPythonに性能で勝つことができますが、それでもPyPyよりは弱いです。
コードはApache 2.0ライセンスで、技術文書も追加中です。やるべきことはまだたくさんあり、チームは拡大中です:この種のことに興味がある方は、どうぞ!
プロジェクトの進展にご期待ください。また、メーリングリストへの登録も可能です。





