【问题标题】:Why does Ruby FFI need attach_function calls when there are header files?当有头文件时,为什么 Ruby FFI 需要 attach_function 调用?
【发布时间】:2010-11-21 04:45:28
【问题描述】:

有没有办法将 Ruby FFI 指向头文件而不是编写 attach_function 调用?一个头文件基本上具有相同的确切信息。

temp_convert.rb:

attach_function :temp_convert, [:float], :float

temp_convert.h:

float temp_convert(float temp);

【问题讨论】:

    标签: c ruby ffi


    【解决方案1】:

    因为 C 头文件是用 C 编写的,但 Ruby 解释器只解释 Ruby。此外,头文件甚至可能在运行时不可用。

    一直在谈论从标头自动生成 attach_function 调用。但是,正如我在上面所暗示的,这基本上意味着您必须实现一个完整的 C 编译器(准确地说,是一个完整的前半部分)。目前,Ruby 实现者更专注于让 Ruby 运行得和 C 一样快,以首先减少使用 FFI 的需要,而不是编写自己的 C 编译器(即使您只需要这样做,这也是一项不平凡的工作)词法分析、解析、语义分析和打字部分,而不是实际的代码生成或优化)。

    【讨论】:

      【解决方案2】:

      正如 Jörg 所说,实现标头扫描器意味着实现相当多的 C 编译器,以确保一切正常。

      您可能想尝试减轻痛苦的一件事是FFI Swig Generator。它使用 swig 来生成 FFI 接口。这仍然意味着您需要做一些工作,这可以归结为剪切和粘贴工作来为简单的界面生成 swig 输入文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-07
        • 2010-12-30
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多