[ANN] ffi 0.5.0

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 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:

== 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.