[Ironruby-core] Ruby FFI port

Wayne Meissner wmeissner at gmail.com
Thu Mar 24 19:11:27 EDT 2011

On 25 March 2011 04:58, Charles Strahan <charles.c.strahan at gmail.com> wrote:
>> Another idea… what about starting from http://github.com/ffi and replacing
>> the C extension with C# code?
> That's a great idea, Tomas.  I'll need some immediate gratification to keep
> me from getting discouraged; porting the C funcs piecemeal sounds like a
> good way to get something working.  I've forked FFI - I'll try to lay out a
> foundation tonight.

If you want some easy wins, The first classes you'll want to implement are:

1)  FFI::Type - this is used by much of the rest of the system, e.g.
to identify arguments and struct field types.  At a minimum, you need
to implement #size and #alignment, and have FFI::Type instances for 8,
16, 32, 64 bit signed/unsigned integers, float, double and pointer
defined as the constants FFI::Type::UINT8, FFI::Type::INT8, etc.

2) FFI::Pointer - instances of this are used to represent a native
pointer.  To get things up and running, you can stub this out with
just the basic initialize() method.  Most of the accessor methods can
be done later.

3) FFI::DynamicLibrary - kinda useful for loading libraries and
locating symbols within said library.

4) FFI::Function - the swiss army knife class for calling functions,
and creating C => ruby callbacks.  Ignore the callback aspect of this
for now, and just get ruby => C calling working.

That will take you a little while, but you'll be able to at least get
simple functions like 'puts' from libc callable from FFI.

More information about the Ironruby-core mailing list