BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Ruby FFI可以用本地库访问JRuby,MRI了

| 作者 Werner Schuster 关注 6 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2008年12月13日. 估计阅读时间: 2 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

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的使用进行了更详尽的说明并给出了一些例子。

查看英文原文:Ruby FFI Brings Native Library Access to JRuby, MRI

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT