I saw that somewhere before, let me see if I can find it.
EDIT: https://blog.cloudflare.com/building-fast-interpreters-in-ru...
I saw that somewhere before, let me see if I can find it.
EDIT: https://blog.cloudflare.com/building-fast-interpreters-in-ru...
There are a bunch of reasons we did eventually give up on the AST interpreter, but one of the biggest was that by the end we were seeing more than of 15% of runtime being just the call+return overhead. But there are a bunch of other things that make bytecode better: the AST interpreter is inherently recursive so it wasn't uncommon to have code that would fail in JSC due to stack overflows because an expression like `function f() {a(b(c(df()))}` would fundamentally 5x the recursive calls per js call (this is just to give you an idea of how recursive things were, the example above strictly always overflows). The bytecode also made it much easier to perform some inter-expression optimision under the latency requirements of a js interpreter, as well as reducing the GC costs with JSC (JSC uses a conservative collector that does stack scanning).
Combined with a meta-compilation system I believe it would be a fairly efficient way to implement a tree-walking interpreter.
[0] https://blog.reverberate.org/2021/04/21/musttail-efficient-i...