A decent part of VMs being faster than AST interpreters is just memory layout AIUI. VM instructions are largely flat arrays, so there's less pointer chasing.