Rice: Ruby Interface for C++ Extensions
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’s New?
- Ruby 2.0 support!
- Removed support for all Ruby < 1.8.7
- Fix converting from Ruby to a single char (#34)
- Fix define_singleton_method to set methods on the metaclass (#40)
- Fix a few potential memory leaks (#41, #42)
Supported Platforms:
-
Linux
-
Mac OS X
-
While Windows has been known to work with MinGW / MSYS, I haven’t
been able to keep this testing up as of late.
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: GitHub - jasonroelofs/rice: Ruby Interface for C++ Extensions
Mailing List: [email protected]
First email will be used as subscription and dropped.
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>
#include <rice/Constructor.hpp>
class MyWrapper {
public:
MyWrapper() { }
void doThis() { }
int doThat(int a, float b) { }
};
extern “C”
void Init_wrapper()
{
define_class(“MyWrapper”)
.define_constructor(Constructor())
.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)