ffi version 0.5.0
by Wayne M.
http://wiki.github.com/ffi/ffi
== DESCRIPTION
Ruby-FFI is a ruby extension for programmatically loading dynamic
libraries, binding functions within them, and calling those functions
from Ruby code. Moreover, a Ruby-FFI extension works without changes
on Ruby and JRuby. Discover why should you write your next extension
using Ruby-FFI here[http://wiki.github.com/ffi/ffi/why-use-ffi].
== CHANGES
- Major improvements
- New Function class
- Structs can be passed and returned by value
- Implement a custom trampoline for x86_64, resulting in roughly 30%
speedup - Improve dispatch of functions which take (0…6)
char/short/int/long/pointer arguments by between 50% and 200% on x86_64 - Callbacks are now approximately 100% faster on x86_64
- Minor improvements
- Add support for MacOSX Snow Leopard
- Improve support for Windows releasing fat binaries on rubyforge
- Better introspection in structs:
- Add StructLayout::Field#type, size, offset, alignment and name
methods - Add StructLayout#fields which returns an array of
StructLayout::Field objects
- Add StructLayout::Field#type, size, offset, alignment and name
- Add automagic deducing of library name from module name.
Idea and prototype implementation from Matt Hulse - Callback fields in structs can now be both read and written
- Add a bunch of new benchmarks
- Lots of refactoring
- Experimental features
- blocking functions (i.e. native code that blocks the thread) support
- Bug fixes
- Fix RUBY-FFI_43 (rake gem dependency)
== FEATURES
- It has a very intuitive DSL
- It supports all C native types
- It supports C structs (also nested), enums and global variables
- It supports callbacks
- It has smart methods to handle memory management of pointers and
structs
== SYNOPSIS
require ‘ffi’
module MyLib
extend FFI::Library
attach_function :puts, [ :string ], :int
end
MyLib.puts ‘Hello boys using libc!’
For less minimalistic and more sane examples you may look at:
- the samples/ folder
- the examples on the wiki[http://wiki.github.com/ffi/ffi]
- the projects using FFI listed on this
page[http://wiki.github.com/ffi/ffi/projects-using-ffi]
== REQUIREMENTS
- You need a sane building environment in order to compile the
extension.
== DOWNLOAD/INSTALL
From rubyforge:
[sudo] gem install ffi
or from the git repository on github:
git clone git://github.com/ffi/ffi.git
cd ffi
rake gem:install
== CREDITS
Special thanks to:
- Yehuda K.
- Luc H.
- Andrea F.
- Mike D.
- Hongli L.
- Evan P.
- Aman G.
- Beoran
== LICENSE
See LICENSE file.