Skip to content

Runtime: add versioned bytecode, realm snapshots, and AOT artifacts #499

Description

@chrisbbreuer

Parent: #459
Depends on: #465, #479, #480, #483, #498
Related: #481, #496, #500

Goal

Add versioned portable bytecode, immutable realm/bootstrap snapshots, and optional ahead-of-time artifacts for fast startup and restricted-JIT deployments.

Scope

  • Define a deterministic serialized format for validated bytecode, constants/names, lexical metadata, source locations/maps, exception handlers, module metadata, feature/options keys, and integrity checks.
  • Snapshot only immutable or explicitly copy-on-write realm bootstrap state: builtin bytecode/templates, canonical atoms/shapes, generated tables, and read-only metadata. Per-realm globals, prototypes, registries, jobs, handles, GC state, and mutable caches remain isolated.
  • Support compile-once/load-many APIs for scripts/modules and owned build-time AOT generation where platform policy permits.
  • Version artifacts by zig-js format, engine semantics, target/options/features, owned dependency revisions, generated-data versions, and backend/CPU features.
  • Validate lengths, offsets, graphs, maps, relocations, stack limits, signatures, hashes, and resource bounds before allocating/publishing.
  • Integrate precise GC roots, debugger/source registration, invalidation, code-cache eviction, memory pressure, and exact teardown.
  • Measure serialization/build cost, load/start latency, cold evaluation, code/bytecode bytes, mapped/retained RSS, and cache hit/miss behavior.

No-workaround rules

  • No raw pointer/layout dump, trusted unchecked cache, source/hash collision shortcut, hidden pre-created mutable Context, precomputed benchmark output, native artifact loaded on an incompatible CPU, or compilation moved outside an existing cold timer without a separately labeled precompiled mode.

Acceptance

  • Format specification, schema/version inventory, deterministic encoder, hostile decoder tests, and reproducible fixture hashes are checked in.
  • Fresh compile and serialized/AOT load execute exact semantic, exception, source/debugger, step, GC, no-GIL, and teardown differentials.
  • Corrupt, stale, wrong-option, wrong-dependency, wrong-target, and oversized artifacts fail closed before execution.
  • Repeated realms prove mutable-state isolation and bounded shared immutable lifetime.
  • Bench: define the representative dependency-free performance matrix #460 publishes separate cold-source, cold-precompiled, and warm-cache panels with all build/load work and memory boundaries explicit.
  • Restricted platforms consume portable artifacts through VM: build a fast no-JIT execution tier for restricted hosts #498 without claiming native JIT execution.

Foundation

Bytecode ownership is defined in src/bytecode.zig; cold lifecycle and bounded cache policy are tracked by #479/#480.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestperformanceMeasured runtime, memory, scaling, or build performanceplatformArchitecture and operating-system backend supportruntimeJavaScript runtime and builtin implementation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions