- 授权协议: 未知
- 开发语言: Ruby
- 操作系统: 未知
- 软件首页: http://kenai.com/projects/ruby-ffi/
软件介绍
Ruby 解析器的性能一般,在一些对性能要求很高的场合我们必须用C语言来编写,然后使用Ruby去调用C库。但是,Ruby调用C库并不是一件轻松的事,需要你对Ruby的内部数据结构有比较深入的了解,甚至需要你仔细阅读Ruby相关的源代码,然后用C语言编程作为黏合剂,用Ruby特有的C API去给外部的C库增加一层封装。
对程序员的要求很高。而且一旦Ruby内部的数据结构随着版本升级发生变动,你的这些程序就必须重写。比方说现在Ruby 1.9出来以后,绝大部分Ruby的C扩展库统统无法正常编译。所以给Ruby写C的扩展库一件非常痛苦的事情,而且也是Ruby社区程序员一直抱怨的问题之一。然而随着FFI的出现,我们即将告别这些痛苦的历史!
FFI即Foreign Function Interface,外部函数调用接口,并非Ruby独有的概念,只不过因为Ruby扩展库带来的痛苦,使得Ruby的FFI显得格外迫切。FFI最早已 经在 Rubinius 虚拟机平台上实现了,随后在JRuby上面也得以实现,而今天:2008年11月1日,在Ruby官方版本的解析器Ruby 1.8.6/1.8.7和1.9版本上也可以使用FFI了。
安装 FFI 的方法: gem install ffi
使用FFI也很简单,比方说调用C语言标准库的printf函数,我们可以这样来写:
require 'ffi'
module MyExtModule
extend FFI::Library
attach_function :printf, [:string], :void
end
MyExtModule.printf("Hello Ruby FFI\n")
用attach_fuction就可以把C语言标准库的printf函数绑定到ruby里面来了,后面的参数分别声明C函数的传入参数和返回值。如果需要 引入其他C库,可以预先使用ffi_lib指定库的名称。(我使用ffi_lib未能绑定非标准库,有可能是FFI的bug?也有可能是我没有设置对?)
有了FFI,在Ruby语言里面调用C库,就变成了一件异常轻松的事情,完全不需要ruby程序员再去学习C语言了,只要你手里捧着C库的 API手册能看清楚函数的参数定义就够用了,然后你就可以直接在ruby里面随心所欲的调用它了,在调用之前,只需要用attach_function进 行一次函数绑定声明即可。
Spring in Action
Craig Walls / Manning Publications / 2011-6-29 / USD 49.99
Spring in Action, Third Edition has been completely revised to reflect the latest features, tools, practices Spring offers to java developers. It begins by introducing the core concepts of Spring and......一起来看看 《Spring in Action》 这本书的介绍吧!
