性能比较

所测数值与数组内核,豫言多速于 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 自举之数。

所据与所限

原数与复验

下载样本与产物摘要(JSON),首轮及各进程诸轮皆存。

源码:豫言排序OCaml 内核C 内核动态回调

豫言用 --target=wasmgc --wasm-stack 编之,以 Node 宿主行之;OCaml 用启 Flambda 之 ocamlopt -O3,合 单调钟.c。各程序自行印六轮计时。定输入与引擎,交错新进程而复验。