FFI
本文档解释在Wave语言中调用外部实现函数的FFI(外部函数接口)规范。 通过FFI,Wave程序可以直接与其他语言编写的本机库集成。
概述
Wave的FFI基于声明运行。 外部函数不在Wave代码中实现,只需指明该函数遵循的ABI(应用程序二进制接口)。 实际实现是在链接阶段通过外部库解决的。
FFI在编译时只声明函数的存在,生成可执行文件时由链接器连接实际的符号。
extern声明
外部函数是使用extern关键字声明的。
目前在 Wave 中,ABI 指定是必须的,并且仅支持 extern(c)。
extern(c) fun 函数名(参数...) -> 返回类型;
ABI指定
在 extern 声明中必须明确指定 ABI。
当前支持的 ABI 只有 c。
extern(c) fun printf(fmt: ptr<u8>);
像 extern(rust) 这样的声明虽然可以被解析,但在语义分析阶段会发生错误。
函数级extern声明
声明单个外部函数时,可以按如下方式编写。
extern(c) fun InitWindow(width: i32, height: i32, title: ptr<u8>);
此声明意味着遵循C ABI的InitWindow符号存在于外部库中。