Luis Lavena ha creado rake-compiler
solo para este propósito.
Sin embargo, ¿está seguro de que necesita una extensión C? Lo que pasa con las extensiones C es que cada implementación de Ruby tiene su propia API de extensión C (y las que no están basadas en C, como XRuby, JRuby, Ruby.NET, IronRuby, HotRuby, MagLev, Red Sun no tienen ninguna), que significa que su extensión C solo funcionará en una implementación. Y, dado que MRI solo implementa Ruby 1.8 y YARV solo implementa Ruby 1.9, y actualmente estamos en una fase de transición entre 1.8 y 1.9, es probable que mucha gente use al menos dos implementaciones diferentes. (Yo personalmente uso 5: MRI, YARV, JRuby, IronRuby y Rubinius.)
Tal vez sea mejor que use Ruby-FFI. Ruby-FFI es una FFI (Foreign Function Interface) para Ruby (duh), que le permite enlazar y asignar bibliotecas C en Ruby puro de una manera que es portable en todas las implementaciones de Ruby. La API de FFI se desarrolló por primera vez por Evan Phoenix como la API de extensión nativa para Rubinius, luego fue adoptada por Charles Oliver Nutter (e implementada por Wayne Meissner) para JRuby. Wayne luego también escribió Ruby-FFI gem, que contiene extensiones C para MRI y YARV. Laurent Sansonetti implementó Ruby-FFI para MacRuby, Marc-André Cournoyer 's tinyrb también supports FFI (nuevamente escrito por Wayne Meissner) y los desarrolladores MagLev también están trabajando en ello. Lo que significa que si puede hacer que su biblioteca funcione con FFI en lugar de una extensión C, admitirá automáticamente 6 implementaciones de Ruby en lugar de solo una.
La única razón para utilizar una extensión C en lugar de una extensión FFI sería, si realmente hace quiere un comportamiento específico de implementación. Un ejemplo de esto sería la gema ParseTree, que llega hasta las profundidades de los intestinos de la RM y desgarra la representación en memoria del árbol de análisis sintáctico.
Por último pero no menos importante, eche un vistazo al proyecto Nice-FFI por John Croisant, cuyo objetivo es hacer que el uso de Ruby-FFI sea aún mejor.
wow, se ve muy bien! gracias :) – horseyguy
De nada! Eso fue egoísmo total, dicho sea de paso: uso Ruby en Windows, por lo que cuantos más autores de extensión usen rake-compiler, más extensiones se publicarán para Windows. (Pero ver a mi edición.) –
parece que esta respuesta es de 09, y parte de la respuesta tiene que ser actualizado – Tilo