We report on results for both, with and without just-in-time compilation. The specific focus for this work was pure interpreter performance in the context of metacompilation systems, but before compilation had a chance to kick in.
For both RPython and Truffle/Graal, it's possible to disable the JIT compilers and measure pure interpreter speed.
So the "baseline" is Java - is that Java compiled or interpreted? And if the latter, is the non-JIT-ted Graal interpreter compiled (as Java) and interpreting the script, or is it interpreted itself?
The figure for the JIT-compiled numbers uses a standard HotSpot JVM, with JIT compilation. The figures for the interpreter numbers uses a standard HotSpot JVM with the -Xint flag, so, only using the Java bytecode interpreter.
The TruffleSOM interpreter is AOT-compiled, so, it's a native binary, which is then interpreting the SOM code.
It uses some custom language (SOM), built the AST/bytecode interpreters for that on top of other systems (GraalVM and RPython) which prohibits some optimizations and may use some intermediate format (Graal IR).
And then compares results using a limited set of benchmarks (Are We Fast Yet).
Interesting, but all in all it's not saying much (imho).
As so often: devil is in the details.
SOM is the language being implemented, it's not used to build the interpreters.
But please feel free to replicate the study for your preferred language. I am happy to discuss more about why we made certain choices.
https://en.wikipedia.org/wiki/Partial_evaluation#Futamura_pr...
(1) https://www.graalvm.org/latest/graalvm-as-a-platform/languag...
By the way there's an excellent series of articles about implementing an interpreter with Truffle by Adam Ruka: https://www.endoflineblog.com/graal-truffle-tutorial-part-12...
Definitely. The title of the linked paper is a lot more reasonable:
> AST vs. Bytecode: Interpreters in the Age of Meta-Compilation
it's a shame the author decided to go with a clickbait version for his blog entry.