Skip to content

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 27 Oct 20:12
· 48 commits to main since this release
9118539

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