2016-12-26 54 views
0

我正在使用Ruby,并意识到如果能够使用某些内置的gcc函数(以及x86架构内置插件),这将是非常有益的。看起来不得不写一个扩展名来使用它们是不切实际的,所以我想知道是否有一种方法可以调用内置函数。例如,如果我想叫int __builtin_popcount(unsigned int),在Ruby中的数字,是有办法,我可以以某种方式做如何在Ruby中调用内置的编译器函数?

a = rand(1..10000) 
__builtin_popcount(a) 

我知道,我显然不能做一些基本的,但有一种方式,我可以在Ruby中包含gcc和x86体系结构插件?

+0

您可以用C或C++代码与[FFI](https://github.com/ffi/ffi)链接。如果没有扩展,没有办法在内部执行此操作。请记住,Ruby不一定与'gcc'有关。例如,JRuby没有任何关系,再加上“clang”作为许多现代系统的后端并不罕见。 – tadman

回答

1

这是不是很清楚你想要做什么。

如果你想调用GCC,你可以用C扩展封装libgcc,并为它设计一个Ruby API。

如果要使用GCC动态生成本机代码,那目前不可能AFAIK。有一个基于GCC的JIT编译器库的项目,但我不知道它的状态是什么。你可以将库换成C扩展,并为它设计一个Ruby API。无论如何,您还必须修改您正在使用的Ruby实现,以便将动态生成的本机代码与Ruby代码链接起来。 (并且在某些实现上根本不可能,例如在Opal上,这是一个纯静态编译器)。

当然,并非所有的Ruby实现实际上都支持C扩展;它们是YARV的一个非标准特性,不能保证在其他实现中工作或存在。

相关问题