为什么不直接用 Rust 或 C++?
如果它们已经满足项目需要,就继续使用。CK 更专注于数值内核:同一份源码可构建 Native 库、生成 C 代码或 WebAssembly 模块,供现有程序调用。优势在于清晰的计算边界;速度仍要用你的负载实测。
查看实测结果CALCKERNEL 语言
CalcKernel(CK)是一门面向数值密集型任务的静态类型语言。它将 CK 程序编译为原生机器码,也可输出 C 和 WebAssembly,嵌入已有系统。
CK 为嵌入大型应用的紧凑计算例程而设计。类型系统、明确的数值规则和清楚的数据接口,帮助开发者判断内核读取、修改和返回什么。
函数签名写明输入和结果的类型。编译时,CK 会检查函数调用和赋值是否匹配。
fn scale(x: f64) -> f64了解更多 02 / 04类型转换需要明确写出,浮点行为有规范定义。Native 与 C 构建可启用整数溢出检查。
i32 · f64 · checked了解更多 03 / 04类型化切片包含地址和长度。内核读取或修改的内存由你的应用提供并负责管理。
slice<f64> · data · len了解更多 04 / 04可构建 Native 可执行文件或库、生成带 ABI 头文件的 C 代码,或生成兼容运行时可加载的 WebAssembly 模块。
Native · C ABI · Wasm了解更多 这个内核将调用方提供的 f64 切片中的每个值乘以一个系数。类型化输入与原地更新明确了数据边界;编译器只会在满足正确性条件且目标平台支持时应用相应变换。
了解语言设计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用相同输入,对比 CK、C++、Rust、JavaScript、Java 与 NumPy 在图像模糊和矩阵乘法中的速度。以 JavaScript 为 1.0x,直观看到各自的表现。
对每个内部像素执行相同的九点加权滤波;边缘像素设为 0。
| 语言 | 相对 JavaScript 的速度倍率 |
|---|---|
| C++ | 4.1x |
| Rust | 4.0x |
| CK | 3.7x |
| Java | 2.1x |
| JavaScript | 1.0x |
| NumPy | 0.64x |
各实现使用相同输入;NumPy 调用 Apple Accelerate 原生矩阵库。
| 语言 | 相对 JavaScript 的速度倍率 |
|---|---|
| NumPy | 117.1x |
| C++ | 5.4x |
| CK | 5.4x |
| Rust | 5.3x |
| Java | 3.2x |
| JavaScript | 1.0x |
JavaScript = 1.0x · 同机实测 · 条长为压缩刻度,以倍数为准
CK 适用于嵌入大型系统的数值内核,例如数据变换、反复执行的评分或模拟,以及其他计算密集型例程。将数据契约放在边界,调度、存储和面向用户的功能交给宿主应用。
对调用方传入的数值数组进行归一化、缩放或其他逐项处理。
slice<f64> → values用类型化输入、明确分支和可预期的数值规则,表达需要重复执行的领域计算。
score(input) → f64将同一段专注的计算构建为 Native 库、C 接口或 WebAssembly 模块。
Native · C ABI · WasmCK 聚焦计算内核。宿主应用负责内存管理,以及内核周边的输入输出、网络和界面。
应用仍用你熟悉的工具编写;让 CK 负责边界明确、需要反复执行的数值计算。
如果它们已经满足项目需要,就继续使用。CK 更专注于数值内核:同一份源码可构建 Native 库、生成 C 代码或 WebAssembly 模块,供现有程序调用。优势在于清晰的计算边界;速度仍要用你的负载实测。
查看实测结果先通过性能分析找到耗时明显、反复执行的计算,并确认它有清晰的数值输入和结果。如果同一内核还要供多个应用或运行环境使用,CK 的独立构建方式更有价值。
了解输出方式先导出 CK 函数并构建模块,再由现有项目调用。Node.js 可加载 WebAssembly;Python 和 Rust 可通过生成的 C ABI 调用 Native 库。数据和内存仍由宿主负责。
先了解语言、运行一个内核,再使用相同输入和目标机器对照测量结果。
使用 VS Code 编写 CK?扩展提供语法高亮、实时错误提示、补全和代码导航。 了解 VS Code 扩展