メタサーキュラーインタープリター、仮想マシン、パフォーマンスの向上の関係は何ですか?


12

私はWeb上のメタ循環インタープリター(SICPを含む)について読み、いくつかの実装(PyPyやNarcissusなど)のコードを調べました。

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

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

また、Smalltalkの研究により、JIT、仮想マシン、リフレクションの間に関係があると信じるようになりました。JVMやCLRなどの仮想マシンは、大量の型内観を許可し、Just-in-Time(およびAOT、私はそうですか?)コンパイルでそれを大いに活用すると信じています。しかし、私の知る限り、仮想マシンは基本的な命令セットを持っているという点で、CPUのようなものです。仮想マシンには、言語に依存しないリフレクションを可能にするタイプおよび参照情報が含まれているため、効率的ですか?

インタプリタ言語とコンパイル言語の両方がバイトコードをターゲット(LLVM、Parrot、YARV、CPython)として使用しており、JVMやCLRなどの従来のVMのパフォーマンスが信じられないほど向上したためです。私はそれがJITについてだと言われましたが、私が知る限り、JITはJavaの前にSmalltalkとSunのSelfがそれを行っていたので、新しいものではありません。過去にVMのパフォーマンスが特に良くなかったことを覚えていません。JVMや.NET以外に学術的なものは多くなく、それらのパフォーマンスは間違いなく今ほど良くありませんでした個人的な経験から話してください)。

その後、突然、2000年代後半に何かが変わり、確立された言語でさえ多くのVMがポップアップし始め、非常に優れたパフォーマンスを発揮しました。ほとんどすべての最新のVMのパフォーマンスが飛躍的に向上したJIT実装について何か発見されましたか?紙か本か?


3
お金。C ++およびFortranに注ぎされる使用は、現在等のHotSpot、CLR、モノ、V8、ニトロ、SpiderMonkeyの、中に注ぎ、そのお金
イェルクWミッターク

私は推測することしかできませんが、ここで説明されているように、時間の経過とともに改善されるだけだと思いますjoelonsoftware.com/articles/fog0000000017.html
Doc Brown


1
@Gomi実装言語が実装言語にどれほど似ているかではありません。JavaScript、Lisp、Prolog、SmallTalk、RubyインタープリターがRPythonで作成されており、PyPyが提供するものとまったく同じ利点があります。RPythonがPythonに基づいている唯一の理由は、多くのPython愛好家によって作成されたということです。PyPyを高速にするRPythonの機能は、Pythonとは何の関係もありません。自動JITコンパイラー生成、ガベージコレクターなどです。そして、そのほとんどは原則として他の言語を使用して実行できます。ただし、まったく新しいコンパイラを作成する必要があります。

4
-1 ここに少なくとも3つの異なる質問があるように見えるため:(a)メタサーキュラー実装はなぜそんなに良いのですか (b)タイプ情報のためにVMは効率的ですか?また、イントロスペクションはパフォーマンスに有益ですか?(c)2000年代後半にVMの人気が急上昇したのはなぜですか?これらの質問は個別に行ったほうがいいと思います。
オーク

回答:


1

3つのうち2つ:「メタ循環」言語ランタイムと「高性能」言語ランタイムの間に関係はありません。高性能を実現するメタ循環ランタイムは、ネイティブコードにJITコンパイルし、ネイティブコードを実行することで実現します。あなたのhi-perf PythonランタイムをPythonやLispのLispなどで書かなければならない理由はありません。しかし、あなたの言語が他の言語よりも強力で表現力があると思うなら、それを使って書かないでください。独自のランタイム?または、あなたの言語が他の言語よりも何らかの形で「優れている」と思わない場合、なぜそれを実装するのに苦労するのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.