搜索文档搜索当前语言
限制与支持
候选版本v0.20260809.0-rc.5

本文档对应当前协同发布候选版本。

限制与支持

平台与当前限制

检查已发布平台矩阵、不支持的语言形状和 fail-closed ABI 边界。

编译器实现覆盖和已发布 SDK 覆盖是不同结论。选择受支持宿主包时,应以 release asset 列表为准。

已发布 SDK

当前协同 release 发布并验证:

宿主 架构 Target triple
Linux amd64 x86_64-unknown-linux-goabi
Linux arm64 aarch64-unknown-linux-goabi
Windows amd64 x86_64-pc-windows-goabi
macOS arm64 aarch64-apple-darwin

每个平台包只能在对应宿主上运行,生成产物也与 (GOOS, GOARCH) 绑定。

其他 codegen 路径

除 release matrix 外,编译器还包含 Darwin amd64 codegen 路径。Windows arm64 目前只能视为不完整的实验路径:简单输入可以写出标记为 windows/arm64 的 manifest,但当前 c2go_extern 仍会报告该 target 不支持对应 calling convention。它不是可用组合,也没有 SDK 或完整 release gate。

边界能力矩阵

特性 Unix Windows
Go 调用:标量、浮点、指针 支持 支持
导出 C 函数与 record 支持 支持
原生导入:标量、指针、浮点 支持 支持
原生导入:小 record 按值 在 ABI 限制内支持 按 Win64 size 规则支持
Callback:标量与指针 支持 支持
Callback:float 或 double 支持 fail closed
Callback:部分小 record 支持 fail closed
多返回值 支持合法单 slot 字段 支持合法单 slot 字段

“Fail closed” 表示工具链会拒绝不支持的形状,而不是静默生成错误调用。

语言硬限制

  • 只支持 C 和 64 位;C++ 会被拒绝。
  • 拒绝 variable-length array 与动态 alloca,因为可移动 Go 栈使它们的基址不健全。
  • Packed 或自定义 alignment 的 managed record 只产生 warning,生成布局与 target 相关;包含扫描 data pointer 的 unmanaged record 会直接拒绝这些布局。
  • c2go_iface 只提供 ABI 表示;当前没有动态调用 interface method 的 C 侧 API。应绑定具名 Go wrapper。
  • c2go_variant 不能表示有歧义的重叠 managed pointer。
  • c2go_returntype 的每个字段必须占据一个受支持 Go ABI result slot。
  • Callback operand 必须命名 C2Go 函数;裸 C2Go function pointer 不能传入 native callback slot。

候选版本状态

当前二进制尚未签名。macOS 压缩包没有 notarize,Windows 可执行文件没有 Authenticode 签名。当前支持 Go 1.25.x 与 1.26.x;Go 1.27 及以上在中央 provider 完成验证前会 fail closed。1.0 之前 interface、manifest field 与 ABI epoch 都可能变化。

遇到不支持的形状时,应把边界降低为更简单的形式,例如不按值传递大 record,而是传递指向所有权明确内存的指针,并为准备发布的每个 target 添加测试。

故障排查会把常见诊断映射到具体阶段。