我目前正在开发一个高性能的 Vector/Matrix Ruby gem C 扩展,因为我发现内置实现很麻烦,并且对于我个人遇到的大多数情况并不理想,并且在其他领域也缺乏。
我的第一种方法是在 Ruby 中作为Fiddle::CStructEntity
. 在 C 中实现为数学提供了很大的好处,但是在尝试实现一个次要函数时遇到了障碍。
我希望有一个方法将 a 返回Fiddle::Pointer
到结构(基本上是指向 的指针Rdata->data
。我希望返回一个实际的Fiddle::Pointer
对象。返回一个整数地址、打包字符串等是微不足道的,并且使用它可以很容易地在 Ruby 方法中扩展为转换成Fiddle::Pointer
这样的:
def ptr
# Assume address is an integer address returned from C
Fiddle::Pointer.new(self.address, self.size)
end
这种向我提出了一个问题,甚至可以从 C 中做到这一点吗?Fiddle 不是核心库的一部分,它是标准库的一部分,因此,它实际上只是一个扩展本身。
这个问题是微不足道的,可以通过上面演示的几行 Ruby 代码轻松解决,但如果Fiddle
没有 hack 甚至可以从 C 扩展返回一个对象,那就更好奇了?我找不到任何这样做的例子,并且一如既往地涉及涉及 Fiddle 的文档,它非常基本,并没有太多解释。