[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

[ANN] rice-1.1.0 with Ruby 1.9.0 compatibility!

Jason Roelofs

4/27/2009 2:07:00 PM

Rice: Ruby Interface for C++ Extensions
========================================

Change Log:

* Works on Ruby 1.8.6, 1.8.7 and 1.9.0 with no changes to current extensions
* Fixed memory leaks
* Fixed various compilation issues, build uses the system's ruby
library and doesn't assume the name of libruby.so
* Now properly uses the ruby in --with-ruby for every step of the
compilation process (e.g. can be installed on multiple ruby installs
on a single system)
* Removed all uses of known deprecated APIs, like STR2CSTR
* Now builds extensions to allow multiple Rice extensions to be
require'd together


What is Rice?

Rice is a C++ interface to Ruby's C API. It provides a type-safe and
exception-safe interface in order to make embedding Ruby and writing
Ruby extensions with C++ easier. It is similar to Boost.Python in many
ways, but also attempts to provide an object-oriented interface to all
of the Ruby C API.

What Rice gives you:
* A simple C++-based syntax for wrapping and defining classes
* Automatic conversion of exceptions between C++ and Ruby
* Smart pointers for handling garbage collection
* Wrappers for most builtin types to simplify calling code

Documentation: http://rice.rub...
Project Page: http://rubyforge.org/pro...


How do you get Rice?

gem install rice

Note: Rice does require a C++ compiler. See the Documentation page for
more details.


How simple of a syntax?

wrapper.cpp

#include "rice/Class.hpp"

class MyWrapper {
public:
MyWrapper() { }

void doThis() { }
int doThat(int a, float b) { }
};

extern "C"
void Init_wrapper()
{
define_class<MyWrapper>("MyWrapper")
.define_constructor(Constructor<MyWrapper>())
.define_method("do_this", &MyWrapper::doThis)
.define_method("do_that", &MyWrapper::doThat);
}

extconf.rb

require 'mkmf-rice'
create_makefile("wrapper")

test.rb

require 'wrapper'
c = MyWrapper.new
c.do_this
c.do_that(1, 2.0)

Building Ruby wrapper extensions have never been so easy!

3 Answers

Gregory Brown

4/27/2009 2:40:00 PM

0

On Mon, Apr 27, 2009 at 10:06 AM, Jason Roelofs <jameskilton@gmail.com> wrote:
> Rice: Ruby Interface for C++ Extensions
> ========================================
>
> Change Log:
>
> * Works on Ruby 1.8.6, 1.8.7 and 1.9.0 with no changes to current extensions

Do you mean 1.9.1?

(1.9.0 was an unstable developer snapshot)

-greg

Jason Roelofs

4/27/2009 3:25:00 PM

0

On Mon, Apr 27, 2009 at 10:39 AM, Gregory Brown
<gregory.t.brown@gmail.com> wrote:
> On Mon, Apr 27, 2009 at 10:06 AM, Jason Roelofs <jameskilton@gmail.com> wrote:
>> Rice: Ruby Interface for C++ Extensions
>> ========================================
>>
>> Change Log:
>>
>> * Works on Ruby 1.8.6, 1.8.7 and 1.9.0 with no changes to current extensions
>
> Do you mean 1.9.1?
>
> (1.9.0 was an unstable developer snapshot)
>
> -greg
>
>

Crap, I knew I was missing something. I had somehow got my mind
switched from 1.9.1 to 1.9.0 and have tested against that older
version. Unfortunately right now, Rice does *not* run properly against
1.9.1, there's something with the exception handling that I can't
figure out that causes segfaults. This looks to be "fixed" in trunk,
but that's not going to be out for a while (I've heard even well into
next year).

So I guess I misspoke a bit here, Rice is not fully 1.9 compatible,
though hopefully this issue can be figured out and fixed soon. When it
does I'll get another release out.

Jason

Shawn Anderson

4/27/2009 3:35:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

HA, he gotcha there Jason!

Congrats on the release.

/Shawn

On Mon, Apr 27, 2009 at 7:39 AM, Gregory Brown <gregory.t.brown@gmail.com>wrote:

> On Mon, Apr 27, 2009 at 10:06 AM, Jason Roelofs <jameskilton@gmail.com>
> wrote:
> > Rice: Ruby Interface for C++ Extensions
> > ========================================
> >
> > Change Log:
> >
> > * Works on Ruby 1.8.6, 1.8.7 and 1.9.0 with no changes to current
> extensions
>
> Do you mean 1.9.1?
>
> (1.9.0 was an unstable developer snapshot)
>
> -greg
>
>