Repository navigation
v0.1.2
What's Changed
- feature: number bitwise and Math.imul ops by @ahirner in #23
- feature: array object inference by @ahirner in #24
- Support charCodeAt with an ASCII fast path by @ahirner in #25
- Specialize bitwise arithmetic while preserving integer semantics by @ahirner in #28
- Lower proven in-bounds array stores without allocation checks by @ahirner in #29
- Eliminate bounds checks for affine array and byte reads by @ahirner in #30
- Call implicit exception runtime only on failure by @ahirner in #31
- Pass all Perry benchmarks with inferred dictionaries and value unions by @ahirner in #33
- Resolve only required ambient WIT dependencies by @ahirner in #35
Full Changelog: v0.1.1...v0.1.2
bench-perry
ubuntu-latest
Perry be6740f46e85db2ab5524bc11cd5af53f29f7846 · Node v26.10.0 · wasmtime 50.0.0 (ebe5e8df1 2026-10-20).
Official compare.sh --full suite: 24/24 attempted. 24 pass.
Times are medians of 3 fresh processes using upstream internal timings and warmups. W/N < 1 favors Wasmtime. Correctness uses upstream's stdout verifier. Ratios require matching outputs and positive timings in every sample. Short timings have millisecond resolution. Peak RSS is the maximum whole-process memory in MiB, including runtime/JIT. Each process has a 60s timeout. An engine stops after its first failure. Summary rows aggregate available values in each column.
| Benchmark | Status | Node ms | Wasmtime ms | W/N | Node MiB | Wasmtime MiB |
|---|---|---|---|---|---|---|
| 02_loop_overhead | pass | 142.00 | 176.00 | 1.24 | 81.0 | 28.6 |
| 03_array_write | pass | 7.00 | 25.00 | 3.57 | 377.2 | 284.2 |
| 04_array_read | pass | 14.00 | 42.00 | 3.00 | 379.2 | 284.2 |
| 05_fibonacci | pass | 1288.00 | 965.00 | 0.75 | 80.4 | 28.6 |
| 06_math_intensive | pass | 85.00 | 211.00 | 2.48 | 81.2 | 28.9 |
| 07_object_create | pass | 11.00 | 5.00 | 0.45 | 82.9 | 28.9 |
| 08_string_concat | pass | 69.00 | 6.00 | 0.09 | 127.7 | 30.6 |
| 09_method_calls | pass | 11.00 | 42.00 | 3.82 | 81.4 | 28.8 |
| 10_nested_loops | pass | 21.00 | 47.00 | 2.24 | 83.4 | 29.1 |
| 11_prime_sieve | pass | 10.00 | 27.00 | 2.70 | 111.5 | 44.0 |
| 12_binary_trees | pass | 12.00 | 7.00 | 0.58 | 83.2 | 28.6 |
| 13_factorial | pass | 534.00 | 749.00 | 1.40 | 82.4 | 29.1 |
| 14_closure | pass | 265.00 | 211.00 | 0.80 | 82.1 | 29.0 |
| 15_mandelbrot | pass | 29.00 | 31.00 | 1.07 | 82.2 | 28.3 |
| 16_matrix_multiply | pass | 42.00 | 133.00 | 3.17 | 87.2 | 30.7 |
| bench_gc_pressure | pass | 29.00 | 23.00 | 0.79 | 89.1 | 28.9 |
| bench_json_roundtrip | pass | 529.00 | 858.00 | 1.62 | 158.5 | 83.2 |
| bench_object_property | pass | 28.00 | 53.00 | 1.89 | 82.7 | 29.5 |
| bench_int_arithmetic | pass | 105.00 | 196.00 | 1.87 | 82.3 | 29.3 |
| bench_buffer_readwrite | pass | 88.00 | 236.00 | 2.68 | 82.0 | 29.5 |
| bench_array_grow | pass | 45.00 | 25.00 | 0.56 | 137.4 | 60.3 |
| bench_string_heavy | pass | 65.00 | 114.00 | 1.75 | 78.6 | 29.8 |
| bench_numeric_array_numeric | pass | 7.00 | 16.00 | 2.29 | 100.3 | 37.6 |
| bench_numeric_array_downgrade | pass | 7.00 | 308.00 | 44.00 | 101.5 | 58.1 |
| mean | 24 / 24 pass | 143.46 | 187.75 | 3.53 | 117.3 | 56.2 |
| median | — | 35.50 | 50.00 | 1.81 | 83.0 | 29.4 |
macos-latest
Perry be6740f46e85db2ab5524bc11cd5af53f29f7846 · Node v26.10.0 · wasmtime 50.0.0 (ebe5e8df1 2026-10-20).
Official compare.sh --full suite: 24/24 attempted. 24 pass.
Times are medians of 3 fresh processes using upstream internal timings and warmups. W/N < 1 favors Wasmtime. Correctness uses upstream's stdout verifier. Ratios require matching outputs and positive timings in every sample. Short timings have millisecond resolution. Peak RSS is the maximum whole-process memory in MiB, including runtime/JIT. Each process has a 60s timeout. An engine stops after its first failure. Summary rows aggregate available values in each column.
| Benchmark | Status | Node ms | Wasmtime ms | W/N | Node MiB | Wasmtime MiB |
|---|---|---|---|---|---|---|
| 02_loop_overhead | pass | 168.00 | 165.00 | 0.98 | 72.8 | 20.0 |
| 03_array_write | pass | 11.00 | 13.00 | 1.18 | 369.7 | 275.6 |
| 04_array_read | pass | 14.00 | 42.00 | 3.00 | 370.6 | 275.5 |
| 05_fibonacci | pass | 1288.00 | 812.00 | 0.63 | 72.3 | 20.3 |
| 06_math_intensive | pass | 61.00 | 204.00 | 3.34 | 73.9 | 20.0 |
| 07_object_create | pass | 10.00 | 5.00 | 0.50 | 75.5 | 20.1 |
| 08_string_concat | pass | 42.00 | 4.00 | 0.10 | 121.1 | 22.1 |
| 09_method_calls | pass | 12.00 | 39.00 | 3.25 | 73.2 | 20.0 |
| 10_nested_loops | pass | 20.00 | 44.00 | 2.20 | 75.1 | 20.4 |
| 11_prime_sieve | pass | 8.00 | 13.00 | 1.62 | 103.9 | 35.6 |
| 12_binary_trees | pass | 12.00 | 6.00 | 0.50 | 75.5 | 20.0 |
| 13_factorial | pass | 673.00 | 470.00 | 0.70 | 74.7 | 20.1 |
| 14_closure | pass | 367.00 | 205.00 | 0.56 | 74.5 | 19.9 |
| 15_mandelbrot | pass | 26.00 | 33.00 | 1.27 | 74.9 | 20.1 |
| 16_matrix_multiply | pass | 41.00 | 88.00 | 2.15 | 79.8 | 22.8 |
| bench_gc_pressure | pass | 14.00 | 16.00 | 1.14 | 82.0 | 20.1 |
| bench_json_roundtrip | pass | 339.00 | 646.00 | 1.91 | 152.6 | 76.0 |
| bench_object_property | pass | 22.00 | 57.00 | 2.59 | 75.0 | 20.8 |
| bench_int_arithmetic | pass | 77.00 | 94.00 | 1.22 | 73.7 | 20.3 |
| bench_buffer_readwrite | pass | 86.00 | 119.00 | 1.38 | 73.3 | 20.8 |
| bench_array_grow | pass | 15.00 | 12.00 | 0.80 | 134.8 | 51.7 |
| bench_string_heavy | pass | 51.00 | 94.00 | 1.84 | 72.8 | 20.9 |
| bench_numeric_array_numeric | pass | 6.00 | 9.00 | 1.50 | 92.9 | 29.3 |
| bench_numeric_array_downgrade | pass | 5.00 | 186.00 | 37.20 | 93.1 | 49.3 |
| mean | 24 / 24 pass | 140.33 | 140.67 | 2.98 | 109.9 | 47.6 |
| median | — | 24.00 | 50.50 | 1.33 | 75.3 | 20.6 |