Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d730a3e
docs(vm): define architecture and issue acceptance contracts
Eric-Song-Nop Sep 12, 2026
778baa5
chore: remove Tachyon benchmark tooling
Eric-Song-Nop Sep 12, 2026
4f35b5f
docs: remove benchmark results from the VM design PR
Eric-Song-Nop Sep 12, 2026
a595ffb
docs(vm): consolidate stack VM plan and module documentation
Eric-Song-Nop Sep 12, 2026
b2a5d20
wip(compiler): split shared models and parser construction state
Eric-Song-Nop Sep 12, 2026
dc155fb
refactor(compiler): adjust imports for extracted parser modules
Eric-Song-Nop Sep 12, 2026
d98e631
wip(vm): checkpoint compiler refactor and owned stack migration
Eric-Song-Nop Sep 13, 2026
9739fd9
fix(vm): preserve small-stack calls and host reentry
Eric-Song-Nop Sep 13, 2026
e002f88
wip(vm): advance owned property reads and callback dispatch
Eric-Song-Nop Sep 13, 2026
45b2b56
refactor(vm): resume Proxy queries and calls through owned continuations
Eric-Song-Nop Sep 13, 2026
dc0e20a
refactor(vm): drive property writes through owned continuations
Eric-Song-Nop Sep 13, 2026
8f62858
refactor(vm): resume Array length and TypedArray write conversions
Eric-Song-Nop Sep 13, 2026
51005fd
refactor(vm): execute super property operations through owned frames
Eric-Song-Nop Sep 13, 2026
2dfb566
refactor(vm): drive property predicates and Proxy boolean mutations
Eric-Song-Nop Sep 13, 2026
6b25772
refactor(vm): resume Proxy prototype queries through owned frames
Eric-Song-Nop Sep 13, 2026
4214f17
refactor(vm): own native invocation arguments and frame lifetime
Eric-Song-Nop Sep 13, 2026
7c67903
refactor(vm): drive native prototype operations with owned continuations
Eric-Song-Nop Sep 13, 2026
70ec168
refactor(runtime): resume synchronous JavaScript callbacks through th…
Eric-Song-Nop Sep 13, 2026
1791a04
refactor(vm): unify suspension across generators and async execution
Eric-Song-Nop Sep 13, 2026
39cceec
refactor(api): integrate modules host and binary entries with the sta…
Eric-Song-Nop Sep 13, 2026
a70a0b8
docs(vm): revise S08 and S09 plans for S07 regressions
Eric-Song-Nop Sep 14, 2026
0fde845
perf(vm): streamline owned execution paths for S08
Eric-Song-Nop Sep 14, 2026
e591b99
perf(vm): close S08 and record ongoing S09 optimizations
Eric-Song-Nop Sep 14, 2026
2e29dc8
perf(vm): implement S09 resident calls and constant-time bookkeeping
Eric-Song-Nop Sep 14, 2026
777ea72
perf(vm): streamline synchronous execution and builtin continuations
Eric-Song-Nop Sep 14, 2026
a5325ce
docs(vm): record S09 recovery results and remaining regressions
Eric-Song-Nop Sep 15, 2026
80b97f4
perf(vm): complete R1/R2/R5 omissions and record fair three-round retest
Eric-Song-Nop Sep 15, 2026
9738389
docs(vm): plan S09 regression fixes from three-round profiles
Eric-Song-Nop Sep 15, 2026
d5c6d72
perf(vm): reduce S09 conversion native and property overhead
Eric-Song-Nop Sep 15, 2026
898728f
perf(vm): complete S09 call and PC paths with regexp coverage and fin…
Eric-Song-Nop Sep 15, 2026
4b1a3bf
perf(vm): keep primitive numeric coercions resident and streamline AS…
Eric-Song-Nop Sep 15, 2026
b3b93a8
docs(vm): plan lazy frame protocol, narrow dispatch and property IC a…
Eric-Song-Nop Sep 15, 2026
4710171
perf(vm): implement S10 lazy frame authentication and activation mate…
Eric-Song-Nop Sep 15, 2026
6c1852f
perf(vm): implement S11 resident protocols and unified cold dispatch
Eric-Song-Nop Sep 15, 2026
8cf8e4f
perf(vm): implement S12 resident property read caches and record fina…
Eric-Song-Nop Sep 15, 2026
3a3e1a5
docs(perf): retain S0 QuickJS and latest evidence after history cleanup
Eric-Song-Nop Sep 15, 2026
1c59ce7
docs(perf): keep benchmark and profile results in local storage
Eric-Song-Nop Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
*.profraw
*.profdata
__pycache__/
/docs/reports/primitive-vm-s09-fair-three-rounds.json
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ default = []
test262-host = []
test-support = []
profiling = []
# Temporary migration configuration; default switching and bridge removal belong to S10.
stack-vm = []
[dev-dependencies]
quickjs-oxide-host = { workspace = true, features = ["engine-test-support"] }

Expand Down
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@ Neither is a general untrusted-bytecode loader or Feature Parity claim.

## Status

- [Documentation index](docs/README.md)
- [Engine module responsibilities](docs/architecture.md)
- [Current implementation status](docs/status.md)
- [Stack VM redesign: goals and architecture](docs/primitive-vm-plan.md)
- [Stack VM redesign: 10-commit implementation plan](docs/primitive-vm-commit-plan.md)
- [Profiling and external benchmarks](docs/profiling.md)
- [Data structure improvement plan](docs/data-structure-plan.md)
- [Published bytecode and VM execution plan](docs/published-execution-plan.md)
- [Published execution contracts](docs/published-execution-contracts.md)
- [Pinned Test262 baseline and metric definitions](docs/test262.md)
- [Parity acceptance contract](docs/parity.md)
- [Playground build and trust boundary](docs/playground.md)
Expand All @@ -90,12 +90,11 @@ npm ci && npx playwright install chromium && npm run test:browser
The root quickjs-oxide package has three source modules: `source/` for authored
text and Unicode support, `regexp/` for regex programs and matching, and
`engine/` for the interpreter's responsibility modules. `src/lib.rs` is the
only top-level Rust source file. Each source directory documents its ownership
in a README.
only top-level Rust source file.

Native and browser providers live in `adapters/`, applications in `apps/`,
and the Test262 runner in `conformance/test262`. See
[architecture](docs/architecture.md) and [source guide](src/README.md).
[architecture](docs/architecture.md) for responsibilities and boundaries.

```sh
cargo run -p quickjs-oxide-cli -- -e 'print(6 * 7)'
Expand Down
1 change: 1 addition & 0 deletions adapters/native/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ quickjs-oxide = { workspace = true }
tz-rs = { workspace = true }

[features]
stack-vm = ["quickjs-oxide/stack-vm"]
engine-test-support = []
3 changes: 3 additions & 0 deletions adapters/web/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@ workspace = true
quickjs-oxide = { workspace = true }
js-sys = { workspace = true }
wasm-bindgen = { workspace = true }

[features]
stack-vm = ["quickjs-oxide/stack-vm"]
1 change: 1 addition & 0 deletions apps/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ path = "src/main.rs"
default = []
test262-host = ["quickjs-oxide/test262-host"]
profiling = ["quickjs-oxide/profiling"]
stack-vm = ["quickjs-oxide/stack-vm"]

[dev-dependencies]
quickjs-oxide = { workspace = true, features = ["test-support"] }
46 changes: 46 additions & 0 deletions apps/cli/examples/compile_probe.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//! Public compile API timing: source I/O, Runtime/Context creation, execution,
//! and teardown are outside the measured interval.
use quickjs_oxide::engine::api::Runtime;
use quickjs_oxide_host::SystemHostServices;
use std::{env, fs, time::Instant};

fn main() {
let path = env::args().nth(1).expect("source path");
if path == "--version" {
println!("oxide-compile-probe 1");
return;
}
let source = fs::read_to_string(&path).expect("UTF-8 benchmark source");
#[cfg(feature = "profiling")]
let costs = quickjs_oxide::engine::api::profiling::CostProfile::start();
let runtime = Runtime::new_with_host_services(SystemHostServices::default());
let mut context = runtime.new_context();
let started = Instant::now();
let function = context
.compile_with_filename(&source, &path)
.expect("compile frozen script");
let elapsed = started.elapsed().as_nanos();
std::hint::black_box(&function);
println!("compile_ns:{elapsed}");
// An instrumented probe is deliberately inadmissible as formal timing:
// replay.py requires empty stderr. Use this only for phase attribution.
#[cfg(feature = "profiling")]
{
let snapshot = costs.snapshot();
for (name, phase) in [
("parse", snapshot.parse),
("resolution", snapshot.resolution),
("lowering", snapshot.lowering),
("blocks", snapshot.blocks),
("fusion", snapshot.fusion),
("relocation", snapshot.relocation),
("verify", snapshot.verify),
("publish", snapshot.publish),
] {
eprintln!(
"{{\"phase\":\"{name}\",\"attempts\":{},\"inclusive_ns\":{},\"exclusive_ns\":{}}}",
phase.attempts, phase.inclusive_ns, phase.exclusive_ns
);
}
}
}
Loading