This seems to produce faster running code, but imposes some "gotchas", as variable binding within script blocks happens at compile time before variables are populated. Variable types that are passed by value will be null if you don't re-close the script block over the variables at run time.
I not familiar with it, so maybe it’s some hybrid of the two. But I doubt it, otherwise you lose advantages of a common interpreter sharing running code between multiple apps. Then again it may use some new way of executing code I’m unaware of. Maybe someone can chime in with more knowledge of how it works?