私は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実装について何か発見されましたか?紙か本か?