Forum: Ruby rice-1.1.0 with Ruby 1.9.0 compatibility!

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Jason R. (Guest)
on 2009-04-27 18:07
(Received via mailing list)
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.rubyforge.org
 Project Page:  http://rubyforge.org/projects/rice


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!
Gregory B. (Guest)
on 2009-04-27 18:40
(Received via mailing list)
On Mon, Apr 27, 2009 at 10:06 AM, Jason R. 
<removed_email_address@domain.invalid>
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 R. (Guest)
on 2009-04-27 19:27
(Received via mailing list)
On Mon, Apr 27, 2009 at 10:39 AM, Gregory B.
<removed_email_address@domain.invalid> wrote:
> (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 A. (Guest)
on 2009-04-27 19:35
(Received via mailing list)
HA, he gotcha there Jason!

Congrats on the release.

/Shawn
This topic is locked and can not be replied to.