C 互操作
Kelyra 可以导入 C 头文件,也能直接声明外部符号。这里是靠近系统的一层,需要格外留意 ABI 与指针有效期。
导入 C 头文件
以下示例面向提供 getpid 的目标平台:
kelyra
import c "print.h";
import c;
@main
fn main() -> i32 {
print();
return 0;
}编译器使用 Clang 解析 C 声明。C 实现文件可通过 --c-source 一同编译,已有目标文件或库可用 --link-input 链接。
声明外部函数
kelyra
@extern("getpid", "c")
@callconv(cc.C)
fn process_id() -> c.int;@extern 的第二个参数是链接库名,不是头文件名。Windows 上可填写导入库基础名,例如 "user32"。具体库名随目标平台而异。
C 布局
@layout(Layout.C) 可让类字段采用宿主平台 C 结构体布局,也支持函数指针字段。嵌套类也需要适当布局标记。C 头文件中的联合体可由 C 导入机制解析;手写 Kelyra 联合体的语法仍需以当前编译器实现为准。
当前能力仍有边界:外部函数声明主要面向顶层函数;某些按值结构体和可变参数调用需要 Clang ABI thunk。完整规则见前端文档。