{ "schema": 1, "generated_utc": "2026-10-28T09:51:42Z", "commit": "2d95263bea9054b6b1f4812165693b11ceea1674", "run_url": "https://github.com/nurl-lang/nurl/actions/runs/40666709226", "host": { "label": "GitHub Actions ubuntu-latest runner", "kernel": "Linux 6.17.0-1022-azure x86_64", "cpu": "AMD EPYC 7763 64-Core Processor", "cores": 4, "mem_kb": 16373452 }, "toolchains": { "nurl": "v0.79.1-35-g2d95263b", "c": "Ubuntu clang version 18.1.3 (1ubuntu1)", "rust": "rustc 1.99.1 (58cf8f9c3 2026-10-13)", "node": "v22.23.3", "python": "Python 3.12.3" }, "settings": { "opt": "-O2", "max_reps": 5, "budget_ms": 8000, "timeout_s": 300, "compile_reps": 3, "workload_scale": 1 }, "floor_ms": { "nurl": 1.474, "c": 1.469, "rust": 1.699, "node": 24.116, "python": 17.218 }, "floor_compile_ms": { "nurl_frontend": 4.558, "nurl": 117.868, "nurl_warm": 61.830, "c": 77.581, "rust": 53.852 }, "benchmarks": [ { "name": "lcg", "blurb": "20M-step 64-bit LCG + xorshift", "measures": "Loop-carried mul/add/shift/xor dependency the unroller cannot compose", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "-7585129161289236796", "verified": true, "run_ms": { "nurl": 39.162, "c": 39.143, "rust": 39.279, "node": 1894.234, "python": 5056.844 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 4, "python": 1 }, "compile_ms": { "nurl_frontend": 4.754, "nurl": 131.896, "nurl_warm": 62.074, "c": 89.047, "rust": 56.494 } }, { "name": "packet_classifier", "blurb": "25M unpredictable branches", "measures": "A data-dependent 50/50 branch the predictor cannot learn", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "4205972061", "verified": true, "run_ms": { "nurl": 56.442, "c": 56.297, "rust": 56.492, "node": 162.317, "python": 4546.946 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 4.701, "nurl": 131.850, "nurl_warm": 62.674, "c": 92.109, "rust": 58.272 } }, { "name": "ring_write", "blurb": "20M ring-buffer stores", "measures": "Dependent store per iteration plus address computation", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "8299504528805184357", "verified": true, "run_ms": { "nurl": 42.262, "c": 42.187, "rust": 42.405, "node": 65.561, "python": 6508.444 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 15.476, "nurl": 144.553, "nurl_warm": 71.460, "c": 90.998, "rust": 59.351 } }, { "name": "histogram_bins", "blurb": "20M binned increments", "measures": "Read-modify-write at a data-dependent index", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "1215643728", "verified": true, "run_ms": { "nurl": 39.464, "c": 40.600, "rust": 40.872, "node": 67.519, "python": 6051.479 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 15.127, "nurl": 145.428, "nurl_warm": 71.690, "c": 107.459, "rust": 68.529 } }, { "name": "prefix_scan", "blurb": "1M 16-wide prefix scans", "measures": "Store-bound fill then a serial load/add dependency chain", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "492982549", "verified": true, "run_ms": { "nurl": 21.747, "c": 21.669, "rust": 21.949, "node": 66.436, "python": 4566.479 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 15.239, "nurl": 144.958, "nurl_warm": 72.415, "c": 97.588, "rust": 64.017 } }, { "name": "binary_search", "blurb": "5M lower-bound searches", "measures": "Pointer-chasing: each load address depends on the last compare", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "805907445", "verified": true, "run_ms": { "nurl": 39.768, "c": 38.306, "rust": 40.936, "node": 106.697, "python": 6378.417 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 15.544, "nurl": 144.664, "nurl_warm": 71.866, "c": 92.479, "rust": 65.459 } }, { "name": "sort_window", "blurb": "2M 8-element bubble sorts", "measures": "Branchless compare/exchange mill over a 64-byte window (~50 cmovs/iter)", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "2815490238", "verified": true, "run_ms": { "nurl": 26.633, "c": 26.537, "rust": 26.814, "node": 198.361, "python": 11372.552 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 1 }, "compile_ms": { "nurl_frontend": 15.881, "nurl": 146.774, "nurl_warm": 71.760, "c": 102.065, "rust": 69.091 } }, { "name": "bloom_filter", "blurb": "4M Bloom-filter queries", "measures": "Four unpredictable loads per query over a 2 KB working set", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "2351703", "verified": true, "run_ms": { "nurl": 16.652, "c": 17.921, "rust": 18.466, "node": 2842.899, "python": 7412.206 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 2, "python": 1 }, "compile_ms": { "nurl_frontend": 16.264, "nurl": 150.934, "nurl_warm": 73.520, "c": 104.353, "rust": 65.832 } }, { "name": "hash_join", "blurb": "5M hash-table probes", "measures": "Cheap Bloom early-out plus a rare, branchy join path", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "6152419568754618368", "verified": true, "run_ms": { "nurl": 26.849, "c": 27.875, "rust": 29.257, "node": 3471.128, "python": 8430.027 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 2, "python": 1 }, "compile_ms": { "nurl_frontend": 19.750, "nurl": 282.896, "nurl_warm": 75.794, "c": 218.648, "rust": 109.026 } }, { "name": "sieve", "blurb": "Sieve of Eratosthenes to 10M", "measures": "Irregular-stride byte writes, then one linear scan", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "664579", "verified": true, "run_ms": { "nurl": 18.775, "c": 18.125, "rust": 18.133, "node": 65.959, "python": 3333.093 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 2 }, "compile_ms": { "nurl_frontend": 15.720, "nurl": 146.541, "nurl_warm": 72.702, "c": 103.934, "rust": 70.218 } }, { "name": "fib", "blurb": "Recursive fib(35)", "measures": "The call/return path: ~15M calls after LLVM turns one recursion into a loop", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "9227465", "verified": true, "run_ms": { "nurl": 25.066, "c": 29.765, "rust": 29.829, "node": 130.652, "python": 1360.716 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 5 }, "compile_ms": { "nurl_frontend": 4.713, "nurl": 130.375, "nurl_warm": 61.954, "c": 89.494, "rust": 58.503 } }, { "name": "collatz", "blurb": "Longest Collatz chain below 100k", "measures": "Control-flow-heavy inner loop with no array at all", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "350", "verified": true, "run_ms": { "nurl": 12.410, "c": 12.209, "rust": 12.588, "node": 51.173, "python": 738.956 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 5 }, "compile_ms": { "nurl_frontend": 5.018, "nurl": 136.875, "nurl_warm": 64.400, "c": 93.137, "rust": 60.008 } }, { "name": "matmul", "blurb": "256x256 integer matrix product", "measures": "Triple-nested loop, flat indexing, column-strided reads", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "393199", "verified": true, "run_ms": { "nurl": 33.535, "c": 33.422, "rust": 33.657, "node": 76.151, "python": 3285.046 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 2 }, "compile_ms": { "nurl_frontend": 17.041, "nurl": 146.306, "nurl_warm": 73.860, "c": 104.436, "rust": 77.680 } }, { "name": "json_parse", "blurb": "20 parses of a 64 KB document", "measures": "Allocator pressure, string handling, recursive descent", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "20", "verified": true, "run_ms": { "nurl": 8.398, "c": 8.562, "rust": 11.820, "node": 34.068, "python": 38.454 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 5 }, "compile_ms": { "nurl_frontend": 49.908, "nurl": 538.783, "nurl_warm": 106.918, "c": 159.136, "rust": 154.562 } }, { "name": "nbody", "blurb": "500k n-body integration steps", "measures": "IEEE-754 doubles: sqrt and divide throughput, the FPU rather than the ALU", "languages": ["nurl", "c", "rust", "node", "python"], "checksum": "4595260366167553674", "verified": true, "run_ms": { "nurl": 25.386, "c": 39.660, "rust": 25.190, "node": 102.560, "python": 3092.444 }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 5, "python": 2 }, "compile_ms": { "nurl_frontend": 18.204, "nurl": 153.081, "nurl_warm": 73.905, "c": 126.407, "rust": 93.064 } }, { "name": "chacha20", "blurb": "ChaCha20 over 16 MiB (RFC 8439)", "measures": "32-bit add/rotate/xor rounds; NURL calls stdlib chacha20_xor (v128 lanes)", "languages": ["nurl", "c", "rust"], "checksum": "3720502699256473595", "verified": true, "run_ms": { "nurl": 7.356, "c": 42.442, "rust": 33.762, "node": null, "python": null }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 0, "python": 0 }, "compile_ms": { "nurl_frontend": 58.832, "nurl": 840.990, "nurl_warm": 117.349, "c": 142.271, "rust": 105.633 } }, { "name": "poly1305", "blurb": "Poly1305 MACs over 64 MiB (RFC 8439)", "measures": "Serial 64x64->128 multiply/carry chain through the accumulator, radix 2^44", "languages": ["nurl", "c", "rust"], "checksum": "2498856793803813402", "verified": true, "run_ms": { "nurl": 11.643, "c": 31.731, "rust": 21.160, "node": null, "python": null }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 0, "python": 0 }, "compile_ms": { "nurl_frontend": 44.766, "nurl": 556.276, "nurl_warm": 102.640, "c": 142.824, "rust": 118.506 } }, { "name": "blake2b", "blurb": "BLAKE2b-512 over 32 MiB (RFC 7693)", "measures": "64-bit add/xor/rotate G mixes with SIGMA-permuted message gathers", "languages": ["nurl", "c", "rust"], "checksum": "8590291023788228918", "verified": true, "run_ms": { "nurl": 43.661, "c": 64.941, "rust": 69.059, "node": null, "python": null }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 0, "python": 0 }, "compile_ms": { "nurl_frontend": 39.148, "nurl": 415.218, "nurl_warm": 94.919, "c": 145.603, "rust": 113.961 } }, { "name": "sha512", "blurb": "SHA-512 over 16 MiB (FIPS 180-4)", "measures": "80-round 64-bit serial compression chain plus the message schedule", "languages": ["nurl", "c", "rust"], "checksum": "7091519178481951668", "verified": true, "run_ms": { "nurl": 47.299, "c": 50.596, "rust": 49.534, "node": null, "python": null }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 0, "python": 0 }, "compile_ms": { "nurl_frontend": 39.480, "nurl": 511.983, "nurl_warm": 95.839, "c": 137.434, "rust": 100.024 } }, { "name": "x25519", "blurb": "1000 chained X25519 scalar mults (RFC 7748)", "measures": "Montgomery ladder over GF(2^255-19): radix-2^51 128-bit field multiplies", "languages": ["nurl", "c", "rust"], "checksum": "6127485567278337128", "verified": true, "run_ms": { "nurl": 31.386, "c": 48.832, "rust": 49.266, "node": null, "python": null }, "reps": { "nurl": 5, "c": 5, "rust": 5, "node": 0, "python": 0 }, "compile_ms": { "nurl_frontend": 52.656, "nurl": 1246.474, "nurl_warm": 108.811, "c": 1217.422, "rust": 491.259 } } ] }