性能比较
所测数值与数组内核,豫言多速于 OCaml+Flambda;动态回调尚缓,亦未全胜 C。 今列实数、所据与其限,不以小例许诸程序皆速。
2026-09-21 刊;2026-09-20 测。源码版本 f7fcbe86。
较 OCaml+Flambda
数以毫秒记,小者速。豫言启 --wasm-stack 试旗,今默认未启。 豫言行于 Wasm/V8,OCaml 为原生机器码,非同后端。
| 程序 | 规模 / 回调 | 豫言 Wasm | OCaml+Flambda |
|---|---|---|---|
| 斐波那契 | 38 | 40.182 | 91.999 |
| 斐波那契 | 40 | 105.123 | 247.624 |
| 素数筛 | 2,000,000 | 3.154 | 4.735 |
| 素数筛 | 10,000,000 | 16.379 | 24.755 |
| 矩阵乘法 | 300 | 18.667 | 26.915 |
| 矩阵乘法 | 600 | 155.887 | 223.139 |
| 快速排序 | 1,000,000 | 8.325 | 112.810 |
| 快速排序 | 4,000,000 | 35.462 | 488.818 |
| 数组基准 | 2,000,000 | 0.535 | 2.746 |
| 数组基准 | 10,000,000 | 2.619 | 14.223 |
| 高阶调用 | 4,000,000 / 加一 | 5.149 | 4.223 |
| 高阶调用 | 4,000,000 / 乘三 | 5.698 | 4.769 |
树深十八、二十,豫言 0.003、0.001 ms,OCaml 4.297、25.388 ms。豫言已消其造树,近计时之限,不以此夸通用分配之速。
较 C/Wasm
此另批之测,不与前表横比。C 用 WASI SDK clang 23.1.0、-O3,双方同机 Node Worker 行之。
| 排序规模 | 豫言 Wasm | C/Wasm | 豫言耗时差异 |
|---|---|---|---|
| 1,000,000 | 8.157 ms | 7.847 ms | 多约 4.0% |
| 4,000,000 | 34.151 ms | 33.318 ms | 多约 2.5% |
惟列原版,省检原型未用。其速近 C 而未胜,不择一轮之最善者言全功。
自举之时
Wasm 冷编译缓存自举 15.55、15.87 秒,种子及二代字节皆同。Node 十八并发任务,启 --do-not-load-cache,未清操作系统页缓存。此为整次编译墙钟,异于内核之时。
原生验证三步 58.044、81.926、79.054 秒,末二代相同。不得谓诸后端皆三十秒内;亦无同等 OCaml 自举之数。
所据与所限
- Apple M5 Pro,十八核、48 GB;Node 26.3.0 / V8 14.6.202.34-node.20,默认设置。
- OCaml 5.5.0,
flambda: true、-O3,守数组之界,未用-unsafe,非 Flambda 2。 - Flambda 各例各方三新进程,各六轮,交错而行,舍首取余十五样之中数;十四项五百零四轮校验和皆合,测时不并行构建。
- C 排序各方七新进程,各六轮,舍首取余三十五样之中数;交错之省检原型不列入此表。
- 内核计时不含启进程、载模块与印果,随例含分配、填充与计算。校验和合不等于诸中间数组逐项皆验。
- 此数不尽证应用、尾延迟、久行内存、I/O 与操作系统之速。频造极小数组,栈仍或慢于 GC,故不常启。
原数与复验
下载样本与产物摘要(JSON),首轮及各进程诸轮皆存。
豫言用 --target=wasmgc --wasm-stack 编之,以 Node 宿主行之;OCaml 用启 Flambda 之 ocamlopt -O3,合 单调钟.c。各程序自行印六轮计时。定输入与引擎,交错新进程而复验。