ZetZ 是一个符号验证器和转换器,用于在裸金属上运行 C 代码
ZetZ 适用于没有动态内存的系统,其中 C 是并将继续是事实上的标准系统接口。
目标是裸机 MCU、嵌入式 Linux、WASM 以及嵌入到其他语言中。
您还可以使用它构建跨平台库,具有干净的可移植 C 标准 API。
Zetz 与其他工具兼容,不需要重写 zetz 中的所有代码才能在大型项目中发挥作用。
一个主要的创新功能是,所有代码在编译时都通过虚拟机中的符号执行进行了正式验证。
ZZ 有一些 Go 和 Rust 的美学特点,但其核心仍然是 C 语言。
using <stdio.h>::{printf}
struct Random {
u32 num;
}
fn rng(Random *self) u32 {
return self->num;
}
export fn main() int {
let r = Random{
num: 42,
};
printf("your lucky number: %u\n", r.rng());
return 0;
}
ZZ 发出纯 C 代码,并且永远都会这样做。这也是其存在的主要原因之一。 它总是会将 C 发送到 C 编译器,编译器再会生成二进制文件。 大多数现代语言都有自己的 ABI,与 C 不同,因此您必须使用粘合工具来与其他语言相互兼容。 如果 ZZ 以 C 形式发出,你只需要包含头文件即可。 没有堆栈解除 (C++, Rust),也没有协程 (go),因此所有代码都以纯 ANSI C 形式输出 没有对编译器功能的要求。
ZZ 与供应商提供的封闭源代码编译器搭配使用非常好,适用于一些特殊系统。例如 Arduino、ESP32、专有固件编译器,并可与现有的行业标准微内核(如 Zephyr、FreeRTOS 等)完美集成。
暂无开放 Issues,或尚未同步最近议题。