[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Multiple C-Extensions with mkmf

Matthew B Gardner

9/23/2008 9:59:00 AM

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

3 Answers

Jeremy Hinegardner

9/23/2008 2:49:00 PM

0

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

--
========================================================================
Jeremy Hinegardner jeremy@hinegardner.org


Paul Brannan

10/1/2008 3:42:00 PM

0

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


Nobuyoshi Nakada

10/1/2008 6:41:00 PM

0

Hi,

At Thu, 2 Oct 2008 00:41:33 +0900,
Paul Brannan 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.

--
Nobu Nakada