posts - 241,  comments - 116,  trackbacks - 0

MRI和Rubinius支持Ruby的本地扩展,这使得本地代码可以与Ruby代码及Ruby解释器或VM进行交互。Ruby 1.8.0引入了Ruby/DL,它可以加载共享库并调用Ruby代码中提供的函数。Ruby/DL文档说明了如何导入函数、如何与C类型协同工作及如何将Ruby映射为C类型等等。Ruby/DL还提供了两种回调方式,也就是说对于一个接收函数指针的C函数来说,我们可以将一个Ruby代码块传进去。

Rubinius引入了自己的Foreign Function Interface(FFI),它与Ruby/DL非常像,尽管FFI的API看起来有些不同,对于类型签名来说,它使用了Ruby符号和排列方式而并没有采取C代码的方式,也没有使用Ruby/DL中所用的客户化类型格式。

早在今年初,构建于JNA之上的jruby-ffi就已经发布了(JRuby不支持Ruby/DL)。

虽然对Rubinius和JRuby提供了支持,但在使用MRI的Ruby世界中还是有很多地方依然在使用Ruby/DL或其它方式来使用共享库。为了解决这个问题,Wayne Meissner(已经创建了jruby-ffi)创建了ruby-ffi项目,它现在提供了相同的FFI接口,就像Rubinius之于JRuby、Ruby 1.8.x及Ruby 1.9.x.一样。通过ruby-ffi,我们可以跨越所有这些Ruby实现以相同的Ruby代码来访问共享库了。

Ruby FFI 0.2.0已经发布了,可以通过gem install ffi进行安装。你可以在其项目的wiki上查看相关的文档,这些示例是很好的入门材料。Charles Nutter对FFI的使用进行了更详尽的说明并给出了一些例子。


Orther:
Spring 通用的方法拦截
Spring实现动态数据源
posted on 2008-12-12 16:23 墙头草 阅读(1222) 评论(0)  编辑  收藏 所属分类: 业界资讯

只有注册用户登录后才能发表评论。


网站导航:
 
人人游戏网 软件开发网 货运专家