✦✧
✦CalcKernel 0.15.2 · WebAssembly 性能与正确性更新 CK

CALCKERNEL 语言

面向数值内核。
编译为原生代码。

CalcKernel(CK)是一门面向数值密集型任务的静态类型语言。它将 CK 程序编译为原生机器码,也可输出 C 和 WebAssembly,嵌入已有系统。

原生代码 · 静态类型 · C / WebAssembly
探索语言特点↓
CK 语言

专注数值计算,边界清楚,行为可预期。

CK 为嵌入大型应用的紧凑计算例程而设计。类型系统、明确的数值规则和清楚的数据接口,帮助开发者判断内核读取、修改和返回什么。

数值计算内核

让数据处理路径一目了然。

这个内核将调用方提供的 f64 切片中的每个值乘以一个系数。类型化输入与原地更新明确了数据边界;编译器只会在满足正确性条件且目标平台支持时应用相应变换。

了解语言设计
scale.ckCK
export fn scale(
  values: slice<f64>,
  factor: f64
) -> void {
  let i: u32 = 0;
  while i < values.len {
    values[i] = values[i] * factor;
    i = i + 1;
  }
}
原地处理内核slice<f64> · while · export fn
性能实测

逐项比较真实负载的性能

选个算法,看看原有对比与新增 WASM 实测。

性能对比

归约 / 求和

1,048,576 个 u32 数值;顺序累加并按 2³² 取模

五实现对比 · v0.15.1

CK Native

0.036 ms7.1x

Rust

0.036 ms7.1x

C++

0.036 ms7.1x

Java

0.231 ms1.1x

JavaScript (Node.js)

0.252 ms1.0x
归约 / 求和 · 归约 / 求和
语言每次调用耗时中位数相对 JavaScript 的速度倍率
CK Native0.0357 ms7.1x
Rust0.0356 ms7.1x
C++0.0356 ms7.1x
Java0.2312 ms1.1x
JavaScript (Node.js)0.2518 ms1.0x

同目标 WASM 对比

Clang WASM

0.123 ms1.0x

CK WASM

0.124 ms0.99x

Rust WASM

0.124 ms0.99x
Strict WebAssembly · SIMD128 · 归约 / 求和
语言每次调用耗时中位数相对较快 Clang/Rust 参考项的吞吐率
Clang WASM0.1233 ms1.0x
CK WASM0.1241 ms0.99x
Rust WASM0.1242 ms0.99x

v0.15.1:JavaScript = 1.0x · strict WASM:同一 profile 中较快的 Clang/Rust 实现 = 1.0x · Apple M5 Max · 柱长采用压缩刻度。两份报告的耗时与倍率不可直接比较。Strict 用时并非 v0.15.2 正式版二进制测得。CK WASM 计入 Node.js 调用,不计初始化和输入复制。

了解更多
适用场景

让计算核心保持专注。

CK 适用于嵌入大型系统的数值内核,例如数据变换、反复执行的评分或模拟,以及其他计算密集型例程。将数据契约放在边界,调度、存储和面向用户的功能交给宿主应用。

CK 聚焦计算内核。宿主应用负责内存管理,以及内核周边的输入输出、网络和界面。

v0.15.2 WEBASSEMBLY

严格数值语义下的更快计算内核。

v0.15.2 优化符合条件的 WebAssembly 内核,同时保持严格浮点行为、安全证明和调用方提供内存的 ABI。

01

Baseline 支持 Bulk Memory

Baseline Wasm 配置允许批量内存操作,可用于数组复制和填充。

02

按需启用 SIMD

在 O3 并启用 simd128 时,符合条件的连续映射和归约可使用向量指令;其他循环保留标量代码。

03

目标兼容要求可见

schema 2 记录所选 Wasm profile 及其摘要,供宿主检查兼容性。

04

内存仍由宿主管理

现有的调用方提供内存 ABI 保持不变,宿主继续负责数据并将其传入内核。

查看 v0.15.2 发布介绍
三个实际问题

CK 在你的技术栈中做什么?

应用仍用你熟悉的工具编写;让 CK 负责边界明确、需要反复执行的数值计算。

01 / 03

为什么不直接用 Rust 或 C++?

如果它们已经满足项目需要,就继续使用。CK 更专注于数值内核:同一份源码可构建 Native 库、生成 C 代码或 WebAssembly 模块,供现有程序调用。优势在于清晰的计算边界;速度仍要用你的负载实测。

查看实测结果
02 / 03

什么时候值得用 CK?

先通过性能分析找到耗时明显、反复执行的计算,并确认它有清晰的数值输入和结果。如果同一内核还要供多个应用或运行环境使用,CK 的独立构建方式更有价值。

了解输出方式
03 / 03

Node、Python、Rust 项目怎么接?

先导出 CK 函数并构建模块,再由现有项目调用。Node.js 可加载 WebAssembly;Python 和 Rust 可通过生成的 C ABI 调用 Native 库。数据和内存仍由宿主负责。

Node.jsWebAssembly
Pythonctypes · C ABI
RustFFI · C ABI
查看接入指南
使用 CALCKERNEL 构建

从语言开始,用真实负载验证性能。

先了解语言、运行一个内核,再使用相同输入和目标机器对照测量结果。

使用 VS Code 编写 CK?扩展提供语法高亮、实时错误提示、补全和代码导航。 了解 VS Code 扩展

↵ 打开 · esc 关闭