在 C 和我的语言之间创建 FFI

Creating FFI between C and my language

假设我实现了一种编程语言(我们暂时称它为 A​​)。 A​​ 与 C 非常相似。

我希望我的用户能够访问现有 C 库中的函数和数据结构。这可能吗?如果是,那么天真的实现会是什么样子?

一个

这在很大程度上取决于 A 是哪种语言。

如果它是一种编译语言,那么您需要生成适当的汇编代码(查找"calling conventions",尤其是C 调用约定)来调用适当的C 函数。如果您使用的是 LLVM,则可以通过使用 declarecall 语句相当轻松地完成此操作。完成之后,您需要 link 针对有问题的 C 库的可执行文件。

但是,如果它是一种解释型语言,那么您将需要动态加载该库。你如何做到这一点是特定于平台的:例如,在 unix 类型的系统上,这可以通过 dlopen 函数来实现。