web-dev-qa-db-ja.com

メタサーキュラーインタープリター、仮想マシン、パフォーマンスの向上にはどのような関係がありますか?

Web(SICPを含む)でメタサーキュラーインタープリターについて読み、いくつかの実装(PyPyやNarcissusなど)のコードを調べました。

LISPとSmalltalkのメタサーキュラー評価を活用した2つの言語についてはかなり読みました。私が理解している限り、LISPは最初のセルフホスティングコンパイラであり、Smalltalkは最初の「真の」JIT実装を備えていました。

私が完全に理解していないことの1つは、これらのインタープリター/コンパイラーがどのようにして非常に優れたパフォーマンスを達成できるか、つまり、なぜPyPyがCPythonよりも速いのかということです。それは反射のせいですか?

また、Smalltalkの調査の結果、JIT、仮想マシン、リフレクションには関係があると思いました。 JVMやCLRなどの仮想マシンは、型のイントロスペクションを大幅に可能にし、ジャストインタイム(そしてAOTだと思いますか?)コンパイルでそれを有効に活用していると思います。しかし、私の知る限りでは、仮想マシンは基本的な命令セットを備えているという点で、CPUのようなものです。言語にとらわれないリフレクションを可能にするタイプとリファレンス情報が含まれているため、仮想マシンは効率的ですか?

インタプリタ言語とコンパイル言語の両方がターゲットとしてバイトコードを使用しているため(LLVM、Parrot、YARV、CPython)、JVMやCLRなどの従来のVMのパフォーマンスが大幅に向上したため、これを質問します。私はそれがJITについてであると言われましたが、SmalltalkとSun自身のSelfがJavaの前にそれをしていたので、私が知る限り、JITは新しいものではありません。 VMが過去に特にうまく機能したことを覚えていません。JVMや.NET以外の非学術的なものは多くなく、それらのパフォーマンスは現在ほど確かに良くありませんでした(この主張を入手できればいいのですが、私は個人的な経験から話す)。

その後、突然、2000年代後半に何かが変化し、確立された言語でも多くのVMがポップアップし始め、非常に優れたパフォーマンスが得られました。現代のほとんどすべてのVMがパフォーマンスを飛躍的に向上させることを可能にするJIT実装について何か発見されましたか?紙または本でしょうか?

12
Gomi

3つのうち2つ:「メタサーキュラー」と「高性能」の言語ランタイムの間には関係はありません。高いパフォーマンスを実現するメタサーキュラーランタイムは、ネイティブコードにJITコンパイルして、ネイティブコードを実行することで実現します。 hi-perf PythonランタイムをPython、またはLISPのLISPなどで記述する必要がある理由はありません。ただし、言語がより強力で表現力があると思われる場合などは、他の人、それを使用して独自のランタイムを作成してみませんか?しないでください自分の言語が他の人よりも「優れている」と考える場合、なぜそれを実装するのは面倒です?

1
Alex D