同じ言語での言語の実装は、どのように言語よりも高速になることができますか?

StackOverflow https://stackoverflow.com/questions/9379560

質問

私が作ったら JVMのJVM, 、たとえば、実際に行った実装を行うことは可能ですか もっと早く 元の実装よりも 使った この実装を構築するために、私の実装は元の実装の上に構築されており、その実装に依存する可能性がありますか?

(紛らわしい...)

見る パイキー. 。 Pythonで作られたPythonのJITコンパイラです。それは大丈夫ですが、どうすればそうなると主張することができますか もっと早く 使用していて依存しているPythonの元の実装よりも?

役に立ちましたか?

解決

あなたはaの間で混乱しています 言語 そしてその 実行装置 その言語のために。

PypyがCpythonよりも速くなる理由の1つは、Pypyが完全に独立したネイティブ実行可能ファイルにコンパイルされており、Cpythonに依存したり実行したりしないためです。

それにもかかわらず、高レベルの通訳者がより効率的な実行戦略を利用した場合、1つの言語の非効率的な実装がその同じ言語で書かれ、非効率的な通訳でホストされている通訳によって超えることが可能です。

他のヒント

絶対に可能です。 JVMの実装は、Javaバイトコードを最適化されたマシンコードにコンパイルする可能性があります。 Optimizerがより洗練されていた場合、JVAコンパイラを実行するJVM実装では、最終結果が高速になる可能性があります。

その場合、Javaコンパイラを実行できます 独自のソースコードで, 、そしてそれ以降のより速い編集速度の恩恵を受けます。

PypyはPythonのJITコンパイラだと言いました(私は自分で馴染みがありません)。その場合、Pythonプログラムをマシンコードに変換し、マシンコードを実行します。別のポスターによると、PypyコンパイラはCpythonとは別のスタンドアロンの実行可能ファイルとして実行されていると言いました。しかし、たとえCPYThonで実行されたとしても、プログラムがマシンコードを作成し、コンパイルされたマシンコードが実行されていると、コンパイラのパフォーマンスは問題ではありません。コンパイラの速度は、起動時間にのみ影響を及ぼします。

PypyはPythonで実装されたPythonインタープリターではなく、Pythonインタープリターとコンパイラが実装されています rpython, 、これはPythonの制限された静的にタイプされたサブセットです。

Rpythonは、静的分析に適しているPythonの制限付きサブセットです。言語に追加されており、いくつかのことは驚くべきことに機能するかもしれませんが、これは考慮すべき制限の大まかなリストです。あなたが行くときに遭遇する特別なケースの制限がたくさんあることに注意してください。

実際の速度の違いは、プログラム全体をbytecodeとして解釈しているCpythonとは異なり、Pypyが使用するという事実から生じます。 ジャストインタイム(JIT)コンピレーション (マシンコードに)Rpython部品の場合。

その言語の言語に通訳を実装することは不可能だと思います(これをaと呼びます)。その後、その言語の別の既存のインタープリター(このbを呼び出す)の上で実行し、プログラムを実行する(このpを呼び出す)、そして、Pを実行してください(bで走っています)は、Bで実行されるPよりも速くなります

Aのすべての操作は、Bの少なくとも1つの操作で実装する必要があります。したがって、Bが凶悪に悪く、Aが最適に良好であっても、AがBで実行されているという事実は、Bの悪さがAを遅くすることを意味します。 。

JITコンパイラが実行時に他のより高速なコードを生成し、Pを実行する(bで実行されている)を実行する(bで実行されている)、Bを実行するよりも速くするために、言語自体の言語にインタープリター + JITコンパイラを実装することが可能です。コンパイルされていないPのランタイムの部分は遅くなります(多くの しかし、通常は遅くなります)しかし、JITコンパイラがPの「ホット」部分を正常に識別し、Bよりも迅速に実行すると、システム全体が全体的に速く実行される可能性があります。

しかし、それはあまり面白くありません。また、その言語(c)に言語のコンパイラを実装し、既存のコンパイラ(d)でコンパイルし、元のコンパイラーが生成したものよりも速い新しいコンパイラ言語生産コードを持つこともできます。それがあなたを驚かせないことを願っています。 Dによって放出されるコードの速度は、Cの実行時間にのみ影響を与えることは明らかです。

彼らがコンパイルする言語のコンパイラを書くことは何十年もの間行われてきました(たとえば、GCCはCで書かれています)。どちらも、それ自体を使用して言語をコンパイルすることはありません。どちらの場合も、基礎となる実行は、あなたが検討している言語以外のものです。通常、マシンコード。

しかし、あなたの質問の原因は誤解です。 PypyのPythonインタープリターは、実際にはPythonで実装されていません。 Pypyプロジェクトには、Python用の通訳があります rpython. 。 RpythonはPythonのサブセットであり、マシンコードに効率的にコンパイルできるように選択されています。言語として、rpythonは、ブレースの代わりにタイプの推論とインデントブロックを備えたJavaにはるかに似ています。 Pypyプロジェクトには、Pythonで書かれたRpython用のコンパイラもあり、JITコンパイラを(ほとんど)自動的に追加できるようになります。 どれか コンパイルするインタープリター。

実際に生産でPypyインタープリターを使用している場合、rpythonソースからコンパイルされたマシンコードインタープリターを使用しています。CPythonインタープリターを使用しているときと同じように、Cソースコードからコンパイルされたマシンコードインタープリターを使用します。別のPythonインタープリターの上にPypyインタープリターを実行する場合(有効なRpythonコードも有効なPythonコードであるため、これを行うことができます。 いいえ その他の方法)、それから、Cpython通訳よりもはるかに遅くなります。

Pypy翻訳プロセスはCpythonで実行されますが、出力は.cファイル(最後にチェックしたときに19ファイル)のリストであり、バイナリ:pypy-cにコンパイルされます。ランタイムでは、Pypy-CはCpythonとの関係がないため、より速くなる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top