有没有办法将 Ruby FFI 指向头文件而不是编写 attach_function 调用?头文件基本上具有相同的确切信息。
temp_convert.rb:
attach_function :temp_convert, [:float], :float
temp_convert.h:
float temp_convert(float temp);
因为 C 头文件是用 C 编写的,但 Ruby 解释器只解释 Ruby。此外,头文件甚至可能在运行时不可用。
已经讨论过从标头自动生成调用attach_function
。但是,正如我在上面所暗示的,这基本上意味着您必须实现一个完整的 C 编译器(准确地说,是一个完整的前半部分)。目前,Ruby 实现者更专注于让 Ruby 与 C 一样快地运行,以首先减轻使用 FFI 的需要,而不是编写自己的 C 编译器(即使您只需要这样做,这也是一项不平凡的工作)词法分析、解析、语义分析和打字部分,而不是实际的代码生成或优化)。
正如 Jörg 所说,实现标头扫描器意味着实现相当多的 C 编译器,以确保一切正常。
您可能想尝试减轻痛苦的一件事是FFI Swig Generator。它使用 swig 来生成 FFI 接口。这仍然意味着您需要做一些工作,这可以归结为一个剪切和粘贴工作来为简单的界面生成 swig 输入文件。