Internals

JavaScript is portable; runtimes are not. What ties a runtime to its engine is everything it asks for beyond the language: who owns a value and for how long, how native code gets called, what a module is, what a snapshot captures. deno_core asks for all of it through rusty_v8, and v8x answers with a different engine underneath. One page per obligation:

  1. Architecture: the boundary v8x preserves
  2. Handles: value ownership across two garbage collectors
  3. Callbacks and exceptions: crossing the native boundary without losing state
  4. Modules: keeping identity across compile, instantiate, evaluate
  5. Snapshots: booting from state no engine can serialize alone
  6. WebAssembly: a second runtime behind the same object API

The pages read best in order. Each one links to the next.