# \[ANN\] ffi 0.5.0

**URL:** <https://www.ruby-forum.com/t/ann-ffi-0-5-0/176843>\
**Category:** Ruby\
**Created:** [October 6, 2009, 10:48pm UTC](https://www.ruby-forum.com/t/ann-ffi-0-5-0/176843 "2009-10-06T22:48:01Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![gendag](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/f04885/32.png) [@gendag](https://www.ruby-forum.com/u/gendag)\
**Post date:** [October 6, 2009, 10:48pm UTC](https://www.ruby-forum.com/t/ann-ffi-0-5-0/176843/1 "2009-10-06T22:48:01Z")

</div>

ffi version 0.5.0  
by Wayne M.  
[http://wiki.github.com/ffi/ffi](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](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:

- the samples/ folder
- the examples on the wiki[[http://wiki.github.com/ffi/ffi](http://wiki.github.com/ffi/ffi)]
- the projects using FFI listed on this  
page[[http://wiki.github.com/ffi/ffi/projects-using-ffi](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.
