Hi John,
Bytecode compilation and execution is a form of interpretation. Direct interpretation is line-by-line parsing and execution based on in-place evaluation; this is how Eros says his thinBasic works. Bytecode requires precompilation of ultimately all tokens in the script into a binary tree of intermediate code that makes your "virtual machine" jump from one place to another following the already hard-wired program logic and execute utility routines that correspond to this or that high-level command. (please see Ed Davis' toy interpreter I ported to O2; it's a full-blown bytecode compilation and interpretation system)
Even though it's faster than direct interpretation, it's interpretation nonetheless and it is also slow as compared to low-level true machine code that a jitter generates. A bytecode compiler/interpreter would execute an entire subroutine to just add 1 and 1 together while machine code would execute just one CPU instruction, inc eax.
FBSL's bytecoded BASIC is the bottleneck of the entire system. There are even a couple cases when it falls back to direct interpretation when executing For, Do While/Until, and While commands (but not the code within the loops per se, which is bytecoded!). It will all be hopefully substituted with yet another JIT compiler -- BASIC jitter -- in FBSL v4. I mean, hopefully.