Pair Your Compilers At The ABI Café - Faultlore
文章讨论跨语言 ABI/FFI 兼容性,从 rustc、clang、gcc 对 __int128 的传递分歧切入,指出 ABI 多数未规范化,跨语言调用本质上是类型双关。作者介绍 abi-cafe:根据抽象类型与函数签名生成 caller/callee 代码,双方用 write_val 回调上报所见字节,由测试框架比对,从而在不预设 ABI 实现的前提下发现编译器分歧。1.0 因用具体值描述签名而无法表达枚举、联合等类型;2.0 改用 kdl-script 类型系统和 pun types 描述不同语言中结构不同的对应类型,并处理 tagged/untagged union、repr(transparent)、Option<&T> 优化等双关。核心未解难题是同步不同形状类型树的遍历与比较,项目仍属 WIP。适合编译器、FFI 与系统编程读者。
推荐收录:文章给出 abi-cafe 的黑盒 ABI 测试方法、graffiti value、复合类型树遍历等可迁移设计,并用 __int128 等真实编译器分歧证明其价值。它对 Rust/C FFI、编译器后端和系统编程读者尤其有用,可帮助理解 ABI 测试边界;需注意 2.0 仍为 WIP,复杂类型双关同步尚未完成。