Multiple C-Extensions with mkmf

Hello –
I was wondering if there’s a way to separate multiple C-extension
classes
into separate files but still be able to directly call functions
(C-style
calls)? I currently have a bunch of classes in one file for the
performance
boost of direct calls over ruby function calls (not Ruby-ish, I know,
but the
boost was significant), but the sloppiness isn’t very appealing,
especially
as the file continues to grow. Hopefully there’s a solution that will
allow
me to separate the classes without hindering performance?

I appreciate any help,
Matt

Hi,

On Tue, Sep 23, 2008 at 06:59:06PM +0900, Matthew B Gardner wrote:

Hello –
I was wondering if there’s a way to separate multiple C-extension classes
into separate files but still be able to directly call functions (C-style
calls)? I currently have a bunch of classes in one file for the performance
boost of direct calls over ruby function calls (not Ruby-ish, I know, but the
boost was significant), but the sloppiness isn’t very appealing, especially
as the file continues to grow. Hopefully there’s a solution that will allow
me to separate the classes without hindering performance?

I think we’ll probably need some clarification. Do you have 1
extensions that you want to start separating out into multiple .c files?
This is easily done. Just put them all in separate .c files and in the
top level Init_myextname() function call other initialization functions.

I do this in Amalgalite, and I started using this approach after I saw
how the extensions were built for ‘rev’. Take a look at those two gems
and see if how their extensions are built help you out.

enjoy,

-jeremy

On Tue, Sep 23, 2008 at 06:59:06PM +0900, Matthew B Gardner wrote:

Hello –
I was wondering if there’s a way to separate multiple C-extension classes
into separate files but still be able to directly call functions (C-style
calls)? I currently have a bunch of classes in one file for the performance
boost of direct calls over ruby function calls (not Ruby-ish, I know, but the
boost was significant), but the sloppiness isn’t very appealing, especially
as the file continues to grow. Hopefully there’s a solution that will allow
me to separate the classes without hindering performance?

Ruby loads extensions with RTLD_GLOBAL, so you should be able to access
exported symbols in another extension if you require that extension
using rb_require().

Paul

Hi,

At Thu, 2 Oct 2008 00:41:33 +0900,
Paul B. wrote in [ruby-talk:316603]:

Ruby loads extensions with RTLD_GLOBAL, so you should be able to access
exported symbols in another extension if you require that extension
using rb_require().

Don’t rely on it, since it’s not possible on all platforms.